我需要安装acl
才能设置非常具体的权限结构。组成员应该能够查看目录中的文件并更改到子目录。但是,他们不应该有读取文件的权限!
我不知道如何实现这一目标。该命令setfacl -m d:g:mygroup:rx
将完成部分工作,但随后所有文件都将变得可读。因此,我只需将此规则应用于文件夹(drwxrwx---)
,其他所有内容都应该无法访问(rw-------)
。
答案1
您可以设置默认 ACL 以授予该组“如果可执行则执行”(X) 但不具有读取权限。
setfacl -R -d -m group:mygroup:X .
这样,新创建的文件将不能被组读取,但组将能够遍历目录。但是,该组将无法列出目录内容。我认为这是您可以使用 Solaris/Linux ACL 实现的最接近的效果。
由于此 ACL 比您想要的限制更严格,因此应用此 ACL 并稍后向目录添加读取权限是安全的。你可以自动完成通过inotify,例如使用以下 incrontab:
/path/to/directory IN_CREATE /path/to/script $@
脚本包含的位置
#!/bin/sh
if [ -d "$1" ]; then setfacl -m group:mygroup:r -- "$1"; fi
另一种方法是使用不同的权限创建该目录树的视图,绑定文件系统。 Bindfs 支持目录和常规文件的不同权限。
bindfs -g mygroup -p gd=rx,gf= /path/to/original/root /path/to/mount/point
答案2
如果您希望对将来创建的所有文件/目录强制执行此权限,请umask
按照问题第一条评论中的建议使用。
如果这是一项一次性活动——您已经拥有适当的目录和文件并且想要修复权限——您可以find
在顶级目录中使用以下命令:
# Give all permissions to all for the directories and
# Revoke the permission for others
find . -type d -exec chmod +rwx,o-rwx {} +
# Unset all premissionas for all files and
# Give read & write premission to the owners
find . -type f -exec chmod -rwx,u+rw {} +
人们可以考虑使用 来安排这些命令cron
,但我想这不是一个好主意。例如,非所有者可以在下一个作业计划之前的时间窗口内读取文件cron
。