我有一台安装了 Nextcloud snap 的 Ubuntu 16.04 服务器 ( nextcloud.lan
),以及一台配置为通过 NFSv4 提供文件的 Ubuntu 16.04 NAS ( nas.lan
)。我想/var/snap/nextcloud
通过从 NAS 导出的 NFS 目录在 nextcloud.lan 上挂载目录,以便 Nextcloud 使用的所有文件都存储在 NAS 上。
NAS 上的 NFS 身份验证配置为默认 AUTH_SYS/AUTH_UNIX。请参阅 nas.lan 的以下配置文件:
/etc/idmap.conf
:
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = localdomain
/etc/exports
:
/vol0/export 192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async) /vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
对于nextcloud.lan
:
/etc/fstab
:
nas:/nextcloud /mnt nfs auto 0 0
/etc/idmap.conf
:
[General]
Verbosity = 0
Pipefs-Directory = /run/rpc_pipefs
# set your own domain here, if id differs from FQDN minus hostname
Domain = localdomain
目前,当 uid 同时存在于 nas.lan 和 nextcloud.lan 上的用户在 nextcloud.lan 上的挂载目录中创建文件(例如用户名 jacob、uid 1000)时,该文件会在两个系统上以适当的所有者创建(例如 jacob:jacob)。
但是,当 root 用户在 nextcloud.lan 上的导出目录中创建文件时,这两个系统中的文件似乎都归“nobody:nogroup”所有。Nextcloud snap 只能以 root 用户身份运行,所以我的问题是,如何让 root 用户在 NFS 客户端 nextcloud.lan 上创建的文件显示为“root:root”,而不是“nobody:nogroup”?
我读到过 NFS 对 root 用户权限进行了一些特殊处理,并且出于安全原因不会在系统之间映射 root 用户 ID。我想知道是否有办法覆盖这一点?
我看到有一个名为的选项no_root_squash
,但这对我来说不起作用。
我也尝试在 nextcloud.local 上设置以下内容/etc/idmapd.conf
,但这对我来说也不起作用:
[Mapping]
Nobody-User=root
Nobody-Group=root
到目前为止,我已经尝试了所有能想到的方法来将 nobody:nogroup 映射到 nextcloud.lan 系统上的 root:root,但都没有成功。
如果有人能分享关于如何做到这一点的见解,我将不胜感激。谢谢你的帮助。
答案1
导出文件中有两个重叠的条目:
/vol0/export 192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async)
/vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
子网 192.168.2.0/24 内的任何客户端都可能(并且很可能确实)使用第一个条目,最终将 root 映射到用户 nobody。尝试缩小 IP 范围:
/vol0/export 192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async) 192.168.2.1(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
其中 192.168.2.1 应该是 nextcloud.lan 的 IP 地址。
答案2
我可以通过对 /etc/exports 进行以下修改来实现这一点:
/vol0/export 192.168.2.0/24(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)
/vol0/export/nextcloud 192.168.2.0/24(rw,nohide,insecure,no_subtree_check,async,no_root_squash)
然后我能够通过 NFS 将 /var/snap/nextcloud 挂载到 nas 上的导出目录,一切似乎运行良好。
但是,我同意@AndrewHenle 的观点——这种方法似乎很危险,也不安全,最好找到一种方法,将 nextcloud.lan 系统上的 root 用户映射到 nas.lan 系统上的非 root 用户。不幸的是,nextcloud snap 此时需要以 root 身份运行。我可能会将其作为一个单独的问题提出来。