Chinaunix

标题: 限制用户目录的sftp和scp,ssh服务 [打印本页]

作者: trydofor    时间: 2006-10-09 17:28
标题: 限制用户目录的sftp和scp,ssh服务
不知道大家有没有晕倒在类似的问题上,html版在
http://www.trydofor.com/study/st ... h-chroot-by-pam.htm

========================================================
内容摘要:

通过pam的chroot,使openssh的sftp,ssh,scp能够限制用户在指定目录内活动。

试验目的:

使openssh的S服务,能够限制用户在指定目录内活动,以屏蔽可能存在的安全隐患。

但是Red Hat Enterprise Linux ES release 3的openssh是3.6.1,不支持pam验证
而且jailkit也不能在此环境下正常工作。

试验环境:

192.168.0.1 和 192.168.0.2 是相同配置的机器,
我们从192.168.0.1 rsh到 192.168.0.2,以保证ssh服务停止的时候
我们仍然可以进行远程操作(rsh配置请参考以前的手册)

[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

面临问题:

1.要远程升级 openssh 到 3.9以上,以支持pam认证
2.构造chroot环境

操作步骤:

1 远程升级 openssh

1.1 上传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


1.2 编译 openssh
tar xvzf openssh-3.9p1.tar.gz
cd openssh-3.9p1
./configure --with-pam --prefix=/usr --sysconfdir=/etc/ssh
make

--with-pam,是支持pam
--prefix=/usr --sysconfdir=/etc/ssh,是与原来的sshd保持一直

1.3 如果1.2通过,停止sshd服务
service sshd stop
ps -ef |grep sshd

1.4 卸载 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,因为我们只关心这两个服务,
对于其他的依赖关系尽量保持原有版本。(没时间搞清楚依赖关系,最好不动了)

1.5  安装刚刚编译的openssh
make install

1.6 重建 /etc/rc.d/init.d/sshd
cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd

1.7 重建 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

1.8 重启 sshd
service sshd start

2 配置sshd以支持chroot

2.1 构建chroot环境
因为jailkit在当前版本的linux下不能正常运行,而且我们想搭建一个简洁的
chroot环境,这里使用了手动制作:)

2.1.1 使用环境变量,以方便干活
export CHROOT_PATH=/home/chroot_env

2.1.2 创建基本目录
mkdir -p $CHROOT_PATH/{bin,home,usr,lib}
chown -r root.root $CHROOT_PATH
cd $CHROOT_PATH

2.1.3 创建 /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

2.1.4 创建 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登陆的


2.2 配置chroot-openssh

2.2.1 添加或指定享受此待遇的用户,这里是sftp_test
useradd -d /home/sftp_test sftp_test #如果没有用户,指向chroot/home
mv /home/sftp_test $CHROOT_PATH/home/sftp_test
ln -s $CHROOT_PATH/sftp_test /home/sftp_test
passwd sftp_test

这里使用了软连接,为了保持chroot环境和实际环境的一致。


2.2.2 修改sshd配置
[vi /etc/ssh/sshd_config]
UsePAM yes

2.2.3 修改sshd.pam配置
[vi /etc/pam.d/sshd]
session    required     pam_chroot.so

2.2.4 修改chroot配置
echo sftp_test   $CHROOT_PATH >> /etc/security/chroot.conf
cat /etc/security/chroot.conf

2.2.5 重新启动
service sshd restart

3 可选操作,增加安全性
chattr -R +i $CHROOT_PATH
chattr -R -i $CHROOT_PATH/home


经验总结:

1. 在升级openssh操作中,需要使用rsh登陆,以确保可以无论sshd如何,
都能够正常进行远程操作。

2. jailkit是个好工具,可以实现限定用户的功能和更强大的功能,但是在
低版本的linux中不能正常工作,而且不如这样的简洁和方便

3. 上面的环境很是简陋,在scp中,会找你要很多命令,如ls,group等
可以cp需要的命令到CHROOTENV中,并ldd,把相应的so也复制过去,
参考 2.1.3即可

参考资料:

    * openssh 官方主页
    * google 'openssh pam'
    * jailkit 官方主页
    * google,man手册和不断的尝试




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2