Kann mir jemand erklären, wie sich dies umask
auf 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 umask
auf zB 027
das erwartete Verhalten.
linux
permissions
posix
acl
Jofel
quelle
quelle
mask::rw-
. Aber das ist nicht wirklich deine Frage, richtig?mask::rw-
und nichtmask::rwx
welche die Standardmaske des Verzeichnisses war.Antworten:
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 Standardberechtigungen0777
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:In diesem Beispiel können wir sehen, dass der Systemaufruf
open()
mit den Berechtigungen 0666 erfolgt. Wenn dieumask 077
dann jedoch vom Kernel angewendet wird, werden die folgenden Berechtigungen entfernt (---rwxrwx
) und wir bleiben mitrw-------
aka 0600 übrig .Beispiel - 2 Verzeichnis
Das gleiche Konzept kann auf Verzeichnisse angewendet werden, außer dass anstelle der Standardberechtigungen 0666 0777 sind.
Diesmal verwenden wir den
mkdir
Befehl. Dermkdir
Befehl rief dann den Systemaufruf aufmkdir()
. Im obigen Beispiel sehen wir, dass dermkdir
Befehl denmkdir()
Systemaufruf mit den Standardberechtigungen0777
(rwxrwxrwx
) aufgerufen hat . Dieses Mal wird eine Umask022
der folgenden Berechtigungen entfernt (----w--w-
), sodass beim Erstellenrwxr-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.
Jetzt erstellen wir die Datei
aclfile
:Erhalten Sie jetzt Berechtigungen für neu erstellte Dateien:
Beachten Sie die Maske ,
mask::rw-
. Warum ist es nichtmask::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: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 dieopen()
Funktion mit den Standardberechtigungen von aufruft0666
.Zusammenfassen
chmod
.Verweise
quelle
chmod("file",0760)
->mask:rw
,chmod("file",0770)
->mask:rwx
). Vielleicht sollte ich eine neue Frage dazu stellen ...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
quelle