◆二、控制使用开放的服务的用户

在上面提到的/etc/inetd.conf的配置文件中,我们看到pop3服务配置一行的最后两个字段为:

/usr/sbin/tcpd ipop3d

很显然,pop3的服务器程序为ipop3d,那么/usr/sbin/tcpd又是什么含义呢?这是一个称为Tcp wrapper的安全程序。该程序用来在启动某个服务以前查看两个配置文件来决定该用户是否允许使用该服务。在/etc目录下,有两个文件: hosts.deny hosts.allow。

通过配置这两个文件,你可以指定哪些客户机允许使用这些服务。配置这两个文件是通过一种简单的访问控制语言来实现的,访问控制语句的基本格式为: 程序名列表,主机名/IP地址列表。

程序名列表指定一个或者多个提供相应服务的程序的名字,名字之间用逗号或者空格分隔,可以在inetd.conf文件里查看提供相应服务的程序名:如上面的文件示例中,pop所在行的最后一项就是所需的程序名:ipop3d。

主机名/IP地址列表指定允许或者禁止使用该服务的一个或者多个主机的标识,主机名之间用逗号或空格分隔。程序名和主机地址都可以使用通配符,实现方便的指定多项服务和多个主机。 当服务请求到达服务器时,访问控制软件就按照下列顺序查询这两个文件,直到遇到一个匹配为止:

1、当在/etc/hosts.allow里面有一项与请求服务的主机地址项匹配,那么就允许该主机获取该服务

2、否则,如果在/etc/hosts.deny里面有一项与请求服务的主机地址项匹配,就禁止该主机使用该项服务

3、若均没有匹配,则允许使用该服务。若相应的配置文件不存在,访问控制软件就认为是一个空文件,所以可以通过删除或者移走配置文件实现对所有主机关闭所有服务。

在文件中,空白行或者以#开头的行被忽略,你可以通过在行前加 # 实 现注释功能。Linux提供了下面灵活的方式指定进程或者主机列表:

1、一个以"."起始的域名串,如 .amms.ac.cn 那么www.amms.ac.cn就和这一项匹配成功

2、以.结尾的IP串如 202.37.152. 那么IP地址包括202.37.152.的主机都与这一项匹配

3、格式为n.n.n.n/m.m.m.m表示网络/掩码,如果请求服务的主机的IP地址与掩码的位与的结果等于n.n.n.n 那么该主机与该项匹配。

4、ALL表示匹配所有可能性

5、EXPECT表示除去后面所定义的主机。如:list_1 EXCEPT list_2 表示list_1主机列表中除去List_2所列 出的主机

6、LOCAL表示匹配所有主机名中不包含.的主机

上面的几种方式只是Linux提供的方式中的几种,但是对于我们的一般应用来说是足够了。我们通过举几个例子来说明这个问题:

例一:我们只希望允许同一个局域网的机器使用服务器的ftp功能,而禁止互联网上面的ftp服务请求,本地局域网由 202.39.154. 、202.39.153. 和202.39.152. 三个网段组成。在hosts.deny文件中,我们定义禁止所有机器请求所有服务: ALL:ALL 在hosts.allow文件中,我们定义只允许局域网访问ftp功能:

in.ftpd: 202.39.154 202.39.153. 202.39.152.

这样,当非局域网的机器请求ftp服务时,就会被拒绝。而局域网的机器可以使用ftp服务。

ALL:ALL

然后重新启动你的 inetd进程:

/etc/rc.d/init.d/inet restart

但是hosts.deny|allow文件只控制/etc/inetd.conf文件中包含的服务的访问这些服务有/usr/bin/tcpd管理,监听接入的网络请求,然后与在hosts.allow和hosts.deny的中的服务比较,然后做出允许或拒绝的决定。

最后因为hosts.allow|hosts.deny应该不允许普通用户读写,因此设置其访问权限为600:

chmod 600 /etc/hosts.*

并且该文件应该不被任何用户修改,包括root用户。因此为了防止用户错误的修改该文件,为该文件添加不可修改位:

chattr +i /etc/hosts.*


相关内容