---普通用户登陆到服务器上只能执行ssh,ls,cat等有限的基础命令,另外要求把用户锁定在特定目录中,不能看到其他任何目录下文件
-建立一个指定目录
mkdir -p /data/opt/
-列出指定目录必须包含支持用户会话所必需的文件和目录
ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
crw-rw-rw- 1 root root 1, 3 4月 6 21:35 /dev/null
crw-rw-rw- 1 root root 1, 8 4月 6 21:35 /dev/random
lrwxrwxrwx 1 root root 15 4月 6 21:35 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 4月 6 21:35 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 4月 6 21:35 /dev/stdout -> /proc/self/fd/1
crw-rw-rw- 1 root tty 5, 0 4月 6 21:35 /dev/tty
crw-rw-rw- 1 root root 1, 5 4月 6 21:35 /dev/zero
-用 mknod 命令创建 /dev 下的文件。
-m 标志用来指定文件权限位,
-c意思是字符文件,
-两个数字分别是文件指向的主要号和次要号
mkdir -p /data/opt/dev/
cd /data/opt/dev/
mknod -m 666 null c 1 3
mknod -m 666 tty c 5 0
mknod -m 666 zero c 1 5
mknod -m 666 random c 1 8
ls
null random tty zero
-在 chroot 监狱中设置合适的权限。
-注意 chroot 监狱和它的子目录以及子文件必须被 root 用户所有,
-并且对普通用户或用户组不可写
chown root:root /data/opt/
chmod 755 /data/opt/
-为SSH设置交互式shell
mkdir -p /data/opt/bin
cp -v /bin/bash /data/opt/bin/
->'/bin/bash' -> '/data/opt/bin/bash'
mkdir -p /data/opt/lib64
ldd /bin/bash
linux-vdso.so.1 (0x00007ffc2cd9f000)
libtinfo.so.6 => /lib64/libtinfo.so.6 (0x00007f7a7c826000)
libc.so.6 => /lib64/libc.so.6 (0x00007f7a7c600000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7a7c9b8000)
-将识别出的共享库复制到lib64目录下方
cp -v /lib64/libtinfo.so.6 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 /data/opt/lib64
-创建并配置opt用户并设置安全密码, 注:若添加更多用户,则需要执行操作
useradd opt
passwd opt
-> QazWsx
mkdir /data/opt/etc
cp -vf /etc/{group,passwd} /data/opt/etc/
-配置ssh使用chroot
vi /etc/ssh/sshd_config
-> Match User opt
-> ChrootDirectory /data/opt/
-配置sftp
-找到如下行,并注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp #指定使用sftp服务使用系统自带的internal-sftp
Match Group opt #之前默认创建的组
ForceCommand internal-sftp #指定sftp命令
-重启
systemctl restart sshd
-测试
ssh opt@192.168.1.4
-可以看到当前目录已经是“根目录”
-属于root用户组,所以无写权限。进行如下处理
mkdir /data/opt/app/
chown opt:opt /data/opt/app/
chmod 777 /data/opt/app/
-接下来,在 bin 目录中安装几个用户命令,如 ls、date、mkdir
cp -v /bin/ls /data/opt/bin/
cp -v /bin/date /data/opt/bin/
cp -v /bin/mkdir /data/opt/bin/
-检查上面命令的共享库并将它们移到 chroot 监狱的库目录中:
ldd /bin/ls
linux-vdso.so.1 (0x00007ffc91246000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f6087b18000)
libcap.so.2 => /lib64/libcap.so.2 (0x00007f6087b0e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f6087800000)
libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f6087a72000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6087b72000)
....
-将识别出的共享库复制到lib64目录下方
cp -v ..... /data/opt/lib64