dur*_*dal 16 linux permissions chmod acl file-permissions
我想为文件共享设置默认权限,以便每个人都可以访问rwx所有目录,并且所有新创建的文件都是rw.
访问此共享的每个人都在同一个组中,因此这不是问题。
我已经看过通过 ACL 执行此操作而不更改所有用户的 umask 等。以下是我目前的调用:
setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name
Run Code Online (Sandbox Code Playgroud)
我的问题是,虽然我希望所有新创建的子目录是rwx,我只希望新创建的文件是rw。
有没有人有更好的方法来实现我想要的最终结果?有没有办法在目录上与文件分开设置 ACL,chmod +x与 vs.类似chmod +X?
谢谢
Mik*_*kel 12
正如 Gilles 指出的那样,setfacl默认权限指定了最大权限,基本上取代了umask. 因此,rw除非创建该文件的应用程序特别要求它是可执行的,否则新创建的文件将是。
$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--
$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x #effective:r--
group:mygroup:rwx #effective:rw-
mask::rw-
other::r--
Run Code Online (Sandbox Code Playgroud)
注意上面的有效烫发。(只有少数程序会要求在它创建的文件上设置执行位,例如gcc对于可执行文件以及cp被复制的文件是否是可执行文件。)
或者你的意思是第一个 setfacl 命令按照你想要的方式工作,但第二个不是?换句话说,您希望修复旧文件的权限,确保目录可遍历,而不授予其他常规文件执行权限?
我的版本setfacl可以X完全像你想要的,如:
setfacl g:mygroup:rwX
$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513 4 drwxr-xr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-r--r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxr-xr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rwxr-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rw-r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
Run Code Online (Sandbox Code Playgroud)
如果您的版本setfacl不支持,为什么不使用find?
覆盖权限,将它们设置为文件的 rw 和目录的 rwx
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Run Code Online (Sandbox Code Playgroud)
根据现有组权限设置 mygroup ACL 权限
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Run Code Online (Sandbox Code Playgroud)
您可能需要检查组掩码是否提供有效权限。如果没有,你也必须运行这个:
$ find . -type d -exec chmod g+rwX '{}' ';'
Run Code Online (Sandbox Code Playgroud)
小智 6
对于未来的读者,要setfacl在现有文件/文件夹上使用而不将可执行位添加到您的文件中,解决方案是@Mikel 答案的这一部分:
我的 setfacl 版本允许 X 完全符合您的要求,例如:
setfacl g:mygroup:rwX
setfacl文档的相关摘录:
perms 字段是指示权限的字符组合:读取 (r)、写入 (w)、执行 (x)、仅当文件是目录或已对某些用户 (X) 具有执行权限时才执行。