Frage Was ist "Umask" und wie funktioniert es?


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

Nach dem Rennen umask 0644 in einem TerminalIch kann die Dateien nicht lesen, die ich mit dem Befehlszeilen-Texteditor erstellt habe nano. Ich habe festgestellt, dass die Berechtigungen für diese Datei auf festgelegt sind 0022 anstelle des Standards 0755.

Wie funktioniert die Umask? Ich dachte, ich könnte einfach jede Ziffer in der Umask entfernen 0777, 7 - 6 = 1 und 7 - 4 = 3, also erwarte ich die Berechtigungen 0133aber anscheinend ist das nicht der Fall.

  1. Was genau ist Umask? Erkläre es mir, als wäre ich ein "Linux-Noob"
  2. Wie berechne ich mit umask?
  3. Was sind Anwendungsfälle für Umask?

159
2018-05-22 20:42


Ursprung


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


Antworten:


Die Umask fungiert als eine Gruppe von Berechtigungen, die Anwendungen für Dateien nicht festlegen können. Es ist eine Datei-Modus-Erstellungsmaske für Prozesse und kann nicht für Verzeichnisse selbst eingestellt werden. Die meisten Anwendungen würden keine Dateien mit Ausführungsberechtigungen erstellen, daher hätten sie den Standardwert 666, die dann durch die Umask modifiziert wird.

Wie Sie die Umask gesetzt haben, um die Lese / Schreib-Bits für den Besitzer und die gelesenen Bits für andere zu entfernen, ein Standard wie 777 in Anwendungen würde dazu führen, dass die Dateiberechtigungen sind 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 nicht von irgendjemand außer dem Besitzer gelesen / geschrieben / ausgeführt werden, sollten Sie eine umask wie verwenden 077 um diese Berechtigungen für die Gruppe und andere zu deaktivieren.

Im Gegensatz dazu ein Umask von 000 macht neu erstellte Verzeichnisse lesbar, schreibbar und absteigend für jeden (die Berechtigungen werden sein 777). Solch eine Umask ist sehr unsicher und du solltest die Umask niemals setzen 000.

Die Standard Umask auf Ubuntu ist 022 Dies bedeutet, dass neu erstellte Dateien für alle lesbar sind, aber nur vom Eigentümer beschreibbar sind:

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

Umask anzeigen und ändern

Um Ihre aktuelle Umask-Einstellung anzuzeigen, Öffne ein Terminal und führe den Befehl aus:

umask

Um die Umask-Einstellung der aktuellen Shell auf etwas anderes zu ändern, z. B. 077, führen Sie Folgendes aus:

umask 077

Um zu testen, ob diese Einstellung funktioniert oder nicht, können Sie eine erstellen Neu Datei (Dateiberechtigungen einer vorhandenen Datei sind nicht betroffen) und zeigen Informationen über die Datei an:

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 ausführen gedit im Terminal und speichern Sie eine Datei mit gedit. Sie werden feststellen, dass die neu erstellte Datei von der gleichen Umask-Einstellung wie im Terminal betroffen ist.

Use Case: Mehrbenutzersystem

Wenn Sie sich auf einem System befinden, das von mehreren Benutzern verwendet wird, ist es wünschenswert, dass andere Dateien in Ihrem Basisverzeichnis nicht lesen können. Dafür ist eine Umask sehr nützlich. Bearbeiten ~/.profile und füge eine neue Zeile hinzu mit:

umask 007

Sie müssen sich erneut für diese Umask-Änderung anmelden ~/.profile wirksam werden. Als Nächstes müssen Sie die vorhandenen Dateiberechtigungen von Dateien in Ihrem Ausgangsverzeichnis ändern, indem Sie das Bit zum Lesen, Schreiben und Ausführen für die Welt entfernen. Öffnen Sie ein Terminal und führen 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.


125
2018-05-22 20:59



Also, was bedeuten die Ziffern in der Umask? Warum tut 777 bedeutet, dass die Gruppe und andere in der Lage sein werden, währenddessen zu schreiben 077 bedeutet, dass sie nicht können? - HelloGoodbye
Du sagst das auch, wenn die Umask ist 000, wird die Dateierlaubnis sein 777. Also mit einer Standardmaske von 022, sollten die Dateiberechtigungen nicht sein 755, d.h. entsprechend -rwxr-xr-xnicht -rw-r--r--? - HelloGoodbye
Ich muss zugeben, diese Erklärung hat mich mehr verwirrt als mir geholfen hat. - Connel Hooley
Hinweis Das Die Umask von Ubuntu wurde auf 0002 geändert nur einen Monat, nachdem diese Antwort gepostet wurde. - Jeff Puckett
@HelloGoodbye wenn die Umask ist 000 dann werden keine Berechtigungen entfernt. Anwendungen wie touch und nano Erstelle Dateien mit Standardeinstellungen 666 Die Dateierlaubnis bleibt also erhalten 666 aber eine Umask von 022 wird die Schreibbits für die Gruppe und andere entfernen, also 666 wird reduziert auf 644 aka -rw-r--r-- Erwägen mkdir welcher Standard-Erstellungsmodus von 777 mit einer Umask von 022 reduziert die Berechtigungen auf 755 - Jeff Puckett


