Ich habe dieses Beispiel mit dem Titel: ACL und MASK unter Linux gefunden . In diesem Artikel werden die folgenden Beispiele gezeigt, die meiner Meinung nach helfen, die ACLs zu verstehen und umask
miteinander zu interagieren.
Hintergrund
Wenn eine Datei auf einem Linux-System erstellt wird, werden die Standardberechtigungen 0666
angewendet, während beim Erstellen eines Verzeichnisses die Standardberechtigungen 0777
angewendet werden.
Beispiel 1 - Datei
Angenommen, wir setzen unsere Umask auf 077 und berühren eine Datei. Wir können verwenden, um strace
zu sehen, was tatsächlich passiert, wenn wir dies tun:
$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile
In diesem Beispiel können wir sehen, dass der Systemaufruf open()
mit den Berechtigungen 0666 erfolgt. Wenn die umask 077
dann jedoch vom Kernel angewendet wird, werden die folgenden Berechtigungen entfernt ( ---rwxrwx
) und wir bleiben mit rw-------
aka 0600 übrig .
Beispiel - 2 Verzeichnis
Das gleiche Konzept kann auf Verzeichnisse angewendet werden, außer dass anstelle der Standardberechtigungen 0666 0777 sind.
$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777) = 0
drwxr-xr-x 2 saml saml 4096 Jul 9 10:55 testdir
Diesmal verwenden wir den mkdir
Befehl. Der mkdir
Befehl rief dann den Systemaufruf auf mkdir()
. Im obigen Beispiel sehen wir, dass der mkdir
Befehl den mkdir()
Systemaufruf mit den Standardberechtigungen 0777
( rwxrwxrwx
) aufgerufen hat . Dieses Mal wird eine Umask 022
der folgenden Berechtigungen entfernt ( ----w--w-
), sodass beim Erstellen rwxr-xr-x
der Verzeichnisse 0755 ( ) übrig bleibt .
Beispiel 3 (Anwenden der Standard-ACL)
Erstellen wir nun ein Verzeichnis und zeigen, was passiert, wenn die Standard-ACL zusammen mit einer darin enthaltenen Datei darauf angewendet wird.
$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir
$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
Jetzt erstellen wir die Datei aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Erhalten Sie jetzt Berechtigungen für neu erstellte Dateien:
$ getfacl --all-effective acldir/aclfile
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
Beachten Sie die Maske , mask::rw-
. Warum ist es nicht mask::rwx
so, als ob das Verzeichnis erstellt wurde?
Überprüfen Sie die luvly
Protokolldatei, um festzustellen, welche Standardberechtigungen für die Erstellung der Datei verwendet wurden:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
Hier wird es etwas verwirrend. rwx
Wenn die Maske auf beim Erstellen des Verzeichnisses eingestellt ist, erwarten Sie dasselbe Verhalten beim Erstellen der Datei, dies funktioniert jedoch nicht. Dies liegt daran, dass der Kernel die open()
Funktion mit den Standardberechtigungen von aufruft 0666
.
Zusammenfassen
- Dateien erhalten keine Ausführungsberechtigung (maskierend oder effektiv). Es spielt keine Rolle, welche Methode wir verwenden: ACL, umask oder mask & ACL.
- Verzeichnisse können Ausführungsberechtigungen erhalten, dies hängt jedoch davon ab, wie das Maskierungsfeld festgelegt ist.
- Die einzige Möglichkeit, Ausführungsberechtigungen für eine Datei festzulegen, für die ACL-Berechtigungen gelten, besteht darin, sie manuell mit festzulegen
chmod
.
Verweise
mask::rw-
. Aber das ist nicht wirklich deine Frage, richtig?