Wozu dient der Befehl eigentlich umask
im *nix-Betriebssystem?
Wie funktioniert er und wie nützlich ist er? Beispiel:
$ umask 022
Vielen Dank schon mal
Antwort1
umask
ist 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 umask
Sie werden möglicherweise auf die Dokumentation des umask()
Systemaufrufs oder des umask
integrierten 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 umask
Dienstprogramm 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 umask
aller 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 777
0777 gleich 511 oder 0b111_111_111 ist, werden Dateien ohne Berechtigung erstellt, da alle 9¹ Bits der Unix-Dateiberechtigungen (3 ( r
Lesen, w
Schreiben, Ausführen x
) fürBenutzer, 3 fürGruppe, 3 fürandere) gelöscht.
Die symbolische Form gibt an, welche Bitsnichtgelöscht werden. Das umask 777
wäre auch der Fall umask u=,g=,o=
.
Im Allgemeinen möchten Sie, dass zumindest die Umask das w
Bit für o
Thers enthält, da Sie nicht möchten, dass die von Ihnen erstellten Dateien für alle beschreibbar ( umask 002
oder umask u=rwx,g=rwx,o=rx
) sind.
Sie möchten wahrscheinlich, dass das w
Bit für g
die 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 022
oder umask u=rwx,g=rx,o=rx
.
Ein umask 077
oder 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 umask
Bits für den u
Ser 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 ( ) umask
ist , 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).022
u=rwx,g=rx,o=rx
0644
u=rw,g=r,o=r
fchmod()
chmod()
umask
ohne Argumente gibt die aktuelle Benutzermaske in Oktalform aus. umask -S
In einigen Shells wird sie in symbolischer Form ausgegeben. umask -p
in bash
oder fish
gibt 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 t
Bit 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, umask
und der umask()
Systemaufruf ignoriert sie sowieso.