Der erste Befehl ändert die Berechtigungen bereits vorhandener Dateien / Verzeichnisse. Der -d
Befehl im zweiten Befehl ist wichtig, um die zukünftigen Standardberechtigungen für alle Verzeichnisse festzulegen, die wiederum einen Standardsatz von ACLs für alle Dateien in diesen Verzeichnissen bereitstellen.
HINWEIS: In beiden Fällen werden die Befehle rekursiv über den -R
Switch ausgeführt.
In Bezug auf den -d
Schalter von der setfacl
Manpage:
-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).
Dieser Auszug erklärt es auch ziemlich gut:
Es gibt zwei Arten von ACLs: Zugriffs-ACLs und Standard-ACLs. Eine Zugriffs-ACL ist die Zugriffssteuerungsliste für eine bestimmte Datei oder ein bestimmtes Verzeichnis. Eine Standard-ACL kann nur einem Verzeichnis zugeordnet werden. Wenn eine Datei im Verzeichnis keine Zugriffs-ACL hat, werden die Regeln der Standard-ACL für das Verzeichnis verwendet. Standard-ACLs sind optional.
Quelle: 8.2. Festlegen von Zugriffs-ACLs .
Beispiel
Angenommen, ich habe diese Verzeichnisstruktur.
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
Legen Sie nun die Berechtigungen mit dem ersten setfacl
Befehl in Ihrer Frage fest:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
Was zu folgenden Ergebnissen führt:
$ 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--
Ohne den hier ausgeführten -dR
Befehl würden neue Verzeichnisse nicht von Ihren ACLs abgedeckt:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
Aber wenn wir dieses Verzeichnis entfernen und den setfacl -dR ...
Befehl ausführen und diesen Vorgang oben wiederholen:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
Jetzt sehen die Berechtigungen ganz anders aus:
$ 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--
Und jetzt übernimmt unser neu erstelltes Verzeichnis diese "Standard" -Berechtigungen:
$ 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
Wenn diese Berechtigungen dir2
aktiviert sind, werden diese Berechtigungen nun auch für Dateien in folgenden dir2
Bereichen erzwungen:
$ 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
das ein Verzeichnis mit dem Namen enthältdev
, wird der erste Befehl darauf angewendet, aber nicht der zweite? Und wenn später ein anderes Verzeichnis hinzugefügt wird (z. B.prod
), legt der zweite Befehl die Berechtigungen fest? Ist dies nicht der Fall, sollte ich den zweiten Befehl überspringen können?-R
ist ein rekursiver Befehl, daher gelten die Berechtigungen. Die-d
Wachen, wenn jemand später ein Verzeichnis erstellen oder ein Verzeichnis in den Baum verschieben würde, damit auch diese ACL angewendet würde.