Zum Beispiel möchte ich meinen Kollegen Schreibzugriff auf ein bestimmtes Verzeichnis gewähren. Nehmen wir an, dass Unterverzeichnisse Zugriffsrechte 775, Dateien 664 und einige ausführbare Dateien im Verzeichnis 775 hatten.
Jetzt möchte ich Schreibrechte hinzufügen. Mit chmod könnte ich sowas probieren
chmod o+w -R mydir/
Aber das ist nicht cool, da ich das Verzeichnis nicht für die ganze Welt beschreibbar machen möchte. Ich möchte nur bestimmten Benutzern Zugriff gewähren, daher möchte ich ACL verwenden. Aber gibt es eine einfache Möglichkeit, diese Berechtigungen festzulegen? Aus meiner Sicht muss ich mindestens drei Fälle (Verzeichnisse, Dateien, ausführbare Dateien) separat behandeln:
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 {} \;
Es scheint ziemlich viele Codezeilen für eine so einfache Aufgabe. Gibt es einen besseren Weg?
quelle
-X
funktioniert nicht wie erwartet in enthaltensetfacl 2.2.49
.Wie von umläute erwähnt, ist der Befehl
setfacl -R
mit Großbuchstaben "X" der richtige Weg:Für diejenigen, die die ACL rekursiv erneut anwenden müssen (z. B. "Berechtigungen für Unterverzeichnisse erneut anwenden" à la Windows).
Dieser Befehl könnte aufgeteilt werden, um Fehler wie zu vermeiden
setfacl: foobar: Only directories can have default ACLs
.Beachten Sie, dass die Syntax
<( something )
ist Prozess - Substitution , die spezifisch für bash ist. Sie müssen möglicherweise eine temporäre Datei erstellen, wenn Sie eine andere Shell verwenden.quelle
quelle
for i in $(find …)
.find /data -mindepth 0 -type d -exec setfacl -m u:zabbix:r-X {} \;
$(find /data -mindepth 0 -type d)
Gibt keine Ergebnisse zeilenweise zurück, sondern puffert die gesamten Ergebnisse. Wenn eine Zeile ein Leerzeichen enthält, erhalten Sie einen falschen Datensatz in$i
Variable.