Pierwsze polecenie zmieni uprawnienia wcześniej istniejących plików / katalogów. -d
W drugiej komendzie jest krytyczna ustawienie domyślne uprawnienia wykraczające żadnych katalogów, co z kolei zapewni domyślny zestaw ACL dla wszelkich plików w tych katalogach przodu.
UWAGA: W obu przypadkach polecenia będą uruchamiane rekurencyjnie za pomocą -R
przełącznika.
Jeśli chodzi o -d
przełącznik, ze strony podręcznika setfacl
:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
Ten fragment wyjaśnia to również dość dobrze:
Istnieją dwa rodzaje list ACL: dostęp do list ACL i domyślnych list ACL. ACL dostępu to lista kontroli dostępu dla określonego pliku lub katalogu. Domyślna lista ACL może być powiązana tylko z katalogiem; jeśli plik w katalogu nie ma dostępu do listy ACL, korzysta z reguł domyślnej listy ACL dla katalogu. Domyślne listy ACL są opcjonalne.
Źródło: 8.2. Ustawianie dostępu do list ACL .
Przykład
Powiedz, że mam taką strukturę katalogów.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Teraz ustawmy uprawnienia za pomocą pierwszego setfacl
polecenia w swoim pytaniu:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Co powoduje:
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
Bez -dR
polecenia uruchomionego tutaj nowe listy nie byłyby objęte twoimi listami ACL:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Ale jeśli usuniemy ten katalog i uruchomimy setfacl -dR ...
polecenie i powtórzymy powyższą operację:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Teraz uprawnienia wyglądają zupełnie inaczej:
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
A teraz nasz nowo utworzony katalog odbierze te „domyślne” uprawnienia:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
Włączenie tych uprawnień dir2
spowoduje teraz egzekwowanie tych uprawnień także w plikach dir2
:
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
app/cache
zawierający katalog o nazwiedev
, pierwsze polecenie zostanie zastosowane do tego, ale nie drugie? A jeśli później zostanie dodany inny katalog (np.prod
), Drugie polecenie ustawi uprawnienia? Jeśli tak nie jest, powinienem być w stanie pominąć drugie polecenie?-R
to polecenie rekurencyjne, więc obowiązują uprawnienia. W-d
strażnicy gdyby ktoś utworzyć katalog lub przenieść jakiś katalog do drzewa później tak, że zbyt musiałby zastosować ten ACL.