Red Hat Training

A Red Hat training course is available for RHEL 8

9.3. 保护 NFS 服务

您可以使用 Kerberos 验证并加密所有文件系统操作来保护网络文件系统 4(NFSv4)。在将 NFSv4 与网络地址转换(NAT)或防火墙搭配使用时,您可以通过修改 /etc/default/nfs 文件来关闭委托。委托(Delegation)是服务器将文件管理委派给客户端的一种技术。相反,NFSv2 和 NFSv3 不使用 Kerberos 锁定和挂载文件。

NFS 服务在所有 NFS 版本中使用 TCP 发送流量。该服务支持 Kerberos 用户和组身份验证,作为 RPCSEC_GSS 内核模块的一部分。

NFS 允许远程主机通过网络挂载文件系统,并与这些文件系统进行交互,就像它们被挂载到本地一样。您可以在集中服务器中合并资源,并在共享文件系统时额外自定义 /etc/nfsmount.conf 文件中的 NFS 挂载选项。

9.3.1. 保护 NFS 服务器的导出选项

NFS 服务器决定有关将哪些文件系统导出到 /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> 命令来检查系统中的共享目录。

/etc/exports 文件中使用以下导出选项:

警告

要导出整个文件系统,因为导出文件系统的子目录不安全。攻击者可能会访问部分导出的文件系统中的未导出部分。

ro
使用 ro 选项将 NFS 卷导出为只读模式。
rw

使用 rw 选项允许在 NFS 卷上读取和写入请求。请小心使用这个选项,因为允许写入访问会增加攻击的风险。

注意

如果您的场景需要使用 rw 选项挂载目录,请确保所有用户都无法写入以降低可能的风险。

root_squash
使用 root_squash 选项将来自 uid/gid 0 的请求映射到匿名 uid/gid。这不适用于其它可能比较敏感的 uidgid,如 bin 用户或 staff 组。
no_root_squash
使用 no_root_squash 选项关闭 root squashing。默认情况下,NFS 共享将 root 用户改为 nobody 用户,这是一个非特权用户帐户。这会将所有 root 创建的文件的所有者改为 nobody,这样可以防止上传设置了 setuid 位的程序。如果使用 no_root_squash 选项,则远程 root 用户可以更改共享文件系统上的任何文件,并将感染特洛伊木马的应用程序留给其他用户。
secure
使用 secure 选项将导出限制到保留的端口。默认情况下,服务器只允许客户端通信通过保留的端口。但是在网络上,任何人都可以容易地成为客户端上的 root 用户,因此,对于服务器来说,假设通过保留端口的通信都具有特权是不安全的。因此,对保留端口的限制具有有限的值;最好根据 Kerberos、防火墙和对特定客户端的导出限制来决定。

另外,在导出 NFS 服务器时请考虑以下最佳实践:

  • 导出主目录存在风险,因为某些应用以纯文本或弱加密格式存储密码。您可以通过检查并改进应用程序代码来降低风险。
  • 有些用户未对 SSH 密钥设置密码,这再次给主目录带来风险。您可以通过强制使用密码或使用 Kerberos 来降低这些风险。
  • 将 NFS 导出仅限制为所需的客户端。在 NFS 服务器上使用 showmount -e 命令来检查服务器正在导出什么。不要导出不需要的任何内容。
  • 不要允许不必要的用户登录到服务器,以减少攻击风险。您可以定期检查谁可以访问服务器,以及可以访问服务器的什么数据。

其他资源