Synology NAS 上的 NFS 用户 ID 映射

Synology NAS 上的 NFS 用户 ID 映射

我有一台 Synology NAS 机箱(运行 DSM 5.1),并且我已通过 NFS 导出目录。我正尝试将其安装到我的 Ubuntu 机箱上。

它大部分情况下运行良好,但我遇到了用户和组映射问题。在 Ubuntu 机器上,我的 uid 是 1000 (roger),gid 是 1000 (roger)。在 Synology 上,我的 uid 是 1026 (roger),组是 100 (用户)。

如果我使用 NFSv3,它会使用数字 uid/gid 值,这意味着 Synology 上的所有权混乱。

如果我仅从同一个 Ubuntu 机器使用同一个用户访问 NFS 挂载,那就没问题,但是我还使用 CIFS(SMB)从 Windows 机器访问目录,这意味着权限错误。

如果我使用 NFSv4 ( mount -o nfsvers=4),并使用 Synology 上的默认设置,则从Ubuntu 框查看时roger.users,Synology 上拥有的文件将显示为拥有roger.users。这很好。

但是,当我touch有一个文件时:

roger@ubuntu$ touch /mounts/diskstation/music/foo

它最终1000.1000在 Synology 上归所有,并且nobody.4294967294从 Ubuntu 框查看时显示为所有。

我在 Synology 论坛上找到的有关该主题的所有内容要么是 2011 年发布的,当时不支持 NFSv4,要么是人们问了同样的问题然后放弃了。

为了完整性,/etc/exports有:

/volume1/music  10.0.0.0/24(rw,async,no_wdelay,root_squash,insecure_locks,sec=sys,anonuid=1025,anongid=100)

...我正在用以下命令将它安装在 Ubuntu 机器上:

mount -t nfs diskstation:/volume1/music /mounts/diskstation/music/ -o rw,nfsvers=4

sec=sys我发现了一些可能存在问题的迹象:为什么 NFSv4 uid/gid 映射不适用于 AUTH_UNIX (AUTH_SYS),但是这没有解决方案。

有没有简单的方法可以解决这个问题?有没有更复杂的方法(咳嗽凯尔伯罗斯咳嗽) 有什么方法可以解决这个问题?

说真的,如果 Kerberos答案是,我会接受,但我希望在浪费大量时间之前先知道答案。

更新:而Synology 文档讨论了各种 Kerberos 选项,但我在 UI 中找不到它们。发行说明状态“如果实施了 Kerberos 安全风格...”。我找到(但无法再找到)一个页面,暗示它可能不适用于某些型号。根据系统信息页面,我有一台 DS211。也许我运气不好?

答案1

为了使 NFSv4 ID 映射正常工作,客户端和服务器都必须运行ID Mapper 守护程序,并在 中idmapd进行相同的配置。Domain/etc/idmapd.conf

这样,您的 NFS 客户端就会像[email protected]NFS 命令一样在线上发送其 ID 凭证,而您的 NFS 服务器 idmapper 会将其映射到rogerNFS 服务器上调用的用户。UID 和 GID 无关紧要,它们由 idmapper 映射到每个系统上。

但是,在我的 Synology 上,我不需要担心这一点。我的共享文件夹具有以下权限:

  • 权限
    • 本地用户
      • 管理员 = 读/写
  • NFS 权限
    • 壁球
      • 将所有用户映射到管理员

这会导致anonuid=1024,anongid=100admin用户和组)被添加到NAS 上的users导出中。/etc/exports

我的 NFS 客户端(没有运行 ID 映射器)以我的用户身份(1000:1000)发送我的 NFS 命令,并且因为该 UID 和 GID 在 NAS 上不存在,所以它将我的 UID 和 GID 转换为,1024:100因此我被视为具有完全权限的管理员用户。

对于商业环境来说,这是非常不专业和不安全的 NFS 使用方式,但对于我在家里访问我的文件来说,这是滥用 NFS 行为,我可以接受。

另一种选择是使rogerNFS 客户端和 NAS 上的 UID 和 GID 相同,然后您可以使用没有 ID 映射的 NFSv4,或者您可以使用仅依赖 UID 和 GID 的 NFSv3。

答案2

我一直在努力解决同样的问题。我经历了在 Synology 上使用 Docker 设置 Kerberos 服务器的巨大痛苦,设置了 ID 映射,但我仍然不喜欢这种行为。Kerberos 过于复杂,难以在重启和自动挂载时继续工作。此外,新创建文件的默认 umask 为 0000,每个新文件都以 777 模式创建,无论我的本地 umask 是多少。

我的解决方案和 suprjami 的类似,但我更进一步:

  • 使用 Synology 网页 UI 创建一个新用户,将其命名为roger.remote。对用户组执行相同操作,并将其命名为与用户名相同的名称。
  • 在 Synology 上以 root 身份编辑 /etc/passwd 并将roger.remoteUID 更改为 1000,将 GID 更改为 1000
  • 编辑 /etc/group 并将组roger.remote也更改为 1000
  • 在 Synology 网页用户界面中,将 squash 设置为“所有用户为管理员”并保存
  • 再次以 root 身份编辑 /etc/exports 并将 UID/GID 更改为anonuid=1000,anongid=1000
  • 使用以下命令重新启动 NFS/usr/syno/etc.defaults/rc.sysv/S83nfsd.sh restart
  • 这也有点黑客行为——但是chmod 777 /volume1。我的主目录挂载后出现了许多奇怪的问题。KDE 无法启动,因为 glibcaccess()函数会返回对挂载的 NFS 目录的拒绝访问。(但任何子目录都可以工作)Firefox 也遇到了类似的问题,由于访问检查,它拒绝将文件保存到挂载的目录中。即使权限正确,我也可以触摸/创建/写入挂载目录中的文件。将父 /volume1 目录更改为全球可写目录解决了这个愚蠢的问题,并欺骗客户端应用程序对其进行写入。
  • 从共享中删除所有文件系统 ACL。通过大量随机实验,我发现这些 ACL 会导致所创建文件的模式掩码出现问题。我不是 ACL 大师,所以也许有更优雅的解决方案。以 Synology 上的 root 身份执行synoacltool -del /volume1/myshare。您应该会看到+ls -l 输出中删除了符号。
  • 将共享的所有权更改为新用户:chown roger.remote:roger.remote /volume1/myshare
  • 将模式更改为755:chmod 755 /volume1/myshare
  • 在客户端上安装卷,测试权限,它应该可以工作!确保也触摸文件并验证您的 bash umask 是否正确应用。
$ umask
0002
$ cd /mnt/myshare
$ 触摸测试
$ ls -l 测试
-rw-rw-r-- 1 roger roger 0 10月21日 18:15 测试

在 Synology 上您应该会看到:

# ls -l /volume1/myshare/test
-rw-rw-r-- 1 roger.remote roger.remote 0 10月21日 18:15 测试

享受!

相关内容