Group+rx 权限仅在使用 ACL 的目录中?

Group+rx 权限仅在使用 ACL 的目录中?

我需要安装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

答案3

您可以从稍微不同的角度解决该解决方案,并使用这样的东西英克朗或者伊诺蒂康(后者是一个 Debian 工具,已被移植到许多发行版)。通过这两个功能,您可以观察某些关键事件的目录和操作文件权限更改。根据 incron 的说法,这需要 2.6.13 或更高版本的内核,并编译 inotify。它作为软件包出现在 ubuntu、debian 和 Fedora 上,因此很容易安装(并且看起来它已移植到许多发行版)。

有一篇关于使用 inotify 的 incron 的好文章尼克工艺

相关内容