限制用户目录的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/]]