facl 忽略“x”权限,但只对文件

use*_*034 9 acl permissions

当我使用 setfacl 来管理子文件/目录应该具有哪些权限时,由于某种原因,这些文件具有除执行(“x”)之外的所有权限。

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl .
# file: .
# owner: someuser
# group: webs
# flags: -s-
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l
total 4
drwxrwsrwx+ 2 someuser webs 4096 pa? 31 13:35 dir
-rw-rw-rw-  1 someuser webs    0 pa? 31 13:35 file
Run Code Online (Sandbox Code Playgroud)

我认为它与 umask 有关,但以各种方式更改它永远不会给出预期的结果,除非我遗漏了什么。

如何解决这个问题?

Sco*_*ott 12

Hauke Laging 的回答是想说:

    任何创建文件或目录的程序都会指定它希望该文件具有的模式(权限)。这几乎总是在 C 程序(或任何使用的语言)中进行硬编码,并且用户几乎无法直接访问。然后该umask值和默认ACL可以关闭权限位,但不能添加它们。

    您的问题是,虽然mkdir指定了 777 ( rwxrwxrwx)模式,但几乎所有创建文件的程序都指定了 666 ( rw-rw-rw-)。这包括touch,外壳(用于I / O重定向;例如,),编辑(,,,等...), ,,等等。因此,无论您使用 ACL 做什么,您都不会在(通过任何这些程序)创建后立即获得对纯文件的权限;您必须先创建文件,然后再创建它。program > filevivimemacsddsplitrwxrwxrwxchmod

    此规则有几个例外:

    • cp以及相关的程序(例如,cpiotar复制或以其他方式等)重新创建一个文件,该文件会(尝试)新文件设置为相同的模式作为原始文件。
    • 创建二进制可执行文件的编译器指定模式为 777(至少,如果编译成功),因此用户实际上可以执行他们刚刚编译的程序。

  • 嘿,这不是抱怨!这是一个很好的答案,我只是因为想知道同样的事情才找到它。我只是删除引用格式,仅此而已。只要您提及原始答案(您确实这样做了),发布一个答案来澄清现有答案就可以了。是的,添加链接是个好主意,但这没什么大不了的。显然,您不仅仅是将他的答案复制到您的答案中。 (2认同)
  • 我不认为这是抱怨;谢谢你的夸奖。但你肯定意识到,菱形人提出的任何要求都像是戴着丝绒手套的铁拳。:-) PS我已根据您的建议编辑了我的答案。 (2认同)

Hau*_*ing 4

你没有提到“预期结果”是什么。我认为这是设置了位的文件x

您无法强制执行此操作,因为默认 ACL(如 umask)仅阻止权限但不会自行设置权限。新目录或文件不会获得比创建它所请求的open()或调用更多的权限(对于用户、组和其他)。mkdir()

对于文件,通常只请求读和写权限。但是,如果编译器创建二进制文件,那么它也会请求执行权限。