加强Linux服务器安全的Choot使用

日期: 2010-12-01 作者:Mark G. SobellPrentice Hall翻译:Dan 来源:TechTarget中国 英文

上篇文章中,我们已经讨论了如何使用chroot jail或TCP wrapper确保Linux服务器安全,接下来让我们看看具体的操作吧。   使用chroot   创建一个chroot jail很简单:用root身份登录,输入命令/usr/sbin/chroot directory(directory为相应的目录)。该directory目录就变成了根目录,并且该程序试图运行默认的shell。利用/home/sam目录中的根权限,在/home/sam/jail目录下创建chroot jail的命令如下: #/usr/sbin/chroot/home/sam/jail /usr/sbin/chro……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

上篇文章中,我们已经讨论了如何使用chroot jail或TCP wrapper确保Linux服务器安全,接下来让我们看看具体的操作吧。

  使用chroot

  创建一个chroot jail很简单:用root身份登录,输入命令/usr/sbin/chroot directory(directory为相应的目录)。该directory目录就变成了根目录,并且该程序试图运行默认的shell。利用/home/sam目录中的根权限,在/home/sam/jail目录下创建chroot jail的命令如下:

#/usr/sbin/chroot/home/sam/jail

/usr/sbin/chroot: 不能运行命令'/bin/bash',无此文件或目录。

  该示例创建了一个chroot jail,但是当它试图运行bash shell时却失败了。Jail一旦创建,jail目录就会取代根目录的名字,/,所以chroot找不到/bin/bash路径指定的文件。此种情况下,chroot jail虽然工作,但是没有任何用处。

  让chroot jail按照你的意愿工作有点麻烦。为了在上述例子中的chroot jail里面运行bash,你需要在jail中(/home/sam/jail/bin)创建一个bin目录,并把/bin/bash拷贝到这个目录下。由于bash二进制文件动态链接某些共享库,你还需要把这些库复制到jail中。这些库应该放在lib目录下。

  下面的例子中创建了必要的目录、拷贝了bash、使用ldd显示bash所需要的共享库,并把必要的库复制到lib目录下。

  linux-gate.so.1文件是由内核提供的动态共享对象(DSO),它能加速系统的调用;你不必把它复制到lib目录下。

$ pwd

/home/sam/jail

$ mkdir bin lib

$ cp binbash bin

$ ldd binbash

  linux-gate.so.1 = (0x0089c000)

  libtinfo.so.5 = liblibtinfo.so.5 (0x00cdb000)

  libdl.so.2 = liblibdl.so.2 (0x00b1b000)

  libc.so.6 = liblibc.so.6 (0x009cb000)

  libld-linux.so.2 (0x009ae000)

$ cp /lib/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux.so.2} lib

  现在什么都设置好了,你可以重新启动chroot jail。尽管普通用户可以进行所有设置,但是你必须用超级用户运行chroot。

$ su
Password:
# /usr/sbin/chroot .
bash-3.2# pwd
/
bash-3.2# ls
bash ls command not found        
bash-3.2#

  这一次chroot找到并开启了bash,显示出它的默认提示符(bash- 3.2#)。Pwd命令可以正常运行,因为它是一个shell内置命令。然而,bash无法找到ls功能(它不在chroot jail中)。如果你想让用户使用ls命令,你可以把/bin/ls文件夹以及它的库拷贝到jail目录下。

  为了创建一个有用的chroot jail,首先请确定chroot jail用户需要哪些功能。然后把相应的二进制文件和它们的库拷贝到jail中。或者,你可以创建二进制文件的静态拷贝,并把它们放在jail中,不必安装单独的库。(静态链接二进制文件要比他们的动态形式大得多。带有bash和核心功能的基础系统大小超过了50兆字节)。你可以在bash和coreutils SRPMS包中找到大多数常用功能的源代码。

  不管你选择哪种技术,你都必须把su拷贝到jail中。非root用户需要用su命令来运行程序。因为root用户可以从chroot jail中跳出来,所以在chroot jail中运行程序必须使用非root用户。

  Fedora RHEL发布的动态su版本需要PAM,并且不会在jail中运行。如果想在jail中使用su,你就要从源代码中创建一个su的拷贝。默认情况下,你创建的任何一个su拷贝都不需要PAM。

  为了使用su命令,你必须把/etc/passwd 和 /etc/shadow文件中的相关内容都拷贝到jail里的etc目录下相应的文件中。

  提示

  同时使用多个chroot jail

  如果你打算使用多个chroot jail,那么请在某个地方保持一个干净的bin和libfile文件拷贝,而不是在激活的jail中进行拷贝。

  在chroot jail中运行服务

  在jail中运行shell的用处有限。实际上,你更有可能在jail中运行一项特定的服务。为了在jail中运行服务,你必须保证该服务需要的所有文件都必须在jail中。在chroot jail中开始一项服务的命令格式如下:

# /usr/sbin/chroot  jailpath  /bin/su  user daemonname  &

  其中jailpath是jail目录的路径名称,user是运行daemon(后台程序)的用户名,daemonname是提供该项服务的daemon的路径(jail内部)。

  有些服务器已经能够利用chroot jail功能。比如,你可以设置DNS,以便指定jail中运行的程序,而且vsftpd FTP服务器能够自动为客户端开启chroot jail。

  安全注意事项

  有些服务需要用root用户运行,但是它们在开始之后会释放它们的root权限(Procmail和vsftpd就是例子)。如果你运行这种服务,你就不必把su命令放在jail中。

  以root用户身份运行的进程可能会从chroot jail中跑出去。因此,你应该在jail中开始运行程序之前总是对另外一个用户进行su命令。同时,请注意jail中存在哪些setuid二进制文件,它们中的任何安全漏洞都会破坏到jail的安全。此外,请确保用户不能访问他上传的可执行文件。

相关推荐