[[Vorlage(Getestet, general) ]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Programme_starten: Starten von Programmen] [:Rechte:] [:mit Root-Rechten arbeiten:] }}} [[Inhaltsverzeichnis()]] 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. 1. Er steht für den Befehl '''umask''', mit dem jeder Benutzer seine Voreinstellung anzeigen und für die momentane Situation temporär ändern kann. 1. 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:], [:Samba: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 [:Dienste:DAEMON] laufende Programme diesen Wert für ihre speziellen Bedürfnisse einstellen oder dem [:root: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: * [[Vorlage( Befehl, "umask" ) ]] {{{0002 }}} * [[Vorlage( Befehl, "umask -S" ) ]] {{{u=rwx,g=rwx,o=rx }}} * [[Vorlage( Befehl, "umask -p" ) ]] {{{umask 0002 }}} * [[Vorlage( Befehl, "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 Wirkungsweise] erklärt. == Wert setzen == Wenn man einen neuen Wert (hier beispielhaft: `0077`) setzen möchte, gibt man einfach den neuen Wert an: * [[Vorlage( Befehl, "umask 0077" ) ]] * [[Vorlage( Befehl, "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: {{{#!vorlage Tabelle 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 [wikipedia: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. {{{#!vorlage Tabelle Beispiele gängiger Werte für `UMASK` +++ `UMASK` Verwendung hierzu passende Sicherheitspolitik +++ `0022` Debian, [[BR]]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. +++ In dieser Zeile im 2. Feld stehen 2 nicht trennende Leerzeichen (Unicode A0)! `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` <|3:>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 [:PAM:(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 [#Vorgabewert-fuer-bestimmten-Benutzer-setzen weitere Details]. 1. [[Anker(Quelle-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 Variante 2] 1. 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 Variante 3] 1. 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:]: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl getent passwd BENUTZER }}} {{{#!vorlage 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 [#Vorgabewert-fuer-bestimmten-Benutzer-setzen bereits vorgestellte Methode] einfach für alle Benutzer anwenden. Wenn dies nicht praktikabel erscheint, kann ein Eingriff in die von PAM verwendeten Systemdateien [#Quelle-2 gemäß Variante 2 oder 3] sinnvoll sein. Man lese dazu die jeweils relevante [:Manpage:] und die Kommentare in der Datei '''/etc/login.defs''': {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. {{{#!vorlage Warnung 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: {{{#!vorlage 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 * [wikipedia_en:Umask:] * [https://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html The Open Group Base Specification] {en} – POSIX Sicht zu umask #tag: System, Sicherheit, Shell, Desktop