Was ist „umask“ und wie funktioniert es?

190

Ich glaube, dass umask etwas ist, das Dateiberechtigungen kontrolliert , aber es nicht vollständig versteht.

Nach dem Ausführen umask 0644in einem Terminal kann ich die mit dem Befehlszeilentexteditor erstellten Dateien nicht lesen nano. Ich habe festgestellt, dass die Berechtigungen für diese Datei 0022anstelle der Standardeinstellung festgelegt sind 0755.

Wie funktioniert umask? Ich dachte, ich könnte einfach jede Ziffer in der umask von entfernen 0777, 7 - 6 = 1und 7 - 4 = 3so erwarte ich, dass dies die Berechtigungen sind 0133, aber anscheinend ist dies nicht der Fall.

  1. Was ist Umask genau? Erkläre es mir, als wäre ich ein "Linux-Neuling"
  2. Wie berechne ich mit umask?
  3. Was sind Use Cases für umask?
Lekensteyn
quelle
app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
Grabantot

Antworten:

143

Die umask fungiert als eine Reihe von Berechtigungen, die Anwendungen nicht für Dateien festlegen können. Es ist eine Erstellungsmaske für den Dateimodus für Prozesse und kann nicht für Verzeichnisse selbst festgelegt werden. Die meisten Anwendungen würden keine Dateien mit festgelegten Ausführungsberechtigungen erstellen, daher hätten sie einen Standardwert von 666, der dann von der umask geändert wird.

Da Sie die umask so eingestellt haben, dass die Lese- / Schreibbits für den Eigentümer und die Lesebits für andere entfernt werden, würde ein Standard wie 777in Anwendungen zu Dateiberechtigungen führen 133. Dies würde bedeuten, dass Sie (und andere) die Datei ausführen könnten und andere in der Lage wären, darauf zu schreiben.

Wenn Sie möchten, dass Dateien nur vom Eigentümer gelesen, geschrieben oder ausgeführt werden, sollten Sie eine umask verwenden 077, um diese Berechtigungen für die Gruppe und andere zu deaktivieren .

Im Gegensatz dazu macht eine umask von 000neu erstellte Verzeichnisse für alle lesbar, beschreibbar und abbaubar (die Berechtigungen sind 777). Eine solche umask ist sehr unsicher und Sie sollten die umask niemals auf einstellen 000.

Die Standardeinstellung für umask unter Ubuntu war, 022was bedeutet, dass neu erstellte Dateien von jedem gelesen werden können, aber nur vom Eigentümer geschrieben werden können:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Ab Ubuntu Oneiric (11.10) wurde die Standardeinstellung umask gelockert 002, wodurch der Schreibzugriff auf die Gruppe des Besitzers erweitert wird:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-rw-r-- 1 user user 0 Apr  1 19:15 new-file-name

Umask anzeigen und ändern

Um Ihre aktuelle umask-Einstellung anzuzeigen, öffnen Sie ein Terminal und führen Sie den Befehl aus:

umask

Führen Sie Folgendes aus, um die umask-Einstellung der aktuellen Shell in etwas anderes zu ändern, z. B. 077:

umask 077

Um zu testen, ob diese Einstellung funktioniert oder nicht, können Sie eine neue Datei erstellen (die Dateiberechtigungen einer vorhandenen Datei sind nicht betroffen) und Informationen zur Datei anzeigen. Führen Sie Folgendes aus:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Die umask-Einstellung wird von Prozessen übernommen, die von derselben Shell gestartet wurden. Starten Sie beispielsweise den Texteditor GEdit, indem Sie ihn geditim Terminal ausführen und eine Datei mit gedit speichern. Sie werden feststellen, dass die neu erstellte Datei von der gleichen umask-Einstellung wie im Terminal betroffen ist.

Anwendungsfall: Mehrbenutzersystem

Wenn Sie sich auf einem System befinden, das von mehreren Benutzern gemeinsam genutzt wird, ist es wünschenswert, dass andere Benutzer keine Dateien in Ihrem Ausgangsverzeichnis lesen können. Dafür ist eine umask sehr nützlich. Bearbeiten ~/.profileund fügen Sie eine neue Zeile hinzu mit:

