NFS 服务器 + 客户端:建议强化/最后润色

ano*_*one 3 nfs rpc hardening

我们刚刚第一次设置了一个可爱的小 nfs 共享/客户端。

a) 通过 ls 列出时,客户端文件的 UID 显示为 4294967294,但客户端能够在共享中创建和删除文件/目录。在客户端创建的文件和文件夹在服务器端显示正确的用户名(和 uid)。我们确保写入共享的用户在服务器端具有相同的 UID。

以下显示客户端的所有文件/文件夹:

drwxr-xr-x 6 4294967294 4294967294 4096 Feb 23 16:04 foldername
Run Code Online (Sandbox Code Playgroud)

这个可以吗?

b) 是否需要对 portmap / nfs 守护进程执行任何操作,以完全禁用任何 nfs(或 rpc*,因为它在此之前未安装)服务在我们的外部接口上运行?理想情况下,我们希望将服务仅绑定到我们的 LAN 和 VPN 子网。

c) 使 nfs 客户端尽可能积极地尝试重新连接的理想方法是什么?理想情况下,如果网络连接随时丢失,nfs 客户端将继续频繁且无限期地尝试。是否可以通过 fstab 来完成此操作?或者默认情况下 nfs 客户端已经这样做了?共享 nfs 共享的 LAN 端是 1GBit 连接。

d) 还有什么吗?

完了,走吧。

bon*_*ing 6

我在这里只回答安全问题,因为这是我最有经验的问题。

NFS 的安全很难保证。我可以推荐的最重要的事情是使用带有 GSS 身份验证机制的 NFS4,但我将继续回答,就好像您正在使用 NFS3(甚至 NFS2)一样。

  • 在导出文件中指定 IP、主机名或网络组。切勿导出到*,因为这允许任何地方的任何人访问您的共享。
  • 切勿使用insecureno_root_squash导出选项。secure将服务器的信任仅限于客户端上的 root,而不仅仅是任何用户,并将root_squashroot 的请求重新映射到nobody,从而防止通过共享访问敏感系统文件。
  • 正如您已经尝试做的那样,请勿允许从 Internet 访问 portmapper、rpc.nfsd 或 rpc.mountd。良好的网络设置(防火墙、路由器 ACL 等)将确保这一点,但选择-iportmap使用hosts.allow文件来限制对本地 IP 的访问也是个好主意。

如果您想测试您的设置是否存在安全问题,我编写了一个用于绕过基本 NFS 安全机制的 Python 程序NfSpy。请随意尝试一下,看看是否可以以您意想不到的方式访问您的导出。

PS 关于客户端重新连接尝试,请参阅MOUNT OPTIONSnfs(5) 联机帮助页的 部分。一般来说,retranshard/soft选项控制您想要的内容,但基于每个请求。即使服务器长时间停机,安装本身也将保持正常状态。这些设置确定如何处理特定请求(读、写等)。