Ich habe dieses Beispiel mit dem Titel:ACL und MASK in Linux gefunden. In diesem Artikel werden die folgenden Beispiele demonstriert, die meiner Meinung nach helfen zu verstehen, wie ACLs und umask
miteinander interagieren.
Hintergrund
Wenn eine Datei auf einem Linux-System erstellt wird, werden die Standardberechtigungen 0666
angewendet werden, während beim Erstellen eines Verzeichnisses die Standardberechtigungen 0777
verwendet werden angewendet werden.
Beispiel 1 - Datei
Angenommen, wir setzen unsere umask auf 077 und berühren eine Datei. Wir können strace
verwenden um 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 sehen wir, dass das System open()
aufruft erfolgt mit den Berechtigungen 0666, jedoch wenn der umask 077
vom Kernel angewendet werden, werden folgende Berechtigungen entfernt (---rwxrwx
) und wir haben rw-------
übrig auch bekannt als 0600.
Beispiel - 2 Verzeichnis
Dasselbe Konzept kann auf Verzeichnisse angewendet werden, außer dass die Standardberechtigungen nicht 0666, sondern 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
Dieses Mal verwenden wir den mkdir
Befehl. Die mkdir
Befehl rief dann den Systemaufruf mkdir()
auf . Im obigen Beispiel sehen wir, dass die mkdir
Befehl namens mkdir()
Systemaufruf mit den Standardberechtigungen 0777
(rwxrwxrwx
). Diesmal mit einer umask von 022
Die folgenden Berechtigungen werden entfernt (----w--w-
), also bleibt 0755 (rwxr-xr-x
). ), wenn die Verzeichnisse erstellt wurden.
Beispiel 3 (Anwenden der Standard-ACL)
Lassen Sie uns nun ein Verzeichnis erstellen und demonstrieren, 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
Lassen Sie uns nun die Datei aclfile
erstellen :
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Holen Sie sich jetzt die Berechtigungen der neu erstellten Datei:
$ 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
genau wie beim Erstellen des Verzeichnisses?
Überprüfen Sie den luvly
log-Datei, um zu sehen, 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. Mit der Maske auf rwx
eingestellt Wenn das Verzeichnis erstellt wurde, würden Sie dasselbe Verhalten für die Erstellung der Datei erwarten, aber es funktioniert nicht so. Das liegt daran, dass der Kernel open()
aufruft Funktion mit den Standardberechtigungen von 0666
.
Zusammenfassend
- Dateien erhalten keine Ausführungsberechtigung (maskiert oder wirksam). Egal, welche Methode wir verwenden:ACL, umask oder mask &ACL.
- Verzeichnisse können Ausführungsberechtigungen erhalten, aber es hängt davon ab, wie das Maskierungsfeld eingestellt ist.
- Die einzige Möglichkeit, Ausführungsberechtigungen für eine Datei festzulegen, die unter ACL-Berechtigungen steht, besteht darin, sie manuell mit
chmod
festzulegen .
Referenzen
- acl-Manpage
Aus Sicherheitsgründen lässt das Linux-Betriebssystem keine automatische Erstellung einer Datei mit einem Ausführungsbit zu. Dadurch soll verhindert werden, dass Cyberangreifer Programme in solche Dateien schreiben und ausführen, wenn sie sich Zugriff auf Ihren Server verschaffen. Es ist nur eine Sicherheitsvorkehrung. Sie müssen für immer das Ausführungsbit für Dateien manuell setzen, nachdem Sie sie mit dem Dienstprogramm chmod erstellt haben