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


19

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

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-filesystem的最佳方法是什么?

Answers:


20

不可能在具有ext4文件系统的磁盘上强制所有者。只有不支持Linux权限(例如fat)的文件系统才具有所有权/组身份的属性:uid=valuegid=value。请参阅安装手册

您应该按以下方式更改已挂载文件系统上的所有者:

sudo chown johndoe /foo/bar/baz

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

sudo chown -R johndoe /foo/bar/baz

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

sudo chown -R johndoe: /foo/bar/baz

2
如果可以帮助,递归更改所有权通常是一个坏主意。清除“正确的”所有权后,几乎没有简单的方法可以将其收回。IMO bindfs是处理此问题的正确方法(请参阅我的回答)。
Catskul 2013年

3
bindfs听起来像是另一层复杂性。我的答案最适合于外部硬盘(用于备份),该硬盘在以前的安装中使用了不同的用户ID。在需要保留多个用户ID(根文件系统)的情况下,-u不应使用它,但在那种情况下,也不应使用bindfs with,因为它绕过了来自不同用户ID的访问限制。--map如果要保留访问限制,应使用。
Lekensteyn

1
+1表示“只有在无许可的FS上才有可能”-我一直在尝试使用uidand gid,这是行不通的。
mgarciaisaia 2015年

19

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

sudo apt-get install bindfs
mkdir ~/myUIDdiskFoo
sudo bindfs -u $(id -u) -g $(id -g) /media/diskFoo ~/myUIDdiskFoo

1
bindfs具有其他操作模式,请参见:bindfs.org/docs/bindfs.1.html
Lekensteyn

2
uses,它使用FUSE。
纳文

我想用与主机操作系统不同的用户权限来安装9p虚拟文件系统。.我正撞墙而试图使其正常工作。Bindfs确实使我摆脱了束缚。很棒的小工具!
Boann

6

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


要查找文件的组标识,请使用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 ./

1
请注意,如果要在不更改非A的文件所有权的情况下将用户或组从A切换为B;您可以sudo chown --from A B -R ./为用户和sudo chown --from :A :B ./组使用
LateralFractal,2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.