Wozu dient der Befehl umask?

Wozu dient der Befehl umask?

Wozu dient der Befehl eigentlich umaskim *nix-Betriebssystem?
Wie funktioniert er und wie nützlich ist er? Beispiel:

$ umask 022

Vielen Dank schon mal

Antwort1

umaskist ein integrierter Befehl der meisten Shells, der lediglich eine Schnittstelle zum umask()Systemaufruf darstellt. Die Beschreibung finden Sie in der Dokumentation Ihrer Shell (Vorsicht, man umaskSie werden möglicherweise auf die Dokumentation des umask()Systemaufrufs oder des umaskintegrierten Befehls einer anderen Shell als Ihrer eigenen verwiesen).

Die Benutzermaske ist ein Attribut eines Prozesses (das vom übergeordneten Prozess an die untergeordneten Prozesse vererbt und bei der Befehlsausführung beibehalten wird), das bestimmt, welche Berechtigungen Dateien bei der Erstellung standardmäßig automatisch erteilt werden.

Mit dem umaskDienstprogramm können Sie die Benutzermaske des Shell-Prozesses festlegen, um die Berechtigungen der Dateien zu steuern, die von Befehlen erstellt werden, die innerhalb der Shell-Sitzung ausgeführt werden.

Die umaskaller Shells nehmen die Maske als Oktalzahl, während sie auf einigen Shells, einschließlich aller POSIX-Shells, auch in einer symbolischen Form angegeben werden kann, wie z. B. für chmod.

Die Maske bestimmt, welche Teile der Berechtigungengelöschtwenn die Datei erstellt wird. Wenn beispielsweise umask 7770777 gleich 511 oder 0b111_111_111 ist, werden Dateien ohne Berechtigung erstellt, da alle 9¹ Bits der Unix-Dateiberechtigungen (3 ( rLesen, wSchreiben, Ausführen x) fürBenutzer, 3 fürGruppe, 3 fürandere) gelöscht.

Die symbolische Form gibt an, welche Bitsnichtgelöscht werden. Das umask 777wäre auch der Fall umask u=,g=,o=.

Im Allgemeinen möchten Sie, dass zumindest die Umask das wBit für oThers enthält, da Sie nicht möchten, dass die von Ihnen erstellten Dateien für alle beschreibbar ( umask 002oder umask u=rwx,g=rwx,o=rx) sind.

Sie möchten wahrscheinlich, dass das wBit für gdie Gruppe ebenfalls gesetzt wird, zumindest auf Systemen, auf denen die primäre Gruppe des Benutzers keine persönliche ist (mit anderen Benutzern geteilt wird): umask 022oder umask u=rwx,g=rx,o=rx.

Ein umask 077oder umask u=rwx,g=,o=stellt sicher, dass alle von Ihnen erstellten Dateien privat sind (für niemanden sonst zugänglich). Sie sehen das oft in Skripten, die temporäre Dateien erstellen, manchmal in einer Subshell wie in:

(umask 077; echo test > "$tmpfile")

Das Setzen von umaskBits für den uSer kann Probleme verursachen, da Sie möglicherweise Dateien erstellen, die nicht einmal Sie öffnen können.

Beachten Sie, dass die Benutzermaske angewendet wirdoben draufder Berechtigungen, die von Anwendungen angefordert werden, wenn sie open()oder creat()eine Datei. Wenn sie dies tun, creat("file", 0666)während ( ) umaskist , werden die Berechtigungen am Ende ( ) sein. Anwendungen können danach immer noch oder aufrufen, um die Berechtigungen nach Belieben zu ändern (und die Umask hat dort keine Auswirkung).022u=rwx,g=rx,o=rx0644u=rw,g=r,o=rfchmod()chmod()

umaskohne Argumente gibt die aktuelle Benutzermaske in Oktalform aus. umask -SIn einigen Shells wird sie in symbolischer Form ausgegeben. umask -pin bashoder fishgibt Shell-Code aus, der nach der Interpretation dieselbe Benutzermaske festlegen würde.

Damit können Sie die vorherige Umask wiederherstellen, nachdem Sie sie geändert haben:

previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"

¹ Technisch gesehen gibt es 12 Berechtigungsbits, wobei die 3 zusätzlichen Bits spezielle Bits sind, die je nach Dateityp für verschiedene Zwecke verwendet und manchmal mit anderen Berechtigungsbits kombiniert werden (wie die Setuid- und Setgid-Bits für ausführbare Dateien, das tBit für Verzeichnisse ...). Auf einigen Systemen werden diese Bits ignoriert, wenn sie in open()/ angefordert werden creat(), und sowieso, wenn sie von Anwendungen festgelegt werden (im Allgemeinen eher über chmod()nachträglich). Dies hat einen guten Grund. Daher ist es im Allgemeinen nicht sinnvoll, sie in / aufzunehmen, umaskund der umask()Systemaufruf ignoriert sie sowieso.

verwandte Informationen