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章 。 |