7.3. 保护 NFS 服务
您可以使用 Kerberos 验证并加密所有文件系统操作来保护网络文件系统 4(NFSv4)。在将 NFSv4 与网络地址转换(NAT)或防火墙搭配使用时,您可以通过修改 /etc/default/nfs 文件来关闭委托。委托(Delegation)是服务器将文件管理委派给客户端的一种技术。与其相反,NFSv3 不使用 Kerberos 锁定和挂载文件。
NFS 服务在所有 NFS 版本中使用 TCP 发送流量。该服务支持 Kerberos 用户和组身份验证,作为 RPCSEC_GSS 内核模块的一部分。
NFS 允许远程主机通过网络挂载文件系统,并与这些文件系统进行交互,就像它们被挂载到本地一样。您可以在集中服务器中合并资源,并在共享文件系统时额外自定义 /etc/nfsmount.conf 文件中的 NFS 挂载选项。
7.3.1. 保护 NFS 服务器的导出选项 复制链接链接已复制到粘贴板!
NFS 服务器决定有关将哪些文件系统导出到 /etc/exports 文件中的目录和主机的列表结构。
您可以对 /etc/exports 文件使用以下导出选项:
ro- 将 NFS 卷导出为只读。
rw-
允许对 NFS 卷的读和写请求。请小心使用这个选项,因为允许写入访问会增加攻击的风险。如果您的场景需要使用
rw选项挂载目录,请确保它们对所有用户都不可写,以减少可能的风险。 root_squash-
将来自
uid/gid0 的请求映射到匿名uid/gid。这不适用于其它可能比较敏感的uid或gid,如bin用户或staff组。 no_root_squash-
关闭 root 挤压。默认情况下,NFS 共享将
root用户改为nobody用户,这是一个非特权用户帐户。这会将所有root创建的文件的所有者改为nobody,这样可以防止上传设置了setuid位的程序。如果使用no_root_squash选项,则远程 root 用户可以更改共享文件系统上的任何文件,并将感染特洛伊木马的应用程序留给其他用户。 secure-
将导出限制到保留的端口。默认情况下,服务器只允许客户端通信通过保留的端口。但是在网络上,任何人都可以容易地成为客户端上的
root用户,因此,对于服务器来说,假设通过保留端口的通信都具有特权是不安全的。因此,对保留端口的限制具有有限的值;最好根据 Kerberos、防火墙和对特定客户端的导出限制来决定。
/etc/exports 文件语法中额外的空格可能会导致配置中的重大变化。
在以下示例中,/tmp/nfs/ 目录与 bob.example.com 主机共享,并且具有读取和写入权限。
/tmp/nfs/ bob.example.com(rw)
以下示例与前一个相同,但对 bob.example.com 主机共享具有只读权限的相同的目录,由于主机名后面有一个空格字符,因此可以对 world 共享具有读写权限的目录。
/tmp/nfs/ bob.example.com (rw)
您可以通过输入 showmount -e <hostname> 命令检查您系统上的共享目录。
另外,在导出 NFS 服务器时请考虑以下最佳实践:
- 导出主目录存在风险,因为某些应用以纯文本或弱加密格式存储密码。您可以通过检查并改进应用程序代码来降低风险。
- 有些用户未对 SSH 密钥设置密码,这再次给主目录带来风险。您可以通过强制使用密码或使用 Kerberos 来降低这些风险。
-
将 NFS 导出仅限制为所需的客户端。在 NFS 服务器上使用
showmount -e命令来检查服务器正在导出什么。不要导出不需要的任何内容。 - 不要允许不必要的用户登录到服务器,以减少攻击风险。您可以定期检查谁可以访问服务器,以及可以访问服务器的什么数据。
要导出整个文件系统,因为导出文件系统的子目录不安全。攻击者可能会访问部分导出的文件系统的未导出部分。