使用 setfacl 允许组成员写入目录中的任何文件

使用 setfacl 允许组成员写入目录中的任何文件

我想使用 setfacl 以便“app”组中的任何人都可以编辑 /usr/local/users/app 中包含的任何文件,无论传统的 UNIX 权限如何规定。我有两个用户约翰和本。我试图遵循另一个问题的指示,但 john 无法写入某些文件。看起来这是因为 acl 掩码。但是,我已经在 rwx 目录上设置了默认掩码,所以其中的文件在创建时不应该继承它吗?

例如,约翰无法写入下面的文件,但他是“app”组的成员,该组已在文件上写入 acls,所以我很惊讶他无法编辑该文件。

ben@app1:/usr/local/users$ ls -la app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
-rw-r--r--+ 1 ben users 38326 Apr  2 10:21 app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar

ben@app1:/usr/local/users/app$ getfacl app-1.0-SNAPSHOT/lib/
# file: app-1.0-SNAPSHOT/lib/
# owner: ben
# group: users
user::rwx
group::rwx          #effective:r-x
group:app:rwx       #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:group::rwx
default:group:app:rwx
default:mask::rwx
default:other::r-x

ben@app1:/usr/local/users$ getfacl app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
# file: app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar
# owner: ben
# group: users
user::rw-
group::rwx          #effective:r--
group:app:rwx       #effective:r--
mask::r--
other::r--

答案1

您会注意到 getfacl 向您抛出的“有效”注释。问题是正在计算权限,因此“应用程序”没有设置写入位。发生这种情况是因为文件的掩码设置为只读。掩码用于限制可能授予特定文件或目录的权限数量。

为什么您希望这种行为的一个例子是,如果您知道该文件可能合法地需要不同的用户/组来访问它,但由于某种原因,权限使事情变得复杂,并且您想要一种方式来表达“无论其他用户/组如何”默认权限设置为,无论其组成员身份是什么,或者稍后执行的任何递归 setfacl,绝对不要泄露这个!” 拥有用户在 POSIX 世界中具有特殊的地位,它拥有其他用户没有的权利,例如非 root 的能力和更改文件权限的能力,并且其权利不受掩码的限制(其中无论如何都是毫无意义的,因为系统赋予他们第一个特权),这就是为什么即使掩码受到限制,他们仍然获得 rwx。

不过要回答你的具体问题:将写入位添加到文件的掩码中,然后以用户身份重试john

这里是上述解释的命令行版本,请注意当我修改的只是掩码时“有效”权限如何变化。

答案2

是不可能的。 cp、rsync 等创建文件时忽略默认 ACL

为什么 cp 不尊重 ACL?

相关内容