Na przykład chcę dać moim kolegom dostęp do zapisu do określonego katalogu. Załóżmy, że podkatalogi miały prawa dostępu 775, pliki 664, a także, że w katalogu dir - 775 były pliki wykonywalne.
Teraz chcę dodać uprawnienia do zapisu. Z chmod mogłem spróbować czegoś takiego
chmod o+w -R mydir/
Ale to nie jest fajne, ponieważ nie chcę, aby dir był zapisywany w świecie - chcę dać dostęp tylko niektórym użytkownikom, więc chcę korzystać z ACL. Ale czy istnieje prosty sposób na ustawienie tych uprawnień? Widzę, że muszę osobno rozwiązać co najmniej trzy przypadki (katalogi, pliki, pliki wykonywalne):
find -type d -exec setfacl -m u:colleague:rwx {} \;
find -type f -executable -exec setfacl -m u:colleague:rwx {} \;
find -type f \! -executable -exec setfacl -m u:colleague:rw {} \;
Wydaje się, że jest tak dużo wierszy kodu dla tak prostego zadania. Czy jest lepszy sposób?
źródło
-X
nie działa zgodnie z oczekiwaniami zawartymi wsetfacl 2.2.49
.Jak wspomniał Umläute, można użyć polecenia
setfacl -R
z dużymi literami „X”, na przykład:Jednak dla tych, którzy muszą ponownie zastosować ACL w sposób rekultywacyjny (np. „Ponownie zastosuj uprawnienia do podkatalogów” à la Windows).
To polecenie można podzielić, aby uniknąć błędu
setfacl: foobar: Only directories can have default ACLs
.Zauważ, że składnia
<( something )
to Process Substitution , która jest specyficzna dla bash. Może być konieczne utworzenie pliku tymczasowego, jeśli używasz innej powłoki.źródło
źródło
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
nie zwróci wyników linia po linii, buforuje wszystkie wyniki. Jeśli w linii jest spacja, otrzymasz niepoprawny zapis$i
zmiennej.