技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 在ssh服务里使用chroot

在ssh服务里使用chroot

浏览:4701次  出处信息

对于虚拟主机而言,平衡用户易用体验和安全是一个挑战,比如如果开发ssh给用户,那么无疑能极大的增加用户操作的灵活性,但是ssh的强大也是得在安全方面让管理员很头疼,如何将用户限制在自己的环境中,就显得尤为重要。幸而openSSH已经了解到了这点,目前的版本均支持chroot功能,下面我简单的描述一下在ubuntu 10.04系统上如何实现,其他系统实现的原理相同,只是一些配置文件和指令不同而已。

1)确定chroot目录
按照传统,chroot的目录都在/var/chroot/下面。我们遵循这种传统,将目录限定在/var/chroot/sshd下面。

2)创建必要的目录和文件。
我们需要在/var/chroot/sshd下创建一个最小的系统环境,特别是需要有交互终端,如果用到一个系统高级的功能,还需要一些特定的设备文件。因为我们这里只是演示最基本的功能,复杂的的功能,可以根据错误提示要按需增加需要的资源。
$sudo mkdir -p /var/chroot/sshd/{bin,home,etc}
$sudo apt-get install busybox-static
$sudo cp /bin/busybox /var/chroot/sshd/bin/

每次敲busybox 显然不够环保,我们还是做一些额外的工作,将所有内置的busybox命令都用软链接的方式导出来,下面的python脚本能快速帮你做到这点。

cat ctlink.py
#!/usr/bin/env python
import commands
import os,sys

output=commands.getoutput('./busybox --help')
c=[x.strip() for x in  output.split('functions:')[1].strip().split(',')]
for x in c:
	os.system("ln -sf busybox %s" % x)

只需要在/var/chroot/sshd/bin/下面执行这个脚本就好了。

为了能让chroot环境能正确识别用户,组等信息,我们需要在etc目录下创建passwd,group,shadow等文件。而用户登录验证的时候,依赖的是chroot之前的/etc/{passwd,shadow,group}文件,这里我们采取硬链接方式来解决这个问题
$cd /var/chroot/sshd/etc
$sudo ln -n /etc/{passwd,group,shadow} .

当然,如果你的/var和/并不是在一个分区上,那么硬链接就不能工作,那你可以尝试在/etc和/var/chroot/sshd/etc来个同步工具。

3)创建测试帐号
我们不用之前的用户帐号,是因为我们需要对帐号的基本信息做一些修改,我们不想破坏你现在的环境,因为来一个测试帐号是比较安全的。
$ sudo useradd -d /var/chroot/sshd/home/test -m -s /bin/sh test
然后修改/etc/passwd文件将
test:x:1001:1001::/var/chroot/sshd/home/test:/bin/sh
修改成
test:x:1001:1001::/home/test:/bin/sh
接着创建密码
$sudo passwd test
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码

4)修改openssh-server配置文件
编辑/etc/ssh/sshd_config文件,在最后一行增加chrootDirectory指令来指定chroot的路径,类似如下:
chrootDirectory /var/chroot/sshd
保存退出。

5)测试,测试
以上步骤完成后,执行
$sudo /etc/init.d/sshd reload
来重新加载配置文件
然后我们可以测试了,下面是一个登录的测试结果:

$ ssh test@localhost
test@localhost's password:
Linux wgzhao-laptop 2.6.32-23-generic #37-Ubuntu SMP Fri Jun 11 07:54:58 UTC 2010 i686 GNU/Linux
Ubuntu 10.04 LTS
~ $ pwd
/home/test
~ $ cd /
/ $ ls
bin   etc   home
/ $

建议继续学习:

  1. Linux shell脚本使用while循环执行ssh的注意事项    (阅读:6402)
  2. 为什么要用公钥/私钥而不是密码去做SSH身份验证    (阅读:4533)
  3. 懒人连ssh不输密码若干大法    (阅读:4360)
  4. ssh连接超时解决办法    (阅读:4325)
  5. 如何让ssh登录更加安全    (阅读:4333)
  6. ssh命令    (阅读:4063)
  7. SSH无密码登录    (阅读:4055)
  8. 共享会话的ssh连接配置    (阅读:3432)
  9. SSH下连接Oracle的方法    (阅读:3274)
  10. SSH日常用法小例    (阅读:3191)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1