umask
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Der Begriff UMASK hat mehrere Bedeutungen:
Er bezeichnet eine vom Benutzer und von der Situation abhängige Voreinstellung, welche bei der Erstellung einer Datei deren Berechtigungen[3] bestimmt.
Er steht für den Befehl umask, mit dem jeder Benutzer seine Voreinstellung anzeigen und für die momentane Situation temporär ändern kann.
Bei der Einrichtung eines neuen Benutzers, bei der Anmeldung eines Benutzers für interaktive Arbeit, bei der nicht-interaktiven Ausführung eines Programms verwendet das System jeweils möglicherweise unterschiedliche Vorgaben für die Voreinstellung. Die Ergebnisse können auch je nach Art der interaktiven Anmeldung (am direkt angeschlossen Terminal im Text- oder GUI-Modus, per SSH, FTP, SMB, etc.) unterschiedlich ausfallen und können auch noch durch eigene Konfigurationsdateien des Benutzers verändert werden.
Dieser Artikel verwendet zur Unterscheidung der verschiedenen Bedeutungen im Artikeltext außerhalb von Zitaten von Befehlen und Konfigurationsangaben in Dateien diese Schreibweisen:
UMASK steht für den Begriff in allen seinen Bedeutungen.
UMASK
steht für einen konkreten Wert der Voreinstellung.umask meint den Befehl zur Anzeige und Veränderung von
UMASK
.
Der Wert UMASK
bestimmt die Arbeitsweise mit dem System in allen Anwendungsweisen, sowohl beim Arbeiten auf der Kommandozeile wie auch mit graphischen Desktop-Oberflächen. Die zweckmäßige Wahl des Wertes ist auch ein Baustein für die Systemsicherheit, weshalb etliche als DAEMON laufende Programme diesen Wert für ihre speziellen Bedürfnisse einstellen oder dem Systemverwalter seine Konfiguration ermöglichen.
Installation¶
Es ist nichts zu installieren, weil umask ein in jeder Shell eingebauter Befehl ist.
Bedienung des Befehls umask¶
Die folgende Beschreibung bezieht sich auf die bei Ubuntu für Benutzer standardmäßig verwendete Shell bash. Andere Shells können für diesen Befehl anders wirkende oder weitere Optionen haben.
Wert anzeigen¶
Der Befehl umask[1] kennt nur die beiden Optionen -S
und -p
, die auch kombiniert werden dürfen oder fehlen können. Es gibt also diese Aufrufmöglichkeiten, jeweils mit Beispielausgabe:
umask
0002
umask -S
u=rwx,g=rwx,o=rx
umask -p
umask 0002
umask -S -p
umask -S u=rwx,g=rwx,o=rx
Der nackte Befehlsname ohne Optionen gibt den Wert als vierstellige Oktalzahl aus, mit der Option -S
erhält man eine verbale Beschreibung.
Mit der Option -p
erhält man eine Ausgabe, die so direkt als Befehl verwendet werden könnte, um die UMASK
wieder auf den momentan geltenden Wert zu setzen. Wenn man den Wert verändern möchte, könnte man eine solche Ausgaben in einer Variablen speichern, um den Wert später bequem wieder auf den ursprünglichen Wert zurück setzen zu können.
Warum im Beispiel die beiden Schreibweisen 0002
und u=rwx,g=rwx,o=rx
das gleiche bedeuten, wird im Abschnitt Wirkungsweise erklärt.
Wert setzen¶
Wenn man einen neuen Wert (hier beispielhaft: 0077
) setzen möchte, gibt man einfach den neuen Wert an:
umask 0077
umask -S u=rwx,g=,o=
Führende Nullen beim Wert darf man weglassen. Die Option -p
ist hier sinnlos.
Wirkungsweise¶
Der Wert UMASK
entspricht nicht direkt den Rechten[3], die bei einer neuen Datei gesetzt werden. Es werden vielmehr die Berechtigungen maskiert bzw. entfernt, welche in UMASK
gesetzt sind, und es werden niemals über UMASK
Berechtigungen hinzugefügt. Die resultierenden Berechtigungen für neue Dateien unterscheiden sich außerdem je nach Klasse der Datei. In der Tabelle wird für das Beispiel der Wert UMASK=0002
verwendet:
Erlaubte Zugriffsarten bei neu angelegten Dateien | |||
Klasse | Formel | Beispiel | Bemerkung |
Ordner | NOT UMASK AND 0777 | 0775 | Sonderrechte SUID , SGID und Sticky können nie über UMASK gesetzt werden. |
reguläre Dateien | NOT UMASK AND 0666 | 0664 | Ausführungsrechte können bei regulären Dateien nicht über UMASK gesetzt werden. |
Symbolische Links | 0777 | UMASK wird gar nicht berücksichtigt. |
Zu den logischen Funktion NOT, AND, usw. siehe Logische_Verknüpfung. Die Oktalzahlen werden bitweise miteinander verknüpft.
In der vierstelligen Oktalzahl UMASK
entsprechen die Bits in der ersten Stelle von links den Sonderrechten SUID
, SGID
und Sticky, welche aber in einer UMASK
nicht verwendbar sind. In der zweiten Stelle stehen die Berechtigungen Ausführen/Durchsuchen (x
= 1), Schreiben (w
= 2) und Lesen (r
= 4) für den Besitzer der Datei, in der dritten Stelle entsprechend für die Mitglieder in der Hauptgruppe des Besitzers und in der letzten Stelle für alle anderen Benutzer außer root. Root[4] darf sowieso immer alles.
Lese die ausführliche Darstellung der Dateirechte im Artikel Rechte.
Konfiguration¶
Es gibt keine allgemein gültige Empfehlung für einen Standardwert von UMASK
, sondern dieser ist entsprechend der Aufgabenstellung des Systems und den Ansprüchen dessen Benutzer von Systemverwalter mit Sachverstand zu wählen.
Beispiele gängiger Werte für UMASK | ||
UMASK | Verwendung | hierzu passende Sicherheitspolitik |
0022 | Debian, Ubuntu bis 11.04 | Jeder Benutzer (inkl. im System Unbekannte!) darf fremde Benutzerverzeichnisse durchsuchen und dort Dateien lesen und ausführen, aber nicht in diese schreiben. |
0002 | Ubuntu ab 11.10 | Jeder Benutzer (inkl. im System Unbekannte!) darf fremde Benutzerverzeichnisse durchsuchen und dort Dateien lesen und ausführen, aber nur Mitglieder in der Hauptgruppe eines Benutzers dürfen in dessen Dateien auch schreiben. |
0077 | wechselnde Benutzer | Fremde Benutzerverzeichnisse dürfen nicht durchsucht, die dort enthaltenen Dateien weder gelesen, noch ausgeführt, noch darf in diese geschrieben werden. |
0027 | Benutzer, welche Mitglied in der Hauptgruppe eines Benutzers sind, dürfen dessen Verzeichnisse und Datei lesen und ausführen, aber nicht in diese schreiben. Fremde dürfen diese Ordner nicht durchsucht, die dort enthaltenen Dateien weder lesen, noch ausführen, noch darf in diese geschrieben werden. | |
0007 | Benutzer, welche Mitglied in der Hauptgruppe eines Benutzers sind, dürfen dessen Verzeichnisse und Dateien lesen, ausführen und in diese schreiben. Fremde dürfen gar nichts. |
Bei Desktop-Rechnern, welche immer nur von einem und immer demselben Benutzer verwendet werden, kann bedenkenlos der für Debian-Systeme klassische Wert 0022
verwendet werden oder auch 0002
. Bei Servern und auch bei Desktop-Systemen, an denen sich mehrere Benutzer gleichzeitig oder wechselweise anmelden, schotten die anderen Beispiele die Benutzer voneinander ab.
Der Vorgabewert für UMASK
wird bei Ubuntu (und fast allen Linux-Systemen) bei der Anmeldung von (Pluggable Authenfication Moduls) gesetzt. PAM benutzt dafür sein Modul pam_umask, dieses bezieht den benutzerspezifischen Wert aus einer der folgenden Quellen in der genannten Reihenfolge, dabei gewinnt der erste gefundene Wert:
Das GECOS-Feld in der Benutzerdatenbank: Dies ist normalerweise und auch Vorgabe bei Ubuntu die Datei /etc/passwd. Diese Methode wird bei Ubuntu standardmäßig nicht eingesetzt, kann aber vom Systemverwalter leicht verwendet werden. Siehe weitere Details.
⚓︎Ein explizit beim Aufruf des Moduls übergebenes Argument: Diese Methode wird bei Ubuntu standardmäßig nicht eingesetzt; ihre Verwendung erfordert eine Veränderung der Regeln für PAM im Ordner /etc/pam.d/. Siehe Variante 2
Ein in der Datei /etc/login.defs mit dem Schlüsselwort
UMASK
gesetzter Wert. der aber in Abhängigkeit vom SchlüsselwortUSERGROUPS_ENAB
noch verändert wird. Dies ist bei Ubuntu der Fall. Siehe Variante 3Ein Eintrag in der Datei /etc/default/login, die bei Ubuntu standardmäßig gar nicht vorhanden ist.
Der nach einer dieser Methoden durch PAM gesetzter Wert kann aber noch durch Initialisierungsdateien des Desktops oder für Shells überschrieben werden, beispielsweise /etc/profile, /etc/bash.bashrc, ~/.profile oder ~/.bashrc; aktuelle Ubuntu-Systeme machen das aber standardmäßig nicht mehr.
Vorgabewert für bestimmten Benutzer setzen¶
Am einfachsten geht es mit chfn über das GECOS-Feld, dies erfordert aber die Superkräfte[4] des Systemverwalters root:
sudo chfn -o umask=XXXX BENUTZER
Hier sind natürlich noch die neue UMASK
an der Stelle XXXX und der Anmeldename des Benutzers an der Stelle BENUTZER einzusetzen. Die Änderung wird wirksam bei der nächsten Anmeldung des Benutzers.
Die aktuelle Einstellung kann mit diesem Befehl abgefragt werden:
getent passwd BENUTZER
Hinweis:
Alternativ kann auch jeder Benutzer ohne Superkräfte für sich selbst UMASK
in der Datei ~/.profile setzen. Die alte Methode ist dort noch als Kommentar enthalten und muss nur wieder aktiviert werden. Es ist aber nicht sicher, ob GUI-Programme auch den hier eingestellten Wert beachten, weshalb man besser wie oben beschrieben den Systemverwalter um Anwendung der Superkräfte bittet.
Vorgabewert für alle Benutzer setzen¶
Bei wenigen Benutzern kann man die bereits vorgestellte Methode einfach für alle Benutzer anwenden.
Wenn dies nicht praktikabel erscheint, kann ein Eingriff in die von PAM verwendeten Systemdateien gemäß Variante 2 oder 3 sinnvoll sein. Man lese dazu die jeweils relevante Manpage und die Kommentare in der Datei /etc/login.defs:
man pam_umask man login.defs less /etc/login.defs
Auch bei diesen Methoden muss man die Dateiberechtigungen der bereits existierenden Dateien anpassen.
Variante 2¶
Bei der standardmäßig von Ubuntu nicht verwendeten Variante 2 muss man die PAM-Regeln anpassen:
grep -r pam_umask.so /etc/pam.*
Beispielausgabe:
/etc/pam.d/common-session-noninteractive:session optional pam_umask.so /etc/pam.d/common-session:session optional pam_umask.so
In der Datei /etc/pam.d/common-session (und ggf. auch in den weiteren angezeigten Dateien) sind betreffende Zeilen abzuändern mit der gewünschten Oktalzahl für UMASK
:
pam_umask.so
→pam_umask.so umask=UMASK
Variante 3¶
Bei der standardmäßig von Ubuntu verwendeten Variante 3 muss die Datei /etc/login.defs angepasst werden.
Achtung!
Die Datei /etc/login.defs wird nicht nur von pam_umask, sondern auch von anderen Programmen verwendet; bei ihrer Bearbeitung sollte man mit Überraschungen rechnen!
Die relevanten Stellen findet man mit diesem Befehl:
grep -e ^UMASK -e ^USER -e ^HOME /etc/login.defs
Beispielausgabe bei Ubuntu 22.04:
UMASK 022 USERGROUPS_ENAB yes HOME_MODE 750
Der hier bei UMASK
angegebene Wert wird nur dann direkt verwendet, wenn individuelle Benutzergruppen per USERGROUPS_ENAB
nicht aktiviert wurden. Bei aktuellen Ubuntu-Versionen ist dies jedoch der Fall, welches zu einer Löschung der Gruppenbits beim in dieser Datei angegebenen Wert für UMASK
führt. Damit erhält man statt 022
den Wert 002
, welchen dann pam_umask verwendet.
Für die Benutzerverzeichnisse (aber nicht für die in diesen angelegten Dateien!) neu angelegter Benutzer werden jedoch direkt die mit HOME_MODE
bezeichneten Berechtigungen verwendet, lediglich wenn diese Option fehlt – was vor 21.04 zutrifft – wird der Wert für HOME_MODE
aus dem Wert in dieser Datei für UMASK
ermittelt.
Variante 4¶
Eine Vorgabe von UMASK
über die Datei /etc/default/login funktioniert bei Ubuntu nicht. Selbst wenn man diese normalerweise fehlende Datei anlegt, wird sie erst dann von pam_umask untersucht, wenn man aus der Datei /etc/login.defs die relevanten Informationen entfernt – wovor wegen der damit verbundenen Nebeneffekte ausdrücklich widerraten wird!
Links¶
PAM – Pluggable Authenfication Moduls
Rechte – Dateiberechtigungen
The Open Group Base Specification 🇬🇧 – POSIX Sicht zu umask