/etc/init.d 中的引导脚本
/etc/init.d 中的引导脚本用来启动或者停止系统服务。对于每一个运行级,都有一个 /etc/rcN.d 目录(“N”是运行级的标识),其中包含了指向那些在运行级改变时需要调用的脚本的软链接。
如果链接名以“S”开头,则脚本在进入那个运行级时执行,启动相应的服务;如果以“K”开头,则脚本在退出那个运行级时执行,停止那个服务。
大部分情况下,引导脚本的名称会暗示它所控制的服务。要防止在特定的运行级中会启动某个服务,则删除运行级目录中指向相应引导脚本的链接,或者使用一个不做任何事情的虚脚本取代 /etc/init.d 中原来的引导脚本。
inetd/xinetd 后台进程
也可以在客户机请求时根据需要调用服务。这些请求被转交给超级后台进程 inetd 或者 xinetd。然后超级后台进程确定要启动哪个服务,并将请求传递到相应的后台进程。通常,telnet、ftp、rlogin 等服务使用 inetd 或者 xinetd 启动。
inetd 后台进程在 /etc/inetd.conf 配置,那个文件中包含了关于每一个超级后台进程需要提供的服务的条目。配置 FTP 服务器的条目应该类似这样 —— ftp stream tcp nowait root /usr/bin/ftpd in.ftpd -el —— 使用井号注释掉它,就可以禁用它。
为了安全起见,建议使用 xinetd。与 inetd 相比, xinetd 能够启动基于 rpc 的服务,并支持访问控制。xinetd 可以限制进入连接的速度、来自特定主机的进入连接的数目,或者某个服务的总连接数。
通过用于每个从属后台进程的独立配置文件来配置 xinetd 。这些文件位于 /etc/xinetd.d/ 目录中。前面 FTP 服务器的示例配置文件应该称为 called /etc/xinetd.d/ftp,类似这样:
清单 1. 配置文件,/etc/xinetd.d/ftp
service ftp
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/ftpd
server_args = -el
disable = yes
}
|
为了禁用这个服务,参数 disable 被设置为 yes,如上面示例所示。
为了更详细的访问控制,xinetd 支持以下三个另外的参数:
only_from
no_access
access_time
为了限制访问,但不完全禁用 ftp 后台进程,您可以如下修改配置文件 /etc/xinetd.d/ftp:
清单 2. 为限制访问而修改过的配置文件,/etc/xinetd.d/ftp
service ftp
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/bin/ftpd
server_args = -el
disable = no
only-from = 192.168.200.3 192.168.200.7 192.168.200.9
only-from += 192.168.200.10 192.168.200.12 172.16.0.0
no_access = 172.16.{1,2,3,10}
access_times = 07:00-21:00
}
|
only-from 和 no_access 可以接受数字 IP 地址(最右边的零作为任意数值处理)、IP 地址/网络掩码 范围、主机名以及 /etc/networks 中的网络名。如果组合使用 only-from 和 no_access, xinetd 会为每个主机连接寻找最接近的匹配。
在前面的代码示例中,表示 IP 地址为 172.16.x.x 的主机可以连接到此主机,但地址属于 172.16.1.x、 172.16.2.x、172.16.3.x 和 172.16.10.x 的则不能连接。可见,当使用 no_access 所用的因数符号时,不需要指定地址的所有四个部分。因数部分必须是地址最右边的部分。参阅下面的 参考资料 部分,以获得关于 xinetd 及其配置的文章。
TCP 封装器
如果您决定不使用 xinetd,而是使用 inted,那么您可以使用 TCP 封装器来记录请求和具体的对特定网络的 允许/拒绝。TCP 封装器会为了认证和记录日志而去检查 /etc/hosts.allow 和 /etc/hosts.deny,并将客户机请求封装起来,不直接回应它们。一旦认证成功,请求就会被转发到原来请求的服务。
相对于使用普通的 inetd,使用 TCP 封装器有两个主要的好处:
- 发出请求的客户机不会察觉到 TCP 封装器;因此,没有异心的人不会发现任何区别,而心怀不轨的人也得不到关于他们的请求失败的任何信息。
- TCP 封装器的工作不会理会任何已经被封装的服务,让应用程序能够共享它们的配置文件,从而简化管理。
要获得关于 TCP 封装器配置文件的详细文档,请参阅 参考资料 中列出的 Red Hat Linux Reference Guide。