限制用户目录的sftp和scp,ssh
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- 作者:臭豆腐[trydofor.com]
- 日期:2006-10-09
- 授权:署名-非商业-保持一致 1.0 协议
- 声明:拷贝、分发、呈现和表演本作品,请保留以上全部信息。
0. 文档目录
^^^^^^^^^^
[[<=$INDEX]]
1. 试验目的
^^^^^^^^^^^
使openssh的S服务,能够限制用户在指定目录内活动,以屏蔽可能存在的安全隐患。
但是Red Hat Enterprise Linux ES release 3的openssh是3.6.1,不支持pam验证,
而且jailkit也不能在此环境下正常工作。
2. 试验环境
^^^^^^^^^^^
192.168.0.1 和 192.168.0.2 是相同配置的机器,
我们从192.168.0.1 rsh到 192.168.0.2,以保证ssh服务停止的时候
我们仍然可以进行远程操作(rsh配置请参考以前的手册)
=================== tty : root@trydofor ========================
cat /etc/issue
>Red Hat Enterprise Linux ES release 3 (Taroon)
rpm -qa |grep openssh
>openssh-server-3.6.1p2-18
>openssh-askpass-gnome-3.6.1p2-18
>openssh-clients-3.6.1p2-18
>openssh-askpass-3.6.1p2-18
>openssh-3.6.1p2-18
================================================================
3. 面临问题
^^^^^^^^^^^
1) 要远程升级 openssh 到 3.9以上,以支持pam认证
2) 构造chroot环境
4. 操作步骤
^^^^^^^^^^^
4.1. 远程升级openssh
^^^^^^^^^^^^^^^^^^^^
====================== tty: root@trydofor ======================
# openssh-3.9p1.tar.gz到192.168.0.1
rcp openssh-3.9p1.tar.gz root@192.168.0.2:/root/
rsh 192.168.0.2 -l root
#编译 openssh
tar xvzf openssh-3.9p1.tar.gz
cd openssh-3.9p1
#--with-pam,是支持pam
#--prefix=/usr --sysconfdir=/etc/ssh,是与原来的sshd保持一直
./configure --with-pam --prefix=/usr --sysconfdir=/etc/ssh
make
#如果以上成功,停止sshd服务
service sshd stop
ps -ef |grep sshd
#卸载 openssh-server 和 openssh
rpm -qa|grep openssh
>openssh-askpass-gnome-3.6.1p2-18
>openssh-clients-3.6.1p2-18
>openssh-askpass-3.6.1p2-18
>openssh-server-3.6.1p2-18
>openssh-3.6.1p2-18
rpm -e --nodeps openssh-server
rpm -e --nodeps openssh
#这里只卸载了openssh-server 和 openssh,因为我们只关心这两个服务,
#对于其他的依赖关系尽量保持原有版本。(没时间搞清楚依赖关系,最好不动了)
#安装刚刚编译的openssh
make install
#重建 /etc/rc.d/init.d/sshd
cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
#重建 pam.d/sshd
cat /etc/pam.d/sshd
>#%PAM-1.0
>auth required pam_stack.so service=system-auth
>auth required pam_nologin.so
>account required pam_stack.so service=system-auth
>password required pam_stack.so service=system-auth
>session required pam_stack.so service=system-auth
#重启 sshd
service sshd start
================================================================
4.2. 配置sshd以支持chroot
^^^^^^^^^^^^^^^^^^^^^^^^^
====================== tty: root@trydofor ======================
#构建chroot环境
#因为jailkit在当前版本的linux下不能正常运行,而且我们想搭建一个简洁的
#chroot环境,这里使用了手动制作:)
#使用环境变量,以方便干活
export CHROOT_PATH=/home/chroot_env
#创建基本目录
mkdir -p $CHROOT_PATH/{bin,home,usr,lib}
chown -r root.root $CHROOT_PATH
cd $CHROOT_PATH
#创建 /bin/bash环境
cp /bin/bash $CHROOT_PATH/bin/bash
for a in $(ldd /bin/bash | awk '{print $3}')
do
[ -e $CHROOT_PATH`dirname $a` ] || mkdir -p $CHROOT_PATH`dirname $a`
cp -f $a $CHROOT_PATH$a;
done
#创建 sftp-server 环境
export SFTP_SERVER=`grep sftp /etc/ssh/sshd_config | awk '{print $3}'`
echo $SFTP_SERVER
mkdir -p $CHROOT_PATH/`dirname $SFTP_SERVER`
cp $SFTP_SERVER $CHROOT_PATH$SFTP_SERVER
for a in $(ldd $SFTP_SERVER | awk '{print $3}')
do
[ -e $CHROOT_PATH`dirname $a` ] || mkdir -p $CHROOT_PATH`dirname $a`
cp -f $a $CHROOT_PATH$a;
done
#chroot环境已经搭建完毕,只有一个bash可供使用
#sftp-server,是为了相应用户的sftp登陆的
#配置chroot-openssh
#添加或指定享受此待遇的用户,这里是sftp_test
#如果没有用户,指向chroot/home
useradd -d /home/sftp_test sftp_test
mv /home/sftp_test $CHROOT_PATH/home/sftp_test
#这里使用了软连接,为了保持chroot环境和实际环境的一致。
ln -s $CHROOT_PATH/sftp_test /home/sftp_test
passwd sftp_test
#修改sshd配置
[vi /etc/ssh/sshd_config]
UsePAM yes
2.2.3 修改sshd.pam配置
vi /etc/pam.d/sshd
>session required pam_chroot.so
#修改chroot配置
echo sftp_test $CHROOT_PATH >> /etc/security/chroot.conf
cat /etc/security/chroot.conf
#重新启动
service sshd restart
#可选操作,增加安全性
chattr -R +i $CHROOT_PATH
chattr -R -i $CHROOT_PATH/home
================================================================
5. 经验总结
^^^^^^^^^^^
1. 在升级openssh操作中,需要使用rsh登陆,以确保可以无论sshd如何,
都能够正常进行远程操作。
2. jailkit是个好工具,可以实现限定用户的功能和更强大的功能,但是在
低版本的linux中不能正常工作,而且不如这样的简洁和方便
3. 上面的环境很是简陋,在scp中,会找你要很多命令,如ls,group等
可以cp需要的命令到CHROOTENV中,并ldd,把相应的so也复制过去,
6. 参考资料
^^^^^^^^^^^
* [[openssh 官方主页=>http://www.openssh.org]]
* [[google 'openssh pam'=>http://www.google.cn/search?hl=zh-CN&q=openssh+pam&btnG=Google+%E6%90%9C%E7%B4%A2&meta=]]
* [[jailkit 官方主页=>http://olivier.sessink.nl/jailkit/]]