服务器为 RedHat5.5
root用户操作:
1. 部署目录环境
创建一个目录,目录结构与实际的/目录结构类似
创建用户
useradd ppp
passwd ppp
将chroot目录设置在/chroot下
mkdir -p /chroot/{etc,dev,proc,lib,bin,home,usr}
mkdir -p /chroot/usr/{bin,lib,libexec}
mkdir -p /chroot/home/ppp
拷贝/etc/passwd文件
cp -a /etc/passwd/ chroot/etc/passwd 然后删除里面的无关用户。
拷贝需要的命令例如
cp -a /bin/bash /chroot/bin/
查看bash命令需要哪些.so文件,拷贝到相应的目录中
[root@localhost ~]# ldd /bin/bash
linux-gate.so.1 => (0x003a6000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x004b7000)
libdl.so.2 => /lib/libdl.so.2 (0x004b1000)
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x0031f000)
拷贝动态库文件
cp -a /lib/{libtermcap.so.2,libdl.so.2,ld-linux.so.2} /chroot/lib
cp -a /lib/i686/nosegneg/libc.so.6 /chroot/lib/
拷贝完成后,ls -l,会发现拷贝的都是软链接文件
1.# ll
2.total 0
3.lrwxrwxrwx. 1 root root 10 Feb 6 13:58 ld-linux.so.2 -> ld-2.12.so
4.lrwxrwxrwx. 1 root root 12 Feb 6 13:58 libc.so.6 -> libc-2.12.so
5.lrwxrwxrwx. 1 root root 13 Feb 6 13:58 libdl.so.2 -> libdl-2.12.so
6.lrwxrwxrwx. 1 root root 15 Jan 16 22:36 libtinfo.so.5 -> libtinfo.so.5.7
拷贝原始文件
cp -a /lib/{ld-2.12.so,libc-2.12.so,libdl-2.12.so,libtinfo.so.5.7} /chroot/lib
拷贝用户下的信息
cp -a /home/ppp/* /chroot/home/ppp/
简单测试一下,看看chroot命令是否可以用该目录当作/环境。
chroot /chroot
没有错误信息即可,正常应显示bash的信息。
2. ssh设置
cat /etc/ssh/sshd_config | grep UsePAM
确保
UsePAM yes
默认为yes
3. pam验证增加chroot模块
/etc/pam.d/sshd
在最下面添加一行:
session required pam_chroot.so
一定要确保输入正确,否则可能造成ssh无法登录.
pam_chroot.so 执行后会读取配置文件以决定是否使用chroot环境。
/etc/security/chroot.conf
[root@localhost security]# cat chroot.conf
# /etc/security/chroot.conf
# format:
# username_regex chroot_dir
#matthew /home
增加下面一行
ppp /chroot
4. 调试ssh服务
测试:
登录失败,打开/var/log/secure日志查看:
Aug 19 07:08:52 localhost sshd[9993]: pam_env(sshd:setcred): Unable to open config file: /etc/security/pam_env.conf: No such file or directory
Aug 19 07:08:52 localhost sshd[9978]: error: openpty: No such file or directory
Aug 19 07:08:52 localhost sshd[9993]: error: session_pty_req: session 0 alloc failed
cp -a /etc/security /chroot/etc/
为chroot准备dev环境,准备pts环境以及准备proc环境
mount --bind /dev /chroot/dev
mount -t devpts -o pid=5,mode=620 devpts /chroot/dev/pts
mount -t proc /proc /chroot/proc/
再次登录测试:
Aug 2007:08:52 localhost sshd[21426]: pam_env(sshd:setcred): Unable to open env file: /etc/environment: No such file or directory
Aug 2007:08:52 localhost sshd[21390]: error: ssh_selinux_setup_pty: security_compute_relabel: No such file or directory
cp -a /etc/environment /chroot/etc/
重新测试:
[email protected]'s password:
-bash-3.5$
OK,可以正常登录了。
5. 环境设置
最简单的就是不设置环境,使用bash版本号作为提示符。
或者也可以按正常的用户一样设置提示符,需要做的操作比较多。
cp -a /etc/{profile,profile.d,bashrc} /chroot/etc/
ssh ppp@192.168.13.136
ppp@192.168.13.136's password:
-bash: id: command not found
-bash: id: command not found
-bash: uname: command not found
-bash: /bin/grep: No such file or directory
-bash: /bin/grep: No such file or directory
-bash: /bin/grep: No such file or directory
-bash: /usr/bin/id: No such file or directory
-bash: [: =: unary operator expected
#whereis id
id: /usr/bin/id /usr/share/man/man1p/id.1p.gz /usr/share/man/man1/id.1.gz
cp -a /usr/bin/id /chroot/usr/bin/
cp -a /bin/grep /chroot/bin/
cp -a /bin/uname /chroot/bin/
# ldd /chroot/usr/bin/id
linux-vdso.so.1 => (0x00007fff4cba1000)
libselinux.so.1 => /lib/libselinux.so.1 (0x0000003690200000)
libc.so.6 => /lib/libc.so.6 (0x000000368e600000)
libdl.so.2 => /lib/libdl.so.2 (0x000000368ea00000)
/lib/ld-linux.so.2 (0x000000368e200000)
按上面的方法解决即可。
如果SSH登录不能上传下载文件的话,有可能是sftp的问题
[root@localhost ssh]# cat sshd_config | tail -1
Subsystem sftp /usr/libexec/openssh/sftp-server
可能是sftp-server没有加载
cp -a /usr/libexec/openssh/sftp-server /chroot/usr/libexec/openssh/sftp-server
然后在/chroot/home/ppp/目录下修改.bashrc文件
再最前面加一行
[ -z "$PS1" ] && return
或者:
[$-!=*i*]&&return
. .bashrc 执行加载
ssh登录即可上传下载文件。