7.6. Was ist die umask? Wie kann ich sie festlegen?

Keywords: umask | Rechte | Verzeichnis

7.6.1

Die umask legt fest, welche Rechte eine neu angelegte Datei bekommt oder, besser gesagt, nicht bekommt.

Man kann sich die aktuelle umask in numerischer und in "Textform" anzeigen lassen:

user@host:~ $ umask
0027
user@host:~ $ umask -S
u=rwx,g=rx,o=

Die Zahlenfolge der umask erklärt sich wie folgt:

0 0 2 7
| | | '--> Rechte für Andere (o, others)
| | '--> Rechte für die Gruppe (g, group)
| '--> Rechte für den Dateieigentümer (u, user)
'--> Spezialrechte (SUID, SGID, sticky) - bei umask immer 0

Die Zahl für Eigentümer, Gruppe und Andere errechnet sich aus der Summe von:

  • 1 - Ausführrecht (x)
  • 2 - Schreibrecht (w)
  • 4 - Leserecht (r)

Die umask 0027 bedeutet also:

  • alle Rechte für den Dateieigentümer
  • keine Schreibrechte (aber Lese- und Ausführrechte) für die Gruppe
  • Keine Rechte für Andere

Festlegen kann man die umask mit dem Befehl umask 0027, wobei der Zahlenwert natürlich variieren kann. Eine so festgelegte umask gilt immer für die aktuelle Shell sowie alle Kindprozesse. Setzt man die umask beispielsweise in ~/.profile, gilt sie für die gesamte Dauer des Logins und für alle in dieser Zeit gestarteten Programme. Legt man die umask in einem xterm fest, gilt sie nur für die in diesem xterm gestartete Programme.

Will man die umask nur für ein bestimmtes Verzeichnis festlegen (z. B. Gruppenschreibrecht für gemeinsam genutzte Dateien), kommt man mit dem umask-Befehl recht schnell ins Schwitzen, da er immer für alle Verzeichnisse gleichzeitig gilt.

Die Lösung dieses Problems ist das Setzen einer default ACL. Der folgende Befehlsaufruf legt z. B. fest, dass in /home/austausch/ alle Dateien mit allen Rechten (einschließlich Schreibrecht) für die Gruppe erzeugt werden:

setfacl -d -m mask:007 /home/austausch/

Sinnvollerweise sollte man für das betroffene Verzeichnis auch das SGID-Bit setzen und per chgrp die richtige Gruppe festlegen:

chgrp das_team /home/austausch/
chmod g+s /home/austausch/

Falls /home/austausch/ bereits Unterverzeichnisse enthält, muss man natürlich deren Rechte ebenfalls anpassen. Tipp: alle genannten Befehle kennen die Option -R

Ab KDE 3.5 kann man ACLs auch über den Dialog "Dateieigenschaften" festlegen.

Falls man auf das fragliche Verzeichnis ausschließlich per Samba zugreift, kann man auch in der Konfiguration des Samba-Servers eine passende directory mask und create mask für das betroffene Share festlegen (Vorsicht, Samba verwendet nicht die invertierte Rechtemaske von umask!). Auch die Option force group ist in diesem Zusammenhang empfehlenswert. Weitere Informationen zur Samba-Konfiguration finden sich unter den genannten Stichworten in man smb.conf

(cboltz)