5.3. 保护 NIS 的安全

NIS 代表网络信息服务(Network Information Service)。它是叫做 ypserv 的 RPC 服务,和 portmap 以及其它相关服务一起使用,被用来在声称属于 NIS 域内的计算机间分发关于用户名、口令、以及其它保密信息的映射表。

NIS 服务器包括几个应用程序。它们是:

按照今天的标准来看,NIS 不太安全。它没有主机验证机制,在网络上明文传输所有的信息,包括口令散列。结果是,在设置使用 NIS 的网络时你必须格外谨慎。更糟糕的是,默认的 NIS 配置就有其固有的不安全性。

推荐任何打算实现 NIS 服务器的用户首先按照第 5.2 节的步骤来保护 portmap 服务的安全,然后再解决下面的问题。

5.3.1. 谨慎制定网络计划

因为 NIS 在网络上明文传输保密信息,所以令服务器在防火墙背后在一个分段的安全网络上运行这一点就很重要。无论何时在不安全的网络上传递 NIS 信息都有被截取的危险。从这个角度讲,谨慎制定网络计划就有助于防御重要的安全破坏。

5.3.2. 使用像口令一样的 NIS 域名和主机名

NIS 域内的任何机器都不经验证就可以使用命令从服务器中抽取信息,只要用户知道 NIS 服务器的 DNS 主机名和 NIS 域名即可。

例如:如果某人把便携电脑连接到网络上,或从外部闯入了网络(而且成功地假冒了内部 IP 地址),以下命令会揭示 /etc/passwd 映射表:

ypcat -d <NIS_domain> -h <DNS_hostname> passwd

如果攻击者是一个根用户,他就可以通过键入以下命令来获得 /etc/shadow 文件:

ypcat -d <NIS_domain> -h <DNS_hostname> shadow

注记注记
 

如果使用了 Kerberos,/etc/shadow 文件就不会保存在 NIS 映射表中。

要使攻击者不能够轻易地获取 NIS 映射表,你可以为 DNS 主机名创建一个随机字符串,比如 o7hfawtgmhwg.domain.com。同理,你还可以创建一个不同的随机 NIS 域名。这就令攻击者进入 NIS 服务器比较困难。

5.3.3. 编辑 /var/yp/securenets 文件

如果 /var/yp/securenets 文件是空白的或不存在(按默认方式安装后的情形就会如此),NIS 就会监听所有网络。它做的第一件事是在文件中放置一对子网掩码/网络值,因此 ypserv 只会对来自恰当网络的请求做出答复。

以下是 /var/yp/securenets 文件中的示例项目:

255.255.255.0     192.168.0.0

警告警告
 

在首次使用 NIS 服务器前,决不能没有创建 /var/yp/securenets 文件就启动它。

这种技术并不提供对 IP 假冒攻击的保护,但是它至少限制了 NIS 服务器要为哪些网络提供服务。

5.3.4. 分配静态端口,使用 IPTables 规则

所有和 NIS 相关的服务器都可以被分配给指定的端口,只有 rpc.yppasswdd 例外 — 该守护进程允许用户改变他们自己的登录口令。给其它两个 NIS 服务器守护进程,rpc.ypxfrdypserv 分配端口可以允许管理员创建防火墙规则来进一步保护 NIS 服务器守护进程免受入侵者的骚扰。

要达到这个目的,把以下几行添加到 /etc/sysconfig/network 中:

YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"

以下 IPTables 规则可以被用来实施服务器会监听哪些网络上的这些端口。

iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 834 -j DROP
iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 835 -j DROP

窍门窍门
 

关于使用 IPTables 命令实现防火墙的详情,请参阅第7章

5.3.5. 使用 Kerberos 验证

使用 NIS 验证的一个最明显的固有缺陷是,无论何时用户在机器上登录,/etc/shadow 映射表中的口令散列都会在网络上发送。如果入侵者获得了到 NIS 域的进入权,并且开始嗅探网络交通,他就可以悄悄地收集用户名和口令散列。只有有足够的时间,口令破译程序就可以猜出薄弱的口令,攻击者就可以获得对网络上有效帐号的使用权。

由于 Kerberos 使用密钥加密术,口令散列就决不会在网络上传送,从而使系统更加安全。关于 Kerberos 的详情,请参阅《红帽企业 Linux 参考指南》的“Kerberos”这一章。