Linux下用chroot和pam限制特定用户
买了小黑以后,决定把以前的旭日本本扔在实验室24小时开机了。装了ssh可以在家里远程使用,蛮爽。顺便开了个guest账户,想留给别人scp传东西啥的,但是发现安全问题很难解决。想把这个用户限制在某一目录之下,但又不干扰其他用户的正常使用,Linux并没有直接方式可以实现。研究许久之后,终于用chroot和pam搞定。chroot的原理是将某一目录模拟成根目录,使之无法访问目录之外的资源,类似于虚拟机。而pam的作用是针对特定用户,自动执行chroot。记录一下大致步骤。
1、新建guest账户。
2、我用的是Ubuntu 8.04 Desktop,默认没有装libpam-chroot。装之。
sudo apt-get install libpam-chroot
3、把chroot环境搞起来,我设置的是/chroot。
sudo mkdir /chroot
sudo mkdir /chroot/bin
sudo mkdir /chroot/etc
sudo mkdir /chroot/home
sudo mkdir /chroot/lib
sudo mkdir /chroot/usr
等等
4、把需要用到的命令cp过去。
sudo cp /bin/bash /chroot/bin/
sudo cp /bin/ls /chroot/bin/
sudo cp /bin/cp /chroot/bin/
sudo cp /bin/mv /chroot/bin/
sudo cp /bin/rm /chroot/bin/
等等
5、把这些命令用到的库cp过去,这个比较麻烦,用ldd命令可以查到每个命令都需要哪些库,然后一个个cp。嫌麻烦的话可以把整个/lib和/usr/lib都搬过去,然后有些明显没用的再删掉,比如图形界面相关的,剩下100来兆分辨不清楚,就都扔在那里,也还可以忍。
6、建立/chroot/etc/passwd,内容为/etc/passwd里面guest那一行。只要那一行,别的不要。
sudo tail -1 /etc/passwd > /chroot/etc/passwd
7、修改/etc/pam.d/ssh 加一句。
session required pam_chroot.so
8、修改/etc/security/chroot.conf 加一句。
guest /chroot
当然/etc/ssh/sshd_config里面要允许guest远程登录。
然后差不多就可以了,我印象中就这些。想起来再补充吧。
