Wie wirkt sich umask auf ACLs aus?

11

Kann mir jemand erklären, wie sich dies umaskauf die Standardmaske neu erstellter Dateien auswirkt, wenn ACLs aktiviert sind? Gibt es eine Dokumentation dazu?

Beispiel:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

Ich würde erwarten mask:rwx. Eigentlich bekomme ich nach Einstellung umaskauf zB 027das erwartete Verhalten.

Jofel
quelle
Mit einer Umask von 077 erhalten Sie eine mask::rw-. Aber das ist nicht wirklich deine Frage, richtig?
slm
@slm Dies ist ein Teil meiner Frage. Ich möchte wissen, wie die Maske neuer Dateien von der Umask abhängt. Ich war ziemlich überrascht, dass ich mit 077 bekomme mask::rw-und nicht mask::rwxwelche die Standardmaske des Verzeichnisses war.
Jofel
OK, ich aktualisiere meine Antwort jetzt mit Beispielen, die helfen sollen, dies zu klären. Gib mir ein paar Minuten.
slm
Diese Frage ist eng miteinander verbunden.
Jofel

Antworten:

10

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 umaskmiteinander zu interagieren.

Hintergrund

Wenn eine Datei auf einem Linux-System erstellt wird, werden die Standardberechtigungen 0666angewendet, während beim Erstellen eines Verzeichnisses die Standardberechtigungen 0777angewendet werden.

Beispiel 1 - Datei

Angenommen, wir setzen unsere Umask auf 077 und berühren eine Datei. Wir können verwenden, um stracezu 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 077dann 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 mkdirBefehl. Der mkdirBefehl rief dann den Systemaufruf auf mkdir(). Im obigen Beispiel sehen wir, dass der mkdirBefehl den mkdir()Systemaufruf mit den Standardberechtigungen 0777( rwxrwxrwx) aufgerufen hat . Dieses Mal wird eine Umask 022der folgenden Berechtigungen entfernt ( ----w--w-), sodass beim Erstellen rwxr-xr-xder 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::rwxso, als ob das Verzeichnis erstellt wurde?

Überprüfen Sie die luvlyProtokolldatei, 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. rwxWenn 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

slm
quelle
@jofel - lass es mich wissen, wenn das Sinn macht.
slm
@sIm vielen Dank für Ihre ausführliche Antwort. Es bringt mich meinem eigentlichen Problem näher: Die Gruppenberechtigung im chmod-Systemaufruf wirkt sich auf die Maske der Datei aus ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx). Vielleicht sollte ich eine neue Frage dazu stellen ...
Jofel
@jofel - ja das klingt nach einer anderen Frage.
slm
@sIm und es wurde bereits hier beantwortet .
Jofel
"Wenn eine Datei auf einem Linux-System erstellt wird, werden die Standardberechtigungen 0666 angewendet ..." - nun, das ist nicht genau richtig, da es an der Erstellungsanwendung liegt.
Ilkkachu
2

Aus Sicherheitsgründen erlaubt das Linux-Betriebssystem nicht die automatische Erstellung einer Datei mit einem Ausführungsbit. Dies soll verhindern, dass Cyber-Angreifer Programme in solche Dateien schreiben und ausführen, wenn sie Zugriff auf Ihren Server erhalten. Es ist nur eine Sicherheitsmaßnahme. Sie müssen das Ausführungsbit für Dateien für immer manuell setzen, nachdem Sie sie mit dem Dienstprogramm chmod erstellt haben

Arni
quelle