setfacl: Czy te dwa polecenia są takie same?

10

Mam skrypt wdrażania (oparty na Capifony), który ustawia uprawnienia na określonych serwerach do instalacji Symfony2. Zawiera następujące dwa polecenia, aby to zrobić dla kilku katalogów:

setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache

Te dwa polecenia znajdują się na stronie Symfony2 jako sposób na naprawienie uprawnień, jednak wyglądały one uderzająco podobnie do mnie. Spojrzałem więc na strony podręcznika setfacli z tego, co mogłem zrozumieć, drugie polecenie robi dokładnie to samo, co pierwsze z dodatkową opcją (której nie do końca rozumiem). Moje pytanie brzmi: czy moje założenie jest prawidłowe? Jeśli tak, czy miałoby to taki sam efekt, jeśli usunę pierwsze polecenie?

Hosh Sadiq
źródło

Odpowiedzi:

15

Pierwsze polecenie zmieni uprawnienia wcześniej istniejących plików / katalogów. -dW 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ą -Rprzełącznika.

Jeśli chodzi o -dprzełą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 setfaclpolecenia 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 -dRpolecenia 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ń dir2spowoduje 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--
slm
źródło
Ach, więc żeby to potwierdzić, masz na myśli, że jeśli mamy katalog app/cachezawierający katalog o nazwie dev, 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?
Hosh Sadiq
1
@HoshSadiq - nie, -Rto polecenie rekurencyjne, więc obowiązują uprawnienia. W -dstrażnicy gdyby ktoś utworzyć katalog lub przenieść jakiś katalog do drzewa później tak, że zbyt musiałby zastosować ten ACL.
slm
To wspaniale! Sprawia, że ​​wszystko jest wyraźniejsze :) Dzięki!
Hosh Sadiq