NIS 代表网络信息服务(Network Information Service)。它是叫做 ypserv 的 RPC 服务,和 portmap 以及其它相关服务一起使用,被用来在声称属于 NIS 域内的计算机间分发关于用户名、口令、以及其它保密信息的映射表。
NIS 服务器包括几个应用程序。它们是:
/usr/sbin/rpc.yppasswdd — 又称 yppasswdd 服务,该守护进程允许用户改变他们的 NIS 口令。
/usr/sbin/rpc.ypxfrd — 又称 ypxfrd 服务,该守护进程负责在网络上传输 NIS 映射表。
/usr/sbin/yppush — 该应用程序把 NIS 数据库的改变传播给多个 NIS 服务器。
/usr/sbin/ypserv — 这是 NIS 服务器守护进程。
按照今天的标准来看,NIS 不太安全。它没有主机验证机制,在网络上明文传输所有的信息,包括口令散列。结果是,在设置使用 NIS 的网络时你必须格外谨慎。更糟糕的是,默认的 NIS 配置就有其固有的不安全性。
推荐任何打算实现 NIS 服务器的用户首先按照第 5.2 节的步骤来保护 portmap 服务的安全,然后再解决下面的问题。
因为 NIS 在网络上明文传输保密信息,所以令服务器在防火墙背后在一个分段的安全网络上运行这一点就很重要。无论何时在不安全的网络上传递 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 服务器比较困难。
如果 /var/yp/securenets 文件是空白的或不存在(按默认方式安装后的情形就会如此),NIS 就会监听所有网络。它做的第一件事是在文件中放置一对子网掩码/网络值,因此 ypserv 只会对来自恰当网络的请求做出答复。
以下是 /var/yp/securenets 文件中的示例项目:
255.255.255.0 192.168.0.0 |
警告 | |
---|---|
在首次使用 NIS 服务器前,决不能没有创建 /var/yp/securenets 文件就启动它。 |
这种技术并不提供对 IP 假冒攻击的保护,但是它至少限制了 NIS 服务器要为哪些网络提供服务。
所有和 NIS 相关的服务器都可以被分配给指定的端口,只有 rpc.yppasswdd 例外 — 该守护进程允许用户改变他们自己的登录口令。给其它两个 NIS 服务器守护进程,rpc.ypxfrd 和 ypserv 分配端口可以允许管理员创建防火墙规则来进一步保护 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章 。 |