/chroot环境搭建

来源:互联网 发布:淘宝怎样延长收货时间 编辑:程序博客网 时间:2024/06/06 01:35

转自:http://4585258.blog.51cto.com/4575258/1285734/

服务器 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服务

测试:

ssh ppp@192.168.13.136

登录失败,打开/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/


再次登录测试:

ssh ppp@192.168.13.136

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/


重新测试:

ssh ppp@192.168.13.136

ppp@192.168.13.136'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登录即可上传下载文件。


补充:

1)在我的环境中,执行到第4步ssh连接时报错:

pam_unix(sshd:session): session closed for user root

解决办法:

vi /etc/ssh/sshd_config

修改如下内容:

#PermitRootLogin NO

PermitRootLogin yes

2)使用ssh上传文件失败

第一次执行失败是因为方括号两侧未留空格,正确写法:[ $-!=*i* ] && return

[root@localhost zhangs]# . .bashrc 
-bash: [himBH!=*i*]: command not found
[root@localhost zhangs]# vi .bashrc 
[root@localhost zhangs]# . .bashrc 
[root@localhost zhangs]#


centos7中配置

http://www.myhack58.com/Article/sort099/sort0102/2017/86571.htm


原创粉丝点击