umask 007

Sie müssen sich erneut anmelden, damit diese Änderung in umask ~/.profilewirksam wird. Als Nächstes müssen Sie die vorhandenen Dateiberechtigungen für Dateien in Ihrem Ausgangsverzeichnis ändern, indem Sie das Lese-, Schreib- und Ausführungsbit für die Welt entfernen. Öffne ein Terminal und führe aus:

chmod -R o-rwx ~

Wenn Sie möchten, dass diese umask-Einstellung auf alle Benutzer im System angewendet wird, können Sie die systemweite Profildatei unter bearbeiten /etc/profile.

Ajmitch
quelle
3
Was bedeuten die Ziffern in der Umask? Warum heißt das 777, dass die Gruppe und andere an sie schreiben können, während 077dies nicht möglich ist?
HelloGoodbye
3
Auch Sie sagen , dass , wenn die umask ist 000, wird die Datei Erlaubnis sein 777. Sollte also bei einer Standardmaske von 022nicht die Dateiberechtigung 755entsprechend sein , also -rwxr-xr-xnicht -rw-r--r--?
HelloGoodbye
12
Ich muss zugeben, diese Erklärung hat mich mehr verwirrt als geholfen.
Connel Hooley
8
Beachten Sie, dass Ubuntus Standard-Umask nur einen Monat nach der Veröffentlichung dieser Antwort in 0002 geändert wurde.
Jeff Puckett
7
@HelloGoodbye Wenn die umask ist, werden 000keine Berechtigungen entfernt. Anwendungen mögen touchund nanoerstellen Dateien mit Standard, 666so dass die Dateiberechtigung erhalten bleibt, 666aber eine umask von 022entfernt die Schreibbits für die Gruppe und andere, wird also 666auf 644aka reduziert . -rw-r--r--Überlegen Sie, mkdirwelcher Standarderstellungsmodus 777mit einer umask von 022die Berechtigungen für755
Jeff
38

Neben der guten Diskussion in der akzeptierten Antwort sollten noch einige weitere Punkte hinzugefügt werden umask, die sich auf die Verwaltung ab dem 12.04 beziehen.

Umask und pam_umask

Die Standard-Umask ist jetzt in /etc/login.defsund nicht in /etc/profile, wie der offizielle Hinweis in /etc/profilelautet:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umaskwird im Folgenden kurz erläutert, und es sollte erwähnt werden, dass die Standarddatei, in der der Benutzer seine benutzerdefinierte Umask-Einstellung ablegt, noch vorhanden ist ~/.profile.

Pam_umaskist eines von vielen wichtigen PAM-Modulen , die für den Betrieb von Ubuntu von entscheidender Bedeutung sind (führen Sie diese aus apropos '^pam_', um die Hilfeseiten für die anderen zu finden). In der Manpage für pam_umaskwird darauf hingewiesen , dass

pam_umask ist ein PAM-Modul zum Festlegen der Erstellungsmaske für den Dateimodus der aktuellen Umgebung. Die umask wirkt sich auf die Standardberechtigungen aus, die neu erstellten Dateien zugewiesen werden.

Ein Hinweis zur Standard-Umask

Neue Ordner in $HOMEkönnen mkdirmit den Standardberechtigungen 775 und Dateien touchmit den Standardberechtigungen 664 erstellt werden, auch wenn die Standard-Umask 022 lautet. Dies scheint zunächst widersprüchlich und sollte erklärt werden.

Während die Standard-Umask unter Ubuntu 022 ist, ist dies nicht die ganze Geschichte, da es eine Einstellung gibt /etc/login.defs, die es ermöglicht, dass die Umask für Nicht-Root-Benutzer 002 ist, wenn eine Bedingung erfüllt ist (siehe Auszug unten). /etc/login.defsEnthält bei einer normalen Installation die Einstellung USERGROUPS_ENAB yes. Das ist was

Ermöglicht, dass die umask-Gruppenbits für Nicht-Root-Benutzer mit den Eigentümerbits (Beispiele: 022 -> 002, 077 -> 007) identisch sind, wenn die UID mit der GID und der Benutzername mit der primären identisch sind Gruppenname.

