问题描述
我想将设备 /dev/sda3
挂载到目录 /foo/bar/baz
。挂载后,目录应该具有用户 johndoe
的 uid 。所以我这样做了:
sudo -u johndoe mkdir /foo/bar/baz
stat -c %U /foo/bar/baz
johndoe
并将以下行添加到我的 /etc/fstab
:
/dev/sda3 /foo/bar/baz ext4 noexec,noatime,auto,owner,nodev,nosuid,user 0 1
当我现在执行 sudo -u johndoe mount /dev/sda3
时,命令 stat -c %U /foo/bar/baz
会导致 root
而不是 johndoe
。 使用 uid johndoe
设置挂载此 ext4 文件系统的最佳方法是什么?
最佳答案
答案是 bindfs
。它将获取已安装的文件系统,并使用您想要的任何 uid 提供其视图:
sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo
次佳答案
无法在具有 ext4 文件系统的磁盘上强制指定所有者。只有不支持 Linux 权限的文件系统(如 fat)才具有所有权/组属性:uid=value
和 gid=value
。请参阅 manual page on mount 。
您应该按如下方式更改已挂载文件系统的所有者:
sudo chown johndoe /foo/bar/baz
如果需要递归更改权限:
sudo chown -R johndoe /foo/bar/baz
…如果组也需要更改为 johndoe
:
sudo chown -R johndoe: /foo/bar/baz
第三种答案
假设为文件设置的组具有适当的权限,您应该能够找出它的组 ID (GID) 并将自己添加到其中。
要找出文件的组 ID,请使用 ls -n
。示例输出:
drwxr-xr-x 1 1000 1000 550 Jul 9 11:08 Desktop/
您需要 GID 的第四个字段,在我的情况下是第二个 1000
。
sudo addgroup --gid GID foobar; sudo usermod `whoami` -aG foobar
一旦运行该程序,您就可以完全控制组的文件属性允许的任何位置。
正如与用户权限相关的其他答案中所述,如果您需要修复某些文件的组,请运行以下命令之一:
sudo chown -R :foobar ./
sudo chgrp -R foobar ./