Neben der guten Diskussion in der angenommenen Antwort lohnt es sich, noch einige Punkte hinzuzufügen umask, in Bezug darauf, wie es in 12.04 und später verwaltet wird.

Umask und pam_umask

Die Standard Umask ist jetzt in /etc/login.defs und nicht in /etc/profile, wie der offizielle Hinweis in /etc/profile liest:

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

Pam_umask wird im Folgenden kurz erklärt, und es sollte gesagt werden, dass die Standarddatei für den Benutzer, um seine benutzerdefinierte Umask-Einstellung zu platzieren, immer noch ist ~/.profile.

Pam_umask ist einer von vielen wichtigen PAM-Module Das ist entscheidend für den Betrieb von Ubuntu (run apropos '^pam_' um die Manpages für die anderen zu finden). In dem Manpage zum pam_umask Es wird bemerkt, dass

pam_umask ist ein PAM-Modul, mit dem die Dateimodus-Erstellungsmaske der aktuellen Umgebung eingestellt werden kann. Die Umask beeinflusst die          Standardberechtigungen, die neu erstellten Dateien zugewiesen werden.

Eine Notiz zur Standard Umask

Neue Ordner in $HOME kann erstellt werden von mkdir mit Standard 775 Berechtigungen und Dateien mit erstellt touch mit Standard-664-Berechtigungen, auch wenn die Standard-Umask 022 ist. Dies scheint zunächst widersprüchlich und ist es wert erklärt zu werden.

Während die Standard-Umask auf Ubuntu 022 ist, ist dies nicht die ganze Geschichte, da es eine Einstellung gibt /etc/login.defs das erlaubt die Umask 002 für Nicht-root-Benutzer zu sein, wenn eine Bedingung erfüllt ist (siehe Auszug unten). Bei einer normalen Installation /etc/login.defs enthält die Einstellung USERGROUPS_ENAB yes. Das ist was

Aktiviert die Einstellung der Umask-Gruppen-Bits so, dass sie mit denen von Eigentümer-Bits übereinstimmen    (Beispiele: 022 -> 002, 077 -> 007) für Nicht-Root-Benutzer, wenn die UID ist    Das gleiche wie bei gid, und Benutzername ist derselbe wie der Name der primären Gruppe.

Daher sehen Sie folgendes mit stat wenn ein neuer Ordner mit erstellt wird mkdir auf einem einzelnen Benutzersystem wie meinem (uid und gid sind dasselbe):

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

Weitere Informationen finden Sie unter man pam_umask und das Ubuntu-Hilfeseiten online.


34
2018-04-02 00:16



Sieht dein zweiter Teil etwas aus? (USERGROUP_ENABLE?) +1 für aktualisierte Informationen - Lekensteyn
@Lekensteyn Seltsamerweise die Einstellung in /etc/login.defs ist definitiv USERGROUPS_ENAB yes nachdem ich es überprüft habe. Die Syntax dieser Datei ist etwas ungewöhnlich.
Ich habe nur die Datei und die Quelle überprüft und Sie haben recht, diese (und einige andere) Einstellungen werden verwirrend als "_ENAB" bezeichnet. - Lekensteyn


Das ist ziemlich alt, aber das ist erwähnenswert. Im Gegensatz zu Dateisystemberechtigungen für die Umask zu berechnen. Die oktalen Umasken werden über das bitweise UND des unären Komplements des Arguments unter Verwendung des bitweisen NOT berechnet. Die oktalen Notationen sind 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 umask richtige Voraussetzungen wie:

$ 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

Berechnen der endgültigen Berechtigung für Dateien

Sie können die Umask einfach von den Basisberechtigungen subtrahieren, um die endgültige Berechtigung für die Datei wie folgt zu bestimmen:

666 – 022 = 644
  • Berechtigungen für Dateibasis: 666
  • Umask-Wert: 022
  • Subtrahieren, um Berechtigungen für eine neue Datei zu erhalten (666-022) : 644 (rw-r–r–)

Berechnen der endgültigen Berechtigung für Verzeichnisse

Sie können die Umask einfach von den Basisberechtigungen subtrahieren, um die endgültige Berechtigung für das Verzeichnis wie folgt zu bestimmen:

777 – 022 = 755
  • Verzeichnisbasisberechtigungen: 777
  • Umask-Wert: 022
  • Subtrahieren, um Berechtigungen für ein neues Verzeichnis zu erhalten (777-022) : 755 (rwxr-xr-x)

29
2018-04-06 08:27



