ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

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:

  1. Er bezeichnet eine vom Benutzer und von der Situation abhängige Voreinstellung, welche bei der Erstellung einer Datei deren Berechtigungen[3] bestimmt.

  2. Er steht für den Befehl umask, mit dem jeder Benutzer seine Voreinstellung anzeigen und für die momentane Situation temporär ändern kann.

  3. 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:

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. Die resultierenden Berechtigungen für neue Dateien sind also:
erlaubte Zugriffsarten = alle Zugriffsarten XOR UMASK
Die beiden Oktalzahlen werden bitweise miteinander verknüpft. Der nicht veränderbare Standardwert für „alle Zugriffsarten“ ist 0666 für reguläre Dateien und 0777 für Ordner. Zur logischen Funktion XOR siehe Logische_Verknüpfung. Somit ergibt sich beispielsweise mit UMASK=0002:
erlaubte Zugriffsarten für reguläre Dateien = 0666 XOR 0002 = 0664
erlaubte Zugriffsarten für Ordner = 0777 XOR 0002 = 0775

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:

  1. 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.

  2. ⚓︎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

  3. Ein in der Datei /etc/login.defs mit dem Schlüsselwort UMASK gesetzter Wert. der aber in Abhängigkeit vom Schlüsselwort USERGROUPS_ENAB noch verändert wird. Dies ist bei Ubuntu der Fall. Siehe Variante 3

  4. Ein 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:

Beachte: Diese Methode - und auch jede im folgenden beschriebene – ändert natürlich nicht die Dateiberechtigungen für bereits bestehende Dateien! Zur Anpassung der bestehenden Datenbestände an die neue Sicherheitspolitik kann der Benutzer selbst die Programme find und chmod einsetzen[1][2][3].

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.sopam_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!

Diese Revision wurde am 30. Januar 2023 18:10 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Desktop, Sicherheit, Shell