Як зазначає Жилль, 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--
Зверніть увагу на ефективні препарати вище. (Є лише кілька програм, які попросять встановити біт виконання файлів, які він створює, наприклад, 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
Якщо ваша версія setfacl
не підтримує це, чому б не використовувати find
?
перезаписати дозволи, встановивши їх у rw для файлів та rwx для dirs
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
встановлення дозволів ACL для моєї групи на основі наявних дозволів групи
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Ви, ймовірно, захочете перевірити, чи маска групи забезпечує ефективні дозволи. Якщо ні, то вам також доведеться запустити це:
$ find . -type d -exec chmod g+rwX '{}' ';'