- 论坛徽章:
- 0
|
不知道大家有没有晕倒在类似的问题上,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手册和不断的尝试 |
|