<< Back to shouce.jb51.net

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”这一章。