Wie umask funktioniert
Wenn ein Programm eine Datei erstellt, fordert es einen Modus an, fast immer 666 (rw-rw-rw-) für Dateien und 777 für Verzeichnisse. Der Kernel löscht dann jedes Bit, das in der umask des Prozesses gesetzt ist. Mit der üblichen 022 werden die Schreib-Bits für Gruppe und Andere entfernt: Dateien werden 644, Verzeichnisse 755. Mit 077 geht alles für Gruppe und Andere weg: 600 und 700. Die Maske kann Rechte nur entfernen, nie hinzufügen; eine Datei erhält durch die umask nie Ausführen, weil 666 es nie hatte.
Die Arithmetik ist mode & ~umask, ein bitweises UND mit der invertierten Maske, keine Subtraktion, sodass umask 027 auf 666 640 ergibt, nicht 639.
Gängige Werte
| umask | Dateien | Verzeichnisse | Verwendung |
|---|---|---|---|
| 022 | 644 | 755 | Standard auf den meisten Distributionen; Andere können lesen. |
| 002 | 664 | 775 | Debian/Ubuntu für Benutzer mit privater Gruppe; Gruppenmitglieder können schreiben. |
| 077 | 600 | 700 | Standardmäßig privat: Server, Home-Verzeichnisse mit Geheimnissen. |
| 027 | 640 | 750 | Gruppe kann lesen, Andere nichts; übliche Härtungsbasis (CIS). |
Wo sie gesetzt wird
- Shell:
umaskzeigt sie,umask 027setzt sie für die Sitzung; in~/.profileoder/etc/profileeintragen.umask -Szeigt sie symbolisch. - Login:
/etc/login.defs(UMASK) undpam_umasksetzen den Wert, bevor die Shell startet;/etc/profileauf Debian leitet ihn davon ab, ob der Benutzer eine private Gruppe hat. - systemd-Dienste:
UMask=0077im Abschnitt[Service]; Dienste lesen keine Shell-Profile. - cron: Jobs laufen mit
022, unabhängig von den Shell-Einstellungen des Benutzers; im Skript setzen. - Docker: Der Standard des Containers ist
022; im Entrypoint oder mitumaskim Befehl ändern.
Fragen
Warum haben meine neuen Dateien 644, wenn ich 664 will?
Ihre umask ist 022. Setzen Sie umask 002 (und stellen Sie sicher, dass die Gruppe des Verzeichnisses die gewünschte ist, mit dem setgid-Bit auf dem Verzeichnis, damit neue Dateien sie erben).
Beeinflusst umask chmod?
Nein. chmod setzt exakte Bits. umask gilt nur, wenn eine Datei ohne expliziten Modus erstellt wird, was fast immer der Fall ist.
Warum bekommt das Verzeichnis Ausführen, die Datei aber nicht?
Verzeichnisse werden vor der Maske mit 777 erstellt, Dateien mit 666. Ausführen auf einem Verzeichnis heißt „darf es betreten“; Dateien brauchen explizit chmod +x.
Ist eine vierstellige umask anders?
Eine führende 0 (0022) ist nur Oktalschreibweise. Die erste Ziffer würde setuid/setgid/sticky maskieren, was erstellende Prozesse nie anfordern, sie hat also praktisch keine Wirkung.