5.4. 保护 NFS 的安全

网络文件系统或 NFS 是被用来为客户机器提供可联网存取的文件系统。关于 NFS 的工作原理,请参阅《红帽企业 Linux 参考指南》的“网络文件系统(NFS)”这一章。关于配置 NFS 的信息,请参阅《红帽企业 Linux 系统管理指南》。以下各小节假定你对 NFS 的基本知识已有了解。

重要重要
 

NFS 被包括在红帽企业 Linux 中,第 5.2 节 指出了 NFSv4 不再需要 portmap 服务。现在所由版本的 NFS 都倾向于使用 TCP 而不使用UDP (在 NFSv4 中必须使用 TCP )。NFSv4 包括了 Kerberos 用户和组的认证做为 RPCSEC_GSS 内核模块的一部分。由于 NFSv2 和 NFSv3 还在使用 portmap,所以相关的信息仍然包括。

5.4.1. 谨慎制定网络计划

现在 NFSv4 已经在网上传送使用 Kerberos 加密的信息,如果它是在防火墙背后或是在一个分段的网络上,小心的配置这个服务是非常重要的。NFSv2 和 NFSv3 数据在网络上的传输仍是不安全的,在做网络配置的时候我们需要把它考虑进去。谨慎制定网络计划有助于防御安全破坏。

5.4.2. 注意语法错误

NFS 服务器通过 /etc/exports 文件来决定要导出哪些文件系统,以及把这些目录导出到哪些主机上。编辑这个文件的时候要特别小心不要添加额外的空格。

例如:/etc/exports 文件中的以下行会令主机 bob.example.com 可以共享读写 /tmp/nfs/ 目录。

/tmp/nfs/     bob.example.com(rw)

但是 /etc/exports 文件中这一行的情况却不同。它共享同一目录,让主机 bob.example.com 拥有只读权限,却给全局以读写权限。这全是由主机后面的一个空格造成的!

/tmp/nfs/     bob.example.com (rw)

通过使用 showmount 命令来校验哪些目录被共享,从而检查你的 NFS 共享配置是一个好习惯。

showmount -e <hostname>

5.4.3. 不要使用 no_root_squash 选项

按照默认设置,NFS 共享把根用户改成用户 nfsnobody,它是一个不具备特权的用户帐号。这样,所有根用户创建的文件都会被用户 nfsnobody 所有,从而防止了设置了 setuid 的程序被上传到系统。

如果使用了 no_root_squash,远程根用户就能够改变共享文件系统上的任何文件,从而可以使设置了特洛伊木马的程序被执行。