几乎所有关于 NFS 安全的文章都提到客户端伪造 uid 来访问他们不应该访问的文件。
我的关注点有所不同。我唯一的导出是只读的,并且实际上是公开的(不会暴露在互联网上,但数据根本不是秘密,并且设置了其他数据的读取位)。服务器上的数据很少被修改,如果需要,我可以确保仅在 nfs-server 关闭时才对其进行修改。因此我不需要锁定。
完全恶意的客户端会以什么方式对服务器产生负面影响?我主要对安全问题感兴趣(访问导出之外的文件、写入任何文件、RCE……),DoS 对我来说并不重要,但我仍然想知道它的可能性。
语境:我想在我的网络中提供网络启动,通过 NFS 提供只读基本根文件系统,客户端将在其上创建内存覆盖。我对客户端机器几乎没有控制权。
答案1
只读导出完全由服务器控制,与客户端发送写入请求或伪造 uid 无关(假设服务器实现没有严重损坏)。因此,恶意客户端无法修改只读导出中的日期或逃避导出路径。此外,您应该使用选项导出squash_all
以将所有用户映射到nobody
服务器上,而与提供的 uid 无关。
如果您想对此完全谨慎,那么您可以在使用 NFS 导出之前将底层文件系统挂载为只读。使用 systemd 启动的用户空间 NFS 服务器(如 nfs-ganesha)可以通过相应的选项进行额外保护ReadWriteDirectories=
,ReadOnlyDirectories=
并且InaccessibleDirectories=