问题背景:

为了加强linux服务器的安全性,要求指定的用户从ssh登录后只能在指定的目录下工作并只能运行指定的命令或脚本


解决:

修改ssh的登录验证方法

[root@localhost ~]# vi /etc/pam.d/sshd

#%PAM-1.0

auth include system-auth

account required pam_nologin.so

account include system-auth

password include system-auth

session include system-auth

session required pam_loginuid.so

session required pam_chroot.so (这是我们手动加入的一行)


设置用户目录

[root@localhost ~]# mkdir /virtual_root/chroot/lib -p

[root@localhost ~]# mkdir /virtual_root/chroot/etc -p

[root@localhost ~]# mkdir /virtual_root/chroot/bin -p

[root@localhost ~]# mkdir /virtual_root/chroot/home/ziyang -p

(你的/etc/passwd中应该有一个名为ziyang的用户)

[root@localhost ~]# chown ziyang.ziyang /virtual_root/chroot/home/ziyang


修改chroot配置文件

[root@localhost ~]# vi /etc/security/chroot.conf

ziyang /virtual_root/chroot (手动加入此行,ziyang就只能被限定在/virtual_root/chroot目录下了。


注:是通过ssh登录的用户,对本地控制台登录的用户无效。但是可以有方法去实现)


设置用户权限和可用命令

[root@localhost ~]# cp /lib/ld-linux.so.2 /lib/libc.so.6 /lib/libdl.so.2 /lib/libtermcap.so.2 /virtual_root/chroot/lib

[root@localhost ~]# cp /bin/bash /virtual_root/chroot/bin

[root@localhost ~]# grep ziyang < /etc/passwd > /virtual_root/chroot/etc/passwd


应用测试

使用ssh从其他的主机登录你的linux服务器,你会发现ziyang这个用户登录后被限定在了/virtual_root/chroot目录下,并且没有可以使用的shell命令。