使用 scilinux 6.1 盒子。fs 是 ext4,并且启用了 acls。
如果我有一个目录,比如 /pub,我希望其中的所有内容始终毫无例外地具有预定义的所有者、预定义的组、预定义的权限集和预定义的 acl 集,无论谁复制了文件/目录/其他内容,无论它是否被复制,无论什么。
基本上,“顶级”目录中的任何文件/目录(/pub 中的 /pub、/usr/src 中的 src、/var/lib/html 中的 html 等)将始终由顶级目录的所有者/组拥有/分组,无论它如何到达那里,无论谁试图更改它。并且权限将始终是权限集,无论什么或如何,并且 acl 集将始终相同,无论什么/在哪里。
我该如何配置它?
我知道这一定是常见问题解答,但如果可以的话我会尝试一下。
答案1
你不能。使用扩展 ACL 来提供你需要的权限(默认将它们应用于所有新文件)并有效地忽略传统的权限位。
答案2
您可以使用“设置组 ID”功能强制将chmod g+s /pub
添加到该目录的所有文件和目录的组设置为相同,但“设置用户 ID”(chmod o+s /pub
)在大多数系统上不起作用。
答案3
一种不雅的做法是安装 FAT 文件系统并使用 uid=gid=。这样,您将无法更改任何文件的所有者,因为文件系统不支持用户、组或 ACL。
您可以使用下面列出的命令来测试它:
dd if=/dev/zero of=/var/pubfs bs=1024 count=40960 # Create a file to test it
mkfs.vfat -F 32 /var/pubfs # Format it as FAT32
mount -t vfat -o uid=user,gid=group /var/pubfs /pub # Mount it
答案4
不行。一个可能对你有用的选项是设置一个 cron 作业来定期运行chown -R
,chgrp -R
并chmod -R
在整个目录结构上递归地设置你想要的所有者/组/权限。这肯定是一个临时解决方案,对于非常大的目录结构来说会有很多工作,但它会修复权限。
您需要提供命令的所有者/组/权限,以及要操作的顶级目录,以便这些命令能够工作,例如chown -R nobody /tmp/testdir
。
或者,您可以设置一个程序来inotify
监视目录的变化,然后根据需要检查或更正权限,但 inotify 有它自己的一系列问题,特别是如果有许多嵌套的子目录...您必须订阅所有这些目录的更改通知...
听起来 @womble 的答案是最好的选择,但我没有使用过扩展 ACL。只是想给出一些替代方案。