5.4. 保护 NFS 的安全

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

重要重要
 

推荐任何打算实现 NFS 服务器的用户首先按照第 5.2 节的步骤来保护 portmap 服务的安全,然后再解决下面的问题。

5.4.1. 谨慎制定网络计划

因为 NFS 在网络上明文传输所有信息,所以令服务器在防火墙背后在一个分段的安全网络上运行这一点就很重要。无论何时在不安全的网络上传递 NFS 信息都有被截取的危险。从这个角度讲,谨慎制定网络计划就有助于防御重要的安全破坏。

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,远程用户就能够改变共享文件系统上的任何文件,把设置了特洛伊木马的程序留给其它用户在无意中执行。