当我使用 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 > file
vi
vim
emacs
dd
split
rwxrwxrwx
chmod
此规则有几个例外:
cp
以及相关的程序(例如,cpio
,tar
复制或以其他方式等)重新创建一个文件,该文件会(尝试)新文件设置为相同的模式作为原始文件。你没有提到“预期结果”是什么。我认为这是设置了位的文件x
。
您无法强制执行此操作,因为默认 ACL(如 umask)仅阻止权限但不会自行设置权限。新目录或文件不会获得比创建它所请求的open()
或调用更多的权限(对于用户、组和其他)。mkdir()
对于文件,通常只请求读和写权限。但是,如果编译器创建二进制文件,那么它也会请求执行权限。