Jak podkreśla Gilles, setfacl
domyślne uprawnienia określają maksymalne uprawnienia, w zasadzie zastępując umask
. Tak nowo utworzone pliki będą dostępne, rw
chyba ż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. gcc
Dla plików wykonywalnych i cp
czy 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 setfacl
pozwala X
dokł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 setfacl
nie 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 '{}' ';'