Jak podkreśla Gilles, setfacldomyślne uprawnienia określają maksymalne uprawnienia, w zasadzie zastępując umask. Tak nowo utworzone pliki będą dostępne, rwchyba że aplikacja, która utworzyła plik, poprosiła specjalnie o wykonanie.
$ 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--
Zwróć uwagę na efektywne perms powyżej. (Istnieje tylko kilka programów, które proszą o ustawienie bitu wykonania na tworzonych plikach, np. gccDla plików wykonywalnych i cpczy kopiowany plik był wykonywalny.)
A może miałeś na myśli, że pierwsze polecenie setfacl działało tak, jak chciałeś, ale drugie nie? Innymi słowy, chcesz naprawić uprawnienia do starych plików, upewniając się, że katalogi są możliwe do przejścia, bez udzielania innym regularnym plikom uprawnień do wykonywania?
Moja wersja setfaclpozwala Xdokładnie tak, jak chcesz, np .:
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
Jeśli twoja wersja tego setfaclnie obsługuje, dlaczego nie użyć find?
zastępuj uprawnienia, ustawiając je na rw dla plików i rwx dla katalogów
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
ustaw uprawnienia ACL mojej grupy na podstawie istniejących uprawnień grupy
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Prawdopodobnie będziesz chciał sprawdzić, czy maska grupy zapewnia skuteczne uprawnienia. Jeśli nie, musisz to również uruchomić:
$ find . -type d -exec chmod g+rwX '{}' ';'