搭建OpenSSHServer跳板服务器

[复制链接]
查看1120 | 回复0 | 2012-4-1 19:25:05 | 显示全部楼层 |阅读模式
部署背景:最近有一客户提出这么个需求,要在公司信息机房部署一台登录跳板服务器,让以后用户访问机房内的服务器都必须先登录这台跳板服务器,然后再ssh到其他服务器。具体要求为:
1)安全最大化,普通用户登陆到这台跳板服务器后只能执行ssh,ls等有限的基础命令。
2)把普通用户锁定在特定的目录下,这样即使被hack,也不会影响其他用户。
需求分析:
根据客户所提要求,那么就必须搭建一opensshserver,利用ssh+chroot功能来实现。而在openssh4.8p1以前的版本,要支持chroot,必须使用第三方的修改。但从openssh4.8p1以后,chroot功能已经被内置了,为此可以直接在服务器系统(CentOS5.5)上搭建。
系统平台:
CentOS5.5i386
openssh5.6p1
zlib-1.2.5
openssl-1.0.0c
CentOS5.5中自带的openssh是4.3p2版本的,必须升级到4.8p1以后,我选择升级到目前最高版本5.6p1。具体升级到openssh5.6p1的方法可以参考我这篇文章:CentOS5.5下升级OpenSSH-4.3p2到5.6p1
根据sshd_config的man中所述,实现chroot功能需要配置"ChrootDirectory"这个参数。
ChrootDirectory:定义了用户通过认证以后的chroot目录,此目录及其所有子目录的属主必须是root,且这些目录只有root帐号可以进行写操作,其他任何组和帐号都不可写。chroot以后,sshd会将用户的工作目录转到chroot目录中用户自己的主目录。如果ChrootDirectory定义的目录下没有相应的/home/username目录,则会直接转到chroot的/目录下。
下边是详细的配置过程:
1.新增用户ait(不创建其缺省主目录)
[root@server~]#useradd-Mait
[root@server~]#passwdait
2.修改/etc/ssh/sshd_config文件[root@server~]#vi/etc/ssh/sshd_config#增加以下内容
MatchUserait
ChrootDirectory/var/chroot
注:这里我指定chroot目录是/var/chroot
[root@server~]#/etc/init.d/sshdrestart#重启SSH服务
3.搭建基本的chroot环境
小贴士:
一个最基本的chroot环境至少有一个shell(例如sh,bash)和一些必要的系统设备文件(例如/dev/null,/dev/zero),如果要允许用户执行一些命令,那么还要准备相应的命令可执行文件和命令依赖的库文件。
[root@server~]#mkdir/var/chroot
[root@server~]#cd/var/chroot
[root@serverchroot]#mkdir{bin,dev,lib,lib64,etc,home}
[root@serverchroot]#mknoddev/nullc13
[root@serverchroot]#mknoddev/zeroc15
#可选,这两个文件ssh命令需要,如缺少会报告:PRNGisnotseeded
[root@serverchroot]#mknoddev/randomc18
[root@serverchroot]#mknoddev/urandomc19
#可选,ssh命令需要,如缺少会报告:Hostkeyverificationfailed
[root@serverchroot]#mknoddev/ttyc50
#修改/var/chroot及其子目录的属主,并修改权限
[root@serverchroot]#chown-Rroot.root/var/chroot
[root@serverchroot]#chmod-R755/var/chroot
#允许用户写这些设备文件,不可写会有些命令报错
[root@serverchroot]#chmod0666dev/{null,zero,tty}
然后将要允许用户执行的可执行文件和依赖的库文件复制到相应位置。例如必须给用户一个可用的shell,则我们一般用/bin/bash,那么执行ldd命令查看相关信息:
[root@serverchroot]#ldd/bin/bash
linux-gate.so.1=>(0x00572000)
libtermcap.so.2=>/lib/libtermcap.so.2(0x0388b000)
libdl.so.2=>/lib/libdl.so.2(0x00839000)
libc.so.6=>/lib/libc.so.6(0x006b3000)
/lib/ld-linux.so.2(0x0068f000)
说明/bin/bash要正确执行,依赖于如下几个文件:
/lib/libtermcap.so.2
/lib/libdl.so.2
/lib/libc.so.6
/lib/ld-linux.so.2那么我们必须把/bin/bash和相应的库文件复制到对应的位置。
[root@serverchroot]#cp-p/bin/bash/var/chroot/bin
[root@serverchroot]#cp-p/lib/libtermcap.so.2/var/chroot/lib
[root@serverchroot]#cp-p/lib/libdl.so.2/var/chroot/lib
[root@serverchroot]#cp-p/lib/libc.so.6/var/chroot/lib
[root@serverchroot]#cp-p/lib/ld-linux.so.2/var/chroot/lib
类似上边这样,对每个想要允许用户执行的文件都如此操作即可。
这里只是为了说明下具体过程,实际应用时肯定要用脚本来执行的。我从一网站抄来一个脚本(这里我命名为shell.sh),略加修改,内容如下:#/bin/bash
#要允许执行的文件列表
cmdlist="/bin/bash/bin/ls/bin/cp/bin/mkdir/bin/mv/bin/rm/bin/rmdir"
#chroot路径
chroot_path="/var/chroot"
#判断依赖的库文件
lib_1=`ldd$cmdlist|awk'{print$1}'|grep"/lib"|sort|uniq`
lib_2=`ldd$cmdlist|awk'{print$3}'|grep"/lib"|sort|uniq`
#复制命令文件
foriin$cmdlist
do
cp-a$i$chroot_path/bin/&&echo"$idone"
done
#复制依赖的库文件(因为是i386,所以是lib,如果是x86_64,则是lib64,)
forjin$lib_1
do
cp-f$j$chroot_path/lib/&&echo"$jdone"
done
forkin$lib_2
do
cp-f$k$chroot_path/lib/&&echo"$kdone"
done
[root@serverchroot]#ll
总计28
drwxr-xr-x2rootroot409602-2505:47bin
drwxr-xr-x2rootroot409602-2505:36dev
drwxr-xr-x2rootroot409602-2505:35etc
drwxr-xr-x2rootroot409602-2505:35home
drwxr-xr-x2rootroot409602-2505:51lib
drwxr-xr-x2rootroot409602-2505:35lib64
-rw-r--r--1rootroot66502-2506:50shell.sh
[root@serverchroot]#chmod755shell.sh
[root@serverchroot]#./shell.sh
/bin/bashdone
/bin/lsdone
/bin/cpdone
/bin/mkdirdone
/bin/mvdone
/bin/rmdone
/bin/rmdirdone
/lib/ld-linux.so.2done
/lib/libacl.so.1done
/lib/libattr.so.1done
/lib/libc.so.6done
/lib/libdl.so.2done
/lib/libpthread.so.0done
/lib/librt.so.1done
/lib/libselinux.so.1done
/lib/libsepol.so.1done
/lib/libtermcap.so.2done
复制/etc/passwd和/etc/group文件到/var/chroot/etc中,并删除用户自己和root以外的所有帐号。如果没有这两个文件,用户登录以后会报“Ihavenoname!”
[root@serverchroot]#cp-p/etc/passwd/var/chroot/etc/
[root@serverchroot]#cp-p/etc/group/var/chroot/etc/
4.建立chroot目录中的用户主目录
[root@serverchroot]#mkdir/var/chroot/home/ait
[root@serverchroot]#chown-Rait/var/chroot/home/ait
[root@serverchroot]#chmod700/var/chroot/home/ait
OK,经过以上的配置,现在就可以进行测试了。用ait帐号ssh登录到系统中,看到ait是被限制在了自己的宿主目录/home/ait下了。测试执行一些命令,发现只有刚才复制过来的命令可以执行,其他全都不可以。
-bash-3.2$pwd
/home/ait
-bash-3.2$ls
-bash-3.2$mkdirait_test
-bash-3.2$ls
ait_test
-bash-3.2$ll
-bash:ll:commandnotfound
发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则