在Unix系统中,可以利用两个文件来统一管理客户端的连接。谁可以访问Unix服务器,都有这两个文件说了算。也就是说,这Hosts.allow与Hosts.deny两个文件就好像是Unix服务器的“看门狗”,它决定了哪些客户端可以访问Unix服务器,哪些则不行。
如果Unix系统工程师允许某些计算机可以访问这台服务器则可以在Hosts.allow文件中定义允许访问的计算机。反之,如果系统工程师不希望特定的计算机可以访问服务器,则应该在hosts.deny文件中定义拒绝访问服务器的计算机。当系统的进程在接受来自客户端的服务请求后,Unix系统会先检查Hosts.allow文件,看看是否允许此客户端的访问,如果允许访问的话则会将这个请求转送到特定的服务程序。如果在hosts.allow文件中没有这个客户端允许的纪录,则会检查hosts.deny文件的内容。如果这个客户端的IP地址等信息出现在这个文件中,则客户端的这个请求将会被拒绝。如果没有出现的话,则这个客户端的请求仍然会被转送到特定的服务器应用程序中。这个两个文件的具体工作流程图如下所示:
这两个文件看起来比较简单,其功用却不少。其就好像是Unix服务器的大门,直接跟Unix服务器的安全有关。为此系统工程师应该对这个文件引起重视。具体的说,系统工程师管理这个文件的时候,需要注意以下几点。
1、 两个文件的优先性问题。
在Unix系统眼中这两个文件的地位是不同的。这是系统工程师需要明确的第一个内容。Unix系统会先检查Hosts.allow文件的内容。如果在这里有符合的纪录,则会马上转发这个客户端的请求,而不会去考虑Hosts.deny中的内容。如果系统工程师以前有Cisco网络产品管理的经验,对于这一点就很好理解。因为其工作原理跟思科路由器的访问控制列表工作原理类似。只要在前面的纪录中找到符合要求的项目,则会忽略后续的内容。如现在有一个客户端,其IP地址为192.168.0.4。在以上两个文件中,都有这个客户端的信息。即在前面一个文件中允许这个客户端连接到Unix服务器中,而在后面一个文件中却又禁止其连接。那么这个互相矛盾的设置,哪一个设置更有效力呢?由于Unix服务器是先检查Hosts.allow文件,故最终Unix系统允许用户连接到服务器。
系统管理员不要认为这是Unix系统中的漏洞。其实Unix系统是故意这么设计的。这个特性在实际应用中非常的有效。如某个财务管理软件的服务器,就只允许财务部门的四个员工以及系统管理员可以连接上去。此时就可以把这五个用户的信息放入到hosts.allow文件中,然后在hosts.deny文件中填入ALL内容即可(表示全部计算机都不能够连接Unix服务器)。因为hosts.allow文件优先,故最终Unix系统只允许特定的五个用户可以连接到财务管理软件服务器中,从而提高财务管理软件的安全性。可见这个特性在实际工作中,具有很大的用途。