让 root 读取 NFS 目录上的所有文件,即使服务器启用了 root_squash

让 root 读取 NFS 目录上的所有文件,即使服务器启用了 root_squash

我有一个由多个用户使用的 NFS 目录,并且托管在我无法控制的 NFS 服务器上。

我想从我的客户端计算机备份 NFS 目录的内容。我的第一次尝试是在我的客户端计算机上以 root 身份登录,然后尝试压缩所有文件。但是,此操作会失败并出现权限错误,因为 NFS 服务器将 root 映射到匿名用户(服务器上的 root_squash 选项),因此某些文件不可读。

那么,如何备份该 NFS 目录中的所有文件呢?换句话说,我怎样才能读取该共享 NFS 目录上的所有文件?我无法控制 NFS 服务器,也无法将其配置为使用 no_root_squash。

现在,我知道这个安全限制是可以绕过的。如果我想在我的客户端计算机上创建一个具有正确 uid 的新用户,我可以 su 到该用户,然后读取这些文件。由于我在客户端计算机上拥有 root 权限,因此我可以轻松地执行此操作 — NFS 服务器信任我的客户端计算机。这会很烦人而且很麻烦,因为我必须在我的客户端计算机上创建几个假用户 ID,并在它们之间来回 su,但它证明原则上 root 可以读取 NFS 目录上的每个文件。

我的问题是:有没有一种更干净、更简单的方法来安排,以便我可以备份此 NFS 目录中的所有内容,因为我在客户端计算机上拥有 root 权限,但我对 NFS 服务器或其配置没有任何控制权?


限制:我无法切换到不同的 NFS 服务器。我不控制当前 NFS 服务器的配置。任何需要所有用户进行配置更改或需要所有其他用户付出额外努力的解决方案都是不切实际的。我正在寻找一个不需要的解决方案我付出了很多努力(必须编写一堆复杂的脚本来查找所有相关用户,创建假 uid,对每个用户进行 su-ing,创建一堆 tarball,并以某种方式合并 tarball 听起来很痛苦)。

答案1

您可以要求所有用户将默认权限设置为“others=read(文件)”和“others=read+execute(目录)”,以便您的“root”帐户可以读取它们。

您可以将 NFS 服务器提供商更改为允许的位置no_root_squash

您可以在客户端计算机上创建一组“假”用户 ID,然后迭代它们,find /mnt/NFS -user "$FAKE_USERID" ... | tar --no-recursion --files-from=-为每个帐户运行类似的操作。这将生成多个 tarball,但您可以避免重叠备份(find按所有者对文件进行分区,因此每个文件只会出现在拥有该文件的用户的 tarball 中)。

相关内容