在某些 Linux 机器(SLES 11.1)上(它是 NIS 客户端),我可以以 root 身份执行下列操作:
ypcat shadow.byname
并获取输出,即包含加密密码的一些行以及其他信息。
在同一个 Linux 机器上,如果我以非特权用户身份运行相同的命令,我会得到
No such map shadow.byname. Reason: No such map in server's domain
现在我很惊讶。根据我的老经验,NIS 中的影子密码是荒谬的,因为协议中没有访问控制或身份验证,因此每个(非特权)用户都可以访问影子映射,从而获得加密密码。
显然,我们在这里看到的是不同的。不幸的是,我无法访问 NIS 服务器来弄清楚发生了什么。我唯一的猜测是 NIS 主机只向来自特权端口 (>1024) 的客户端连接提供映射,但这只是一个不切实际的猜测。
当前 NIS 实现中有哪些机制会导致上述行为?它们有多“安全”?它们能轻易被绕过吗?或者 NIS 中的影子密码是否与传统的影子文件一样安全?
答案1
只有从特权端口 (<1024) 发出请求的客户端才能访问 NIS 主机下不可读的地图/var/yp/{domainname}/
。它不如本地安全,/etc/shadow
但总比没有好一点。
为了提高安全性,Sun 设计了 NIS+,但它从未真正得到广泛采用。
LDAP 的优势就更大了,它不需要从服务器获取密码哈希到客户端,而是客户端将建议的密码发送到服务器进行验证(LDAP auth-bind)。