使用设置的特殊用户 ID 挂载文件系统

qbi*_*qbi 21 sudo fstab mount

我想将设备挂载/dev/sda3到目录/foo/bar/baz。挂载后目录应该有 user 的 uid johndoe。所以我做了:

sudo -u johndoe mkdir /foo/bar/baz
stat -c %U /foo/bar/baz
johndoe
Run Code Online (Sandbox Code Playgroud)

并将以下行添加到我的/etc/fstab

/dev/sda3 /foo/bar/baz ext4 noexec,noatime,auto,owner,nodev,nosuid,user 0 1
Run Code Online (Sandbox Code Playgroud)

当我现在sudo -u johndoe mount /dev/sda3执行命令stat -c %U /foo/bar/baz结果root而不是johndoe. 使用 uidjohndoe设置挂载这个 ext4 文件系统的最佳方法是什么?

Cat*_*kul 23

bindfs是答案。它将采用一个已经安装的文件系统,并使用您想要的任何 uid 提供它的视图:

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo
Run Code Online (Sandbox Code Playgroud)

  • bindfs 有其他操作模式,参见:http://bindfs.org/docs/bindfs.1.html (2认同)
  • 呃,它使用 FUSE。 (2认同)

Lek*_*eyn 22

无法在具有 ext4 文件系统的磁盘上强制所有者。只有不支持像 fat 这样的 Linux 权限的文件系统才有所有权/组别属性:uid=valuegid=value. 请参阅mount手册页

您应该更改已挂载文件系统上的所有者,如下所示:

sudo chown johndoe /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

如果您需要递归更改权限:

sudo chown -R johndoe /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

...如果该组也需要更改johndoe为:

sudo chown -R johndoe: /foo/bar/baz
Run Code Online (Sandbox Code Playgroud)

  • bindfs 听起来像是另一层复杂性。我的回答最适合于先前安装中使用的具有不同用户 ID 的外部硬盘(用于备份)。它不应该在需要保留多个用户 ID 的情况下使用(根文件系统),但在这种情况下也不应该使用带有 `-u` 的 bindfs,因为它规避了来自不同用户 ID 的访问限制。如果你想保留访问限制,应该使用`--map`。 (3认同)
  • 如果您可以帮助它,递归更改所有权通常是一个坏主意。一旦您清除了“正确”的所有权,几乎没有简单的方法可以将其取回。IMO bindfs 是处理这个问题的正确方法(见我的回答)。 (2认同)

小智 7

假设为文件设置的组具有适当的权限,您应该能够找到它的组 ID (GID) 并将您自己添加到其中。


要找出文件的组 ID,请使用ls -n. 示例输出:

drwxr-xr-x 1 1000 1000  550 Jul  9 11:08 Desktop/
Run Code Online (Sandbox Code Playgroud)

您需要 GID 的第四个字段,在我的情况下是第二个1000.

sudo addgroup --gid GID foobar; sudo usermod `whoami` -aG foobar
Run Code Online (Sandbox Code Playgroud)

一旦你运行,你应该完全控制组的文件属性允许它。

正如与用户权限相关的另一个答案中所述,如果您需要修复某些文件上的组,请运行以下命令之一

sudo chown -R :foobar ./
Run Code Online (Sandbox Code Playgroud)
sudo chgrp -R  foobar ./
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您想将用户或组从 A 切换到 B 而不更改不是 A 的文件的所有权;您可以对用户使用 `sudo chown --from AB -R ./`,对组使用 `sudo chown --from :A :B ./` (3认同)