想象一下 LAN 中的这种场景:一个 Linux NFS 文件服务器 (srv) 和三个 Linux 客户端(A、B、C)。 srv 上的文件/目录具有 root 所有权,并且没有授予非 root 用户访问权限。这些是这个问题所涉及的文件。我将它们称为“根限制文件”。
A是本地系统管理员。他或她将需要自由访问 srv 上受 root 限制的文件。
乙是本地开发人员,在其计算机上拥有 sudo 权限。然而,B 应该不是能够读取或写入(或遍历)服务器上受根目录限制的文件/目录。事实上,即使 B 具有 sudo 权限,B 也应该无法访问 srv 上不属于 B 所属组的文件。
C是没有 sudo 权限的本地用户。 C 应该有权访问 srv 上的普通文件,但无权访问本地或服务器 root 限制的文件。
鉴于:
srv 位于 192.168.1.1
A 位于 192.168.1.2
B 位于 192.168.1.3
C 位于 192.168.1.4
/etc/exports 能实现目标吗?
/srv/nfs 192.168.1.2(rw,no_root_squash)
/srv/nfs 192.168.1.3(rw,root_squash)
/srv/nfs 192.168.1.4(rw,root_squash)
推荐哪些其他 NFS 选项?但最重要的是,如果我们假设 IP 地址不能被欺骗,root_squash 是否能够实现此解决方案?
接下来,假设在其计算机上拥有 sudo 权限的开发人员可以欺骗其 IP 地址,使其看起来像 192.168.1.2,其中没有 no_root_squah,需要什么解决方案? LDAP + Kerberos?还有别的事吗?
我们的目标可以通过 NFS 实现吗? SSHFS 或 Samba 4 之类的解决方案是更好的解决方案吗?
(如果“根限制文件”不是最好的术语,欢迎编辑建议。)
答案1
答案2
NFS 通过 UID 和 GID 设置权限,因此只要服务器和客户端上的权限相同,就可以了。root_squash
将阻止 B 读取或写入任何您不想要的文件或目录,甚至不值得 sudo 权限,而 C 无论如何都没有 sudo 权限。
如果您担心 IP 欺骗,那么可以使用其他工具和方法。您可以通过一些研究找到它们并决定哪个是最好的。
答案3
使用 NFS 保护共享文档的最佳方法是不要为每个人提供相同的共享根目录。在此示例中,我将创建一个类似于以下内容的本地目录结构:
/srv/nfs admin-machine(rw,no_root_squash)
/srv/nfs/developer dev-machine(rw,no_root_squash)
/srv/nfs/shared 192.168.1.0/24(rw,root_squash)
/srv/nfs/protected acct-machine(rw,root_squash)
尝试保护文件夹免受 NFS 客户端未经授权的访问的问题在于,任何具有 root 访问权限的人都可以创建一个用户就这样发生了
答案4
如果您的目标是“阻止具有本地 sudo 权限的用户在 NFS 文件服务器上拥有 sudo 权限”,则无法禁用 root squash。
完全没有。
这/etc/exports
/srv/nfs 192.168.1.2(rw,no_root_squash)
/srv/nfs 192.168.1.3(rw,root_squash)
/srv/nfs 192.168.1.4(rw,root_squash)
将允许任何在 192.168.1.2 上具有 root 访问权限的人创建 SUID 可执行文件,/srv/nfs
可用于访问 NFS 服务器本身、192.168.1.3 和 192.168.1.4 上的任何非 root 用户,以及root
您的 NFS 服务器上的自身 - 这与您既定的目标直接矛盾。192.168.1.3 和 192.168.1.4 上的任何用户都可以sudo
访问吗?如果是这样,任何有权sudo
访问 192.168.1.2 的人都可以利用该服务器的访问权限,并获得几乎整个网络的 root 访问权限。
禁用任何东西的根南瓜是危险的为了您整个网络的安全。
这甚至没有解决 @ErikF 在其回答中提到的 IP 地址欺骗问题。
至少您没有与anon=0
.是的,我见过。