以特定用户身份在启动时挂载 nfs,并允许卸载?

以特定用户身份在启动时挂载 nfs,并允许卸载?

我在用:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:    20.04
Codename:   focal

$ mate-about --version
MATE Desktop Environment 1.24.0

...作为 NFS 客户端。

我在服务器上有一个 nfs4 共享;我/etc/fstab在客户端上的输入如下:

172.16.0.5:/mydata /media/user/mydata_nfs nfs4 nosuid,nodev,nofail,x-gvfs-show,rw,relatime,user,noauto,uhelper=udisks2 0 0

我已经手动创建了/media/user/mydata_nfs,它在启动时具有以下权限:

$ ls -la /media/user/
total 20
drwxr-x---+ 5 root          root          4096 Jul 25 15:56 .
drwxr-xr-x  3 root          root          4096 Jul 19 18:43 ..
...
drwxr-xr-x  2 user          user          4096 Jul 25 12:11 mydata_nfs

上述 fstab 条目允许在启动时不挂载共享,因此我必须手动单击“文件资源管理器”GUI(此处caja)才能执行此操作;但是,一旦挂载了共享,所有权(和时间戳)就会发生变化:

$ ls -la /media/user/
total 20
drwxr-x---+ 5 root          root          4096 Jul 25 15:56 .
drwxr-xr-x  3 root          root          4096 Jul 19 18:43 ..
...
drwxrwxrwx  6 root          root          4096 Jul 29 06:15 mydata_nfs

在 NFS 服务器上,no_root_squash已启用;据我了解,在这种情况下,客户端用户的 UID/GID 会传播到服务器,并且由于服务器上我的useruid:gid 也为 1000:1000(与客户端一样),所以这对我来说很好(当我从客户端的命令行在共享内创建文件等时,所有权user保留在共享上) - 除了客户端上的挂载点由 root 拥有(这给我带来了问题:安装的一些程序snap甚至不会将共享列为目录)。

另外 - 即使使用上述 fstab 行(需要我手动挂载),当我尝试从 GUI 卸载时,也无法卸载,并且会出现一个对话框:

Unable to unmount mydata_nfs
Error finding object for block device 0:56

所以,我想要的是:

  • NFS 共享将在启动时自动挂载 -user拥有共享
  • 允许用户从 GUI 卸载共享

这是可能的吗 - 并且正确的 fstab 行是什么?


请注意,uidfstab 选项(否则会对 ntfs 执行这种映射)在这里不起作用 - syslog 将会抱怨:

Jul 29 07:03:49 mypc mount[1148]: mount.nfs4: an incorrect mount option was specified
Jul 29 07:03:49 mypc kernel: [   17.179641] nfs4: Unknown parameter 'uid'
Jul 29 07:03:49 mypc systemd[1]: media-user-mydata_nfs.mount: Mount process exited, code=exited, status=32/n/a
Jul 29 07:03:49 mypc systemd[1]: media-user-mydata_nfs.mount: Failed with result 'exit-code'.
Jul 29 07:03:49 mypc systemd[1]: Failed to mount /media/user/mydata_nfs.

对于 NFS 来说也是allow_other未知参数。

答案1

好的,更进一步,这是我尝试过的:

/media/user/mydata_nfs在手动挂载(从cajaGUI)并显示为 root 所有(如 OP 中所述)之后,我执行以下操作:

sudo chown user:user /media/user/mydata_nfs

... 确实,这确实改变了所有权 - 我最初以为这只是暂时的(仅适用于当前会话)。由于我无法从 GUI 卸载,因此我重新启动了,然后在下次启动时caja再次手动(从 GUI)挂载了分区。我很惊讶地看到这被记住了,所以现在在列表中我有:

$ ls -la /media/user/
total 20
drwxr-x---+ 5 root          root          4096 Jul 25 15:56 .
drwxr-xr-x  3 root          root          4096 Jul 19 18:43 ..
...
drwxrwxrwx  6 user          user          4096 Jul 29 08:05 mydata_nfs

因此由于某种原因,已挂载 NFS 分区的所有权变化仍然存在 - 这很好,因为它适合我的用例。

noauto然后,我只需从条目中删除/etc/fstab- 现在我已经在启动时安装了分区,并user显示为所有者 - 这正是我想要的。

但事实证明,这还不足以安装并snap使用软件 - 正如Snap 应用程序看不到来自其他分区的文件

Snap 通常受到限制。默认情况下,Snap 只能访问其自己的可写区域,但它们可以通过接口获得权限。有两个接口提供超出默认权限的文件访问能力:接口homeremovable-media接口。...

因此,在这种情况下对我有用的是使用 bind 进行安装,正如该帖子所回答的那样:

$ mkdir ~/mydata_nfs
$ sudo mount --bind /media/user/mydata_nfs ~/mydata_nfs

...然后指向snap软件读取/写入文件~/mydata_nfs


这解决了我的大部分问题,除了从 GUI 卸载 NFS 共享 - 所以如果有人知道怎么做的话,我仍然很乐意得到答案......

相关内容