使用chroot jail或TCP wrapper确保Linux服务器安全

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

系统管理员的任务是确保一个或者多个系统方便用户使用。在Linux系统中,管理员和用户都可以是你,你和电脑的距离也不过几十厘米而已。系统管理员可能在半个地球远的地方支持网络系统,而你只是成千上万用户中的一个。系统管理员可能是利用业余时间维护系统的兼职人员,他同时也可能是这个系统的用户。

管理员也可能由几个人组成,他们都全职负责维持多个系统正常运行。   确保服务器安全   你可以通过使用TCP wrapper,或者通过建立一个chroot jail来确保服务器的安全。   TCP Wrappers客户服务器安全(hosts.allow和hosts.deny)   当你打开一个本地系统去访问远程系统……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

系统管理员的任务是确保一个或者多个系统方便用户使用。在Linux系统中,管理员和用户都可以是你,你和电脑的距离也不过几十厘米而已。系统管理员可能在半个地球远的地方支持网络系统,而你只是成千上万用户中的一个。系统管理员可能是利用业余时间维护系统的兼职人员,他同时也可能是这个系统的用户。管理员也可能由几个人组成,他们都全职负责维持多个系统正常运行。

  确保服务器安全

  你可以通过使用TCP wrapper,或者通过建立一个chroot jail来确保服务器的安全。

  TCP Wrappers客户服务器安全(hosts.allow和hosts.deny)

  当你打开一个本地系统去访问远程系统时,你必须确保满足以下条件:

  •  只对你希望允许访问的系统开发本地系统。
  •  允许每个远程系统只访问你允许访问的数据。
  •  允许每个远程系统只能以适当的方式(只读/读写/只写)去访问数据。

  TCP wrapper作为客户服务器模型的一部分,依赖/etc/hosts.allow和/etc/hosts.deny文件作为简单访问控制语言的基础,可用于任何包含了libwrap.so的daemon程序使用。访问控制语言限定的规则是:基于客户端地址和客户端试图访问的daemon程序,选择性地允许客户端访问服务器在本地系统上的daemon程序。

hosts.allow和hosts.deny文件中的每行代码都遵循以下格式:
daemon_list  client_list [ command]

  其中,daemon_list是一个或多个服务器daemon程序(如rpcbind、vsftpd、或sshd)的逗号分隔列表。client_list 是一个或者多个客户端的逗号分隔列表。命令是可选的,当client_list的客户端试图访问从daemon_list访问服务器daemon程序时指代被执行的命令。

  当客户端请求连接一个本地服务器时,hosts.allow和hosts.deny 文件按以下方式进行查询,直到找到匹配的为止。

  •  如果daemon客户端对匹配hosts.allow中一行,可以允许访问。
  •  如果daemon客户端对匹配hosts.deny中一行,访问将被拒绝。
  •  如果在hosts.allow文件或hosts.deny文件中都没有匹配,可以允许访问。

  第一个匹配决定客户端是否允许访问服务器。当hosts.allow 和 hosts.deny 都不存在时,就意味着这个文件是空的。虽然不建议这样做,但通过删除这两个文件,你可以允许所有客户端访问所有daemon程序。

  一个更安全系统的例子是,在hosts.deny写入以下语句,即可阻止所有访问。

$ cat etchosts.deny
...
ALL:ALL:echo '%c tried to connect to %d and was blocked'>> /var/log/tcpwrappers.log
...

  这行语句阻止了所有试图连接到服务器上的客户端,而在hosts.allow中特别允许的客户端除外。当这条规则满足匹配时,它在名为/var/log/tcpwrappers.log的文件中增加了一行。%c是扩展到客户端的信息,%d是扩展到客户端试图连接到daemon程序的名称。

  在hosts.deny文件已存在的基础上,你可以在hosts.allow写入代码,明确地允许访问指定的服务器和系统。例如,以下hosts.allow文件允许任何人连接OpenSSH的daemon程序(ssh、scp、sftp),但只允许从本地系统与192.168.子网在同一网络的远程连接。

$ cat etchosts.allow
sshd  ALL
in.telnet  LOCAL
in.telnet  192.168. 127.0.0.1
...

  第一行允许从任何系统(ALL)连接到sshd。第二行允许与服务器(LOCAL)有相同域名的系统连接。第三行表示匹配所有IP地址以192.168.开头的系统,包括本地系统。

  建立一个chroot jail

  在早期的UNIX系统中,根目录在文件系统中是固定的。在包括Linux的现代UNIX中,你可以为每个进程都定义一个根目录。而chroot命令则可以允许你运行/目录以外的进程。

  根目录出现在目录层次结构的顶部,没有父目录。一个进程不能访问根目录上的任何文件(因为它们不存在)。如果你运行一个程序(进程),指定它的根目录为/home/sam/jail,程序将不会意识到在/home/sam或者更上层目录还有文件的存在:jail是程序的根目录,且被标记为/(而不是jail)。

  通过人工建立一个根目录,通常称为(chroot)jail,你可以从根本上阻止程序访问或者修改(可能是恶意的)文件以外的目录。为了增加安全性,你必须建立一个适当的chroot jail。如果你没有正确设置chroot jail,还不如没有chrootjail,因为你可能让恶意用户更容易成功地访问系统。

  下篇文章中,我们将继续讨论如何使用chroot及其安全注意事项

相关推荐