Linux|系统管理|WEB开发

关注Linux,系统管理,WEB开发以及开源世界

在ssh服务里使用chroot

| Comments

对于虚拟主机而言,平衡用户易用体验和安全是一个挑战,比如如果开发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脚本能快速帮你做到这点。

python ctlink.py
1
2
3
4
5
6
7
8
9
        #!/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来个同步工具。

  1. 创建测试帐号 我们不用之前的用户帐号,是因为我们需要对帐号的基本信息做一些修改,我们不想破坏你现在的环境,因为来一个测试帐号是比较安全的。
    $ 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

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

  3. 测试,测试 以上步骤完成后,执行 $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
      / $ 
    

Comments