Aus diesem Grund statwird bei der mkdirErstellung eines neuen Ordners auf einem einzelnen Benutzersystem wie meinem folgendes angezeigt (UID und GID sind identisch):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Weitere Informationen finden Sie unter man pam_umaskund auf den Ubuntu-Online-Hilfeseiten .

Alex
quelle
Es sieht so aus, als ob Ihrem zweiten Teil etwas fehlt? (USERGROUP_ENABLE?) +1 für aktualisierte Informationen
Lekensteyn
2
@Lekensteyn Seltsamerweise ist die Einstellung auf /etc/login.defsjeden Fall USERGROUPS_ENAB yesnach dem Überprüfen. Die Syntax dieser Datei ist etwas ungewöhnlich.
Ich habe gerade die Datei und die Quelle überprüft und Sie haben Recht, diese (und einige andere) Einstellungen haben den verwirrenden Namen "_ENAB".
Lekensteyn
33

Das ist ziemlich alt, aber das ist erwähnenswert. Für die Umask berechnen, im Gegensatz zu Dateisystemberechtigungen. Die Oktalmasken werden über das bitweise UND des unären Komplements des Arguments mit bitweisem NICHT berechnet. Die Oktalnotationen lauten wie folgt:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Dann können Sie berechnen, um die richtigen Voraussetzungen für umask festzulegen:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Berechnung der endgültigen Berechtigung für Dateien

Sie können die umask einfach von den Basisberechtigungen abziehen, um die endgültige Berechtigung für die Datei wie folgt zu ermitteln:

666 – 022 = 644
  • Dateibasisberechtigungen: 666
  • Umask-Wert: 022
  • subtrahieren, um die Berechtigungen einer neuen Datei zu erhalten (666-022):644 (rw-r–r–)

Berechnung der endgültigen Berechtigung für Verzeichnisse

Sie können die umask einfach von den Basisberechtigungen abziehen, um die endgültige Berechtigung für das Verzeichnis wie folgt zu ermitteln:

777 – 022 = 755
  • Directory-Basisberechtigungen: 777
  • Umask-Wert: 022
  • Subtrahieren, um die Berechtigungen eines neuen Verzeichnisses zu erhalten (777-022):755 (rwxr-xr-x)
amrx
quelle
3
Ich denke nicht, dass das ist, wie die endgültigen Berechtigungen berechnet werden. Was ist, wenn der Unmask-Wert ist, 077wie würden Sie 666-077in diesem Fall subtrahieren ?
Sufiyan Ghori
5
@SufiyanGhori Barons Erklärung ist für die Dateiberechtigung nicht vollständig. In Ihrem Fall und bei zukünftigen Berechnungen sollten Sie, damit Sie sich leicht erinnern können, daran denken, diese wie folgt zu subtrahieren: 6-0 6-7 6-7 Wenn eines dieser drei Ergebnisse -1 ist, dann sei es 0. Also sind wir haben Endergebnis 600
Huy.PhamNhu
1
@ Huy.PhamNhu Das stimmt auch nicht. Mit einer Basisgenehmigung von 666 und einer Umask von 033 werden Sie mit Sicherheit keine 633 herausbringen.
Maaartinus
7
Nein nein Nein. Sie können die Subtraktion nicht zur Berechnung von umask verwenden (dies funktioniert mit bestimmten Werten, jedoch nicht mit allen). Sie müssen sich die umask als "deaktiviere Bits" vorstellen. Siehe die anderen Antworten von Sufiyan und Wisbucky.
wisbucky
33

Andere antworteten, haben das Konzept des Umasking sehr gut erklärt und warum es erforderlich ist. Lassen Sie mich meine zwei Cent addieren und Ihnen ein mathematisches Beispiel geben, wie die Berechtigungen tatsächlich berechnet werden.

Erstens bedeutet "Maske" nicht "subtrahieren" im arithmetischen Sinne - es ist kein Leihen oder Übertragen beteiligt, zweitens umaskist es eine Maske; Es ist keine zu subtrahierende Zahl.

Drittens schaltet die Maske die Berechtigungsbits aus. Wenn sie bereits ausgeschaltet sind, umaskändert das nichts an der Erlaubnis,

Angenommen, Sie müssen die Maskierung 077des Systems für die Dateien 666und Verzeichnisse aufheben 777.

Der Befehl, den Sie verwenden, lautet:

umask 077

(Demaskierungswert in Binär 000 111 111)

Diese Demaskierung deaktiviert die ersten sechs niedrigstwertigen Bits (LSBs) 1und nimmt keine Änderungen vor, wenn eines davon bereits deaktiviert ist.

So wird die endgültige Erlaubnis berechnet:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Beobachten Sie, wie sich beide 110Werte in geändert haben 000.

Ähnlich,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
Sufiyan Ghori
quelle
7
Das sollte die Antwort sein!
Abdelouahab
@SufiyanGhori Also, wenn umask 177(001 111 111), werden die ersten 7 niedrigstwertigen Bits ausgeschaltet, wenn dies der 1
Fall
das ist richtig @KasunSiyambalapitiya
Sufiyan Ghori
1
so ist die Formelresult = file permission & (!umask)
Eric Hodgins
1
@ EricHodgins: Ja, genau.
Amit Naidu
14

Basiskonzept:

Wenn Sie wie die meisten Menschen sind und nicht verstehen, was zum Teufel "Oktalmasken werden über das bitweise UND des unären Komplements des Arguments mit bitweisem NICHT berechnet" bedeutet, ist hier meine einfache Erklärung:

Überlegen Sie sich zunächst, was eine "Maske" ist. Eine Maske blockiert etwas. Denken Sie an Klebeband. In diesem Fall entspricht umask dem Maskieren von Bändern, um Berechtigungen beim Erstellen einer neuen Datei oder eines neuen Verzeichnisses zu blockieren / deaktivieren.

Die Standardberechtigungen beim Erstellen eines neuen Verzeichnisses sind octal 777 (111 111 111)und eine neue Datei ist octal 666 (110 110 110). Wir setzen die umask so, dass bestimmte Berechtigungen blockiert / deaktiviert werden.

  • Ein Maskenbit 1zum Blockieren / Deaktivieren dieser Berechtigung (Masking Tape über dieses Bit legen).
  • Ein Maskenbit von 0lässt die Erlaubnis durch (kein Maskierungsband über diesem Bit).

Eine octal 022 (000 010 010)Maske bedeutet also, alle anderen Berechtigungen zu deaktivieren group writeund others writezuzulassen.

Berechnung:

Hier ist eine Beispielberechnung für eine neue Datei (Standardberechtigung 666) mit einer 022-Umask:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

So erhalten Sie das Ergebnis von 644, wenn Sie eine neue Datei erstellen.

Einfacher Weg:

Aber wenn inverse Maskenberechnungen Sie nur verwirren, gibt es eine einfachere Möglichkeit, die symbolische Umaskennotation zu verwenden. Wenn Sie diese Methode verwenden, geben Sie nur die Durchgangsbits anstelle der Maskenbits an.

  • umask u=rwx,g=rx,o=rxMittel ermöglichen passieren user rwx, group rx, other rx. Was bedeutet , deaktivieren group w, others w. Wenn Sie diesen Befehl ausführen, überprüfen umaskSie, erhalten Sie 022.
  • umask u=rwx,g=,o=Mittel durchlassen für user rwx. Was bedeutet, dass jeglicher Zugriff für groupund deaktiviert wird others. Wenn Sie diesen Befehl ausführen, überprüfen umaskSie, erhalten Sie 077.

Bonusberechnung:

Wenn Sie wirklich verstehen wollen, was "oktale Umaskierungen über das bitweise UND des unären Komplements des Arguments unter Verwendung von bitweisem NICHT berechnet werden" , finden Sie hier einige logische Tabellen, die Ihnen helfen können, dies zu demonstrieren. Denken Sie daran, ein Maskenbit 1bedeutet Deaktivieren, 0bedeutet Durchreichen.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Wenn Sie die Tabelle mit machen NOT(mask), ist es jetzt nur eine einfache ANDLogiktabelle!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Die Formel dafür lautet also: result = perm AND (NOT mask)

weises Glück
quelle