我的文件系统根目录下有一个名为 的文件夹/shared
。我想将文件存储在其中,用户/文件权限并不重要。
我正在使用 Fedora 38
我可以这样做sudo chmod -R 777 /shared
,sudo chown -R nobdy:nobody /shared
但是新创建的文件将具有创建它们的用户的权限。
有没有办法让该文件夹强制执行允许所有人 rwx 的策略,无论何时/谁创建文件?
答案1
在 Unix 中不存在“无所有者”这种事。
最接近您想要做的事情是将所有应该有权访问该目录的用户放入一个特殊组 - 例如shared
- 然后在所有目录上使用“directory setgid”。
基本上
chown -R root:shared /shared
find /shared -type d | xargs -I DIR chmod 2775 DIR`
确保不是做出任何文件setgid,仅限目录。
目录上的setgid 位(模式2000
)的作用是使其中所有新创建的文件和子目录归其当前组所有。
除非您还在该目录中设置了粘滞位,否则该组中的每个人都可以删除其中由其他用户创建的文件。
您还需要告诉您的用户不要将他们的设置设置umask
得太严格 - 您需要的是类似的东西umask 0002
而不是默认的umask 0022
。
根据您的文件系统和操作系统,您还可以使用类似以下命令setfacl
:https://linux.die.net/man/1/setfacl
但是,这不是一个可移植的解决方案,并且不支持 BSD。
答案2
正如另一个答案中提到的,在 Linux 中执行此操作的一种方法是使用访问控制列表setfacl
,另请参阅这个答案, 像这样:
setfacl -d -m o::rwX .
setfacl -m o::rwX .
所有者仍将被保留,但任何人都可以添加/删除/修改运行此命令的目录(和子目录)内的任何文件。
另一种方法是使用不支持权限的文件系统,例如 vfat。最好有一个单独的分区,您将在其中放置此目录,并且:
sudo mkfs.vfat /dev/<partition>
sudo mount -o umask=0 /dev/<partition> /shared
(当然,将其添加到 fstab 中,以便在重启时安装它)。
如果您无法保留一个分区,则可以使用原始映像文件作为循环设备:
dd if=/dev/zero bs=1024 count=10000 of=vfat.img
mkfs.vfat vfat.img
sudo mount -o loop,umask=0 vfat.img /shared
(这将生成一个 10MB 的图像,您可以在参数中更改大小count
)