Ich denke nicht, dass so die endgültigen Zulassungen berechnet werden, was ist, wenn der Demaskierungswert ist 077 Wie würdest du subtrahieren? 666-077 In diesem Fall ? - Sufiyan Ghori
@SufiyanGhori Barons Erklärung ist nicht vollständig für die Erlaubnis der Dateien. In Ihrem Fall und jede zukünftige Berechnung, um sich leicht zu erinnern, sollten Sie im Auge behalten, sie auf diese Weise zu subtrahieren: 6-0 6-7 6-7 wenn irgendein Ergebnis von diesen drei -1 ist, dann lassen Sie es 0. Also wir habe Endergebnis 600 - Huy.PhamNhu
@ Huy.PhamNhu Das ist auch nicht richtig. Mit Base-Erlaubnis von 666 und Umask von 033 wirst du sicher nicht 633 rausbekommen. - maaartinus
Nein nein Nein. Sie können Subtraktion nicht verwenden, umasp zu berechnen (es funktioniert mit bestimmten Werten, aber nicht alle). Sie müssen sich die Umask als "Sperrbits" vorstellen. Siehe die anderen Antworten von Sufiyan und Wisbucky. - wisbucky


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

Zu allererst bedeutet "Maske" nicht "subtrahieren", im arithmetischen Sinn - es gibt keinen Borg oder Carry, zweitens die umask ist eine Maske; es ist keine zu subtrahierende Zahl.

Drittens deaktiviert die Maske Berechtigungsbits. Wenn sie schon aus sind, die umask ändert nichts an der Erlaubnis,

Angenommen, Sie müssen die Maske auflösen 077 von den Systemvorgaben für Dateien, die ist 666 und Verzeichnisse, die sind 777.

Der Befehl, den Sie verwenden werden, ist

umask 077

(den Wert im Binärformat demaskieren, 000 111 111)

Was diese Demaskierung tut, ist, dass sie eines der ersten sechs LSBs (niedrigstwertige Bits) ausschaltet, wenn sie es sind 1 und wird keine Änderung vornehmen, wenn einer von ihnen bereits ausgeschaltet ist.

Hier ist, wie die endgültige Erlaubnis berechnet wird:

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

Beobachte wie beides 110 Werte haben sich geändert in 000.

Ähnlich,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



Das sollte die Antwort sein! - Abdelouahab
@SufiyanGhori Also wenn umask 177 (001 111 111), wird es die ersten 7 niedrigstwertigen Bits ausschalten, wenn sie es sind 1 - Kasun Siyambalapitiya
das ist richtig @KasunSiyambalapitiya - Sufiyan Ghori


Basiskonzept:

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

Denken Sie zuerst darüber nach, was eine "Maske" ist. Eine Maske blockiert etwas. Denken Sie an Klebeband. In diesem Fall ist umask wie ein Maskierungsband, um Berechtigungen beim Erstellen einer neuen Datei oder eines neuen Verzeichnisses zu blockieren / zu 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 legen die Umask fest, um bestimmte Berechtigungen zu blockieren / deaktivieren.

  • Ein Maskenbit von 1 bedeutet, diese Berechtigung zu blockieren / deaktivieren (Maskierungsband über dieses Bit legen).
  • Ein Maskenbit von 0 erlaubt die Erlaubnis, durchzulassen (kein abdeckendes Klebeband über diesem Bit).

Also ein octal 022 (000 010 010) Maske bedeutet deaktivieren group write und others write, und lassen Sie alle anderen Berechtigungen passieren.

Berechnung:

Hier ist eine Beispielrechnung für eine neue Datei (default 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 die umgekehrten Maskenberechnungen Sie nur verwirren, gibt es einen einfacheren Weg mit der symbolischen Umask-Notation. Wenn Sie diese Methode verwenden, geben Sie nur die Pass-Through-Bits anstelle der Maskenbits an.

  • umask u=rwx,g=rx,o=rx Mittel erlauben Durchgang für user rwx, group rx, other rx. Was impliziert deaktivieren group w, others w. Wenn Sie diesen Befehl ausführen, überprüfen Sie umask, Sie erhalten 022.
  • umask u=rwx,g=,o= Mittel erlauben Durchgang für user rwx. Was bedeutet, deaktivieren Sie alle Zugriff für group und others. Wenn Sie diesen Befehl ausführen, überprüfen Sie umask, Sie erhalten 077.

Bonusberechnung:

Wenn Sie wirklich was verstehen wollen "oktale Umasken werden über das bitweise AND des unären Komplements des Arguments mit bitweisem NOT berechnet" bedeutet, hier sind einige logische Tabellen, die helfen können, zu demonstrieren. Denken Sie daran, ein Maskenbit 1 bedeutet deaktivieren, 0 bedeutet passieren.

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)Jetzt ist es einfach AND Logiktabelle!

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: result = perm AND (NOT mask)


9
2018-04-03 22:30