Was ist "umask" und wie funktioniert es?

162

Ich glaube, dass umask etwas ist, das Dateiberechtigungen kontrolliert , aber nicht ganz verstanden wird.

Nach dem Ausführen von umask 0644 in einem Terminal kann ich die Dateien, die ich mit dem Befehlszeilentext-Editor erstellt habe, nicht lesen nano . Ich habe festgestellt, dass die Berechtigungen dieser Datei auf 0022 anstelle des Standardwerts 0755 festgelegt sind.

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

  1. Was genau ist umask? Erklären Sie es mir, als wäre ich ein "Linux-Noob"
  2. Wie berechne ich mit umask?
  3. Was sind Anwendungsfälle für umask?
Lekensteyn 22.05.2011, 22:42
quelle

5 Antworten

130

Die umask fungiert als Gruppe von Berechtigungen, die Anwendungen nicht für Dateien festlegen können. Dies ist eine Erstellungsmaske für Dateimodus für Prozesse und kann nicht für Verzeichnisse selbst festgelegt werden. Die meisten Anwendungen erstellen keine Dateien mit festgelegten Ausführungsberechtigungen, daher haben sie den Standardwert 666 , der dann vom 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 Standardwert wie 777 in Anwendungen dazu führen, dass die Dateiberechtigungen 133 sind. Dies würde bedeuten, dass Sie (und andere) die Datei ausführen könnten und andere in die Datei schreiben können.

Wenn Sie Dateien nicht mit Lese- / Schreibzugriff ausführen möchten, sondern nur vom Eigentümer, sollten Sie eine Umask wie 077 verwenden, um diese Berechtigungen für die Gruppe zu deaktivieren. andere.

Im Gegensatz dazu macht eine Umask von 000 neu erstellte Verzeichnisse für jeden lesbar, beschreibbar und absteigend (die Berechtigungen werden 777 sein). Ein solcher umask ist sehr unsicher und Sie sollten den umask niemals auf 000 setzen.

Die Standardumgebungsdatei für Ubuntu ist 022 . Dies bedeutet, dass neu erstellte Dateien von allen gelesen werden können, jedoch nur vom Eigentümer:

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, öffnen Sie ein Terminal und führen Sie den Befehl aus:

umask

Um die umask-Einstellung der aktuellen Shell auf etwas anderes zu ändern, sagen Sie 077: run:

umask 077

Um zu testen, ob diese Einstellung funktioniert oder nicht, können Sie eine neue 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 Einstellung umask wird von Prozessen geerbt, die von derselben Shell aus gestartet werden. Starten Sie beispielsweise den Texteditor GEdit, indem Sie gedit im Terminal ausführen, und speichern Sie eine Datei mit gedit. Sie werden feststellen, dass die neu erstellte Datei von derselben umask-Einstellung wie im Terminal betroffen ist.

Anwendungsfall: Mehrplatzsystem

Wenn Sie sich in einem System befinden, das von mehreren Benutzern gemeinsam genutzt wird, ist es erwünscht, dass andere Benutzer Dateien in Ihrem Basisverzeichnis nicht lesen können. Dafür ist ein umask sehr nützlich. Bearbeiten Sie ~/.profile und fügen Sie eine neue Zeile mit

hinzu
umask 007

Sie müssen sich erneut anmelden, damit diese Änderung in ~/.profile wirksam wird. Als Nächstes müssen Sie vorhandene Dateiberechtigungen für Dateien in Ihrem Basisverzeichnis ändern, indem Sie das Lese-, Schreib- und Ausführungsbit für die Welt entfernen. Öffnen Sie ein Terminal und führen Sie Folgendes aus:

chmod -R o-rwx ~

Wenn diese umask-Einstellung auf alle Benutzer des Systems angewendet werden soll, können Sie die systemweite Profildatei unter /etc/profile bearbeiten.

    
ajmitch 22.05.2011, 22:59
quelle
35

Zusätzlich zu der guten Diskussion in der akzeptierten Antwort ist es sinnvoll, einige zusätzliche Punkte zu umask hinzuzufügen, und zwar in Bezug auf das Management ab 12.04.

Umask und pam_umask

Die Standardeinstellung für umask ist jetzt in /etc/login.defs und nicht in /etc/profile , wie in der offiziellen Anmerkung in /etc/profile zu lesen ist:

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

Pam_umask wird im Folgenden kurz erläutert, und es sollte gesagt werden, dass die Standarddatei, in der der Benutzer seine benutzerdefinierte umask-Einstellung ablegen kann, immer noch ~/.profile ist.

Pam_umask ist eines der vielen wichtigen PAM-Module , die von entscheidender Bedeutung sind in Ubuntus Betrieb (führen Sie apropos '^pam_' aus, um die Manpages für die anderen zu finden). In der Manpage für pam_umask ist Folgendes angegeben:

  

pam_umask ist ein PAM-Modul zum Festlegen der Erstellungsmaske für den Dateimodus der aktuellen Umgebung. Die umask beeinflusst die          Standardberechtigungen für neu erstellte Dateien.

Ein Hinweis auf die Standardumgebungsdatei

Neue Ordner in $HOME können von mkdir mit Standardberechtigungen 775 und mit touch erstellten Dateien mit Standardberechtigungen 664 erstellt werden, auch wenn der Standardwert umask 022 ist. Dies scheint zunächst widersprüchlich und lohnt sich erklären.

Während der Standardwert umask unter Ubuntu 022 ist, ist dies nicht die ganze Geschichte, da es in /etc/login.defs eine Einstellung gibt, die zulässt, dass umask für Nicht-Root-Benutzer 002 ist, wenn eine Bedingung erfüllt ist (siehe Auszug unten). . Bei einer normalen Installation enthält /etc/login.defs die Einstellung USERGROUPS_ENAB yes . Das ist was

  

Ermöglicht die Einstellung der umask-Gruppenbits als Besitzerbits    (Beispiele: 022 - > 002, 077 - > 007) für Benutzer ohne Rootberechtigung, wenn die UID ist    Das gleiche wie gid und der Benutzername ist mit dem Namen der primären Gruppe identisch.

Warum sehen Sie mit stat Folgendes, wenn ein neuer Ordner mit mkdir auf einem Einzelbenutzersystem wie meinem erstellt wird (uid und gid sind identisch):

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

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

    
user76204 02.04.2013 02:16
quelle
31

Das ist ziemlich alt, aber es ist erwähnenswert. Im Gegensatz zu Dateisystemberechtigungen für die umask berechnen. Die oktalen Umasks werden über das bitweise UND des unären Komplements des Arguments mit bitweisem NOT berechnet. Die oktalen Notationen 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 rechnen, um die korrekten Prämissen von 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 den umask einfach von den Basisberechtigungen subtrahieren, um die endgültige Berechtigung für die Datei wie folgt zu bestimmen:

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

Berechnung der endgültigen Berechtigung für Verzeichnisse

Sie können den 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 die Berechtigungen für das neue Verzeichnis (777-022) zu erhalten: 755 (rwxr-xr-x)
amrx 06.04.2016 10:27
quelle
25

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

Erstens bedeutet "Maske" im arithmetischen Sinne nicht "subtrahieren" - es ist kein Ausleihen oder Übertragen beteiligt, zweitens ist umask eine Maske; es ist keine Zahl, die abgezogen werden soll.

Drittens deaktiviert die Maske die Berechtigungsbits. Wenn sie bereits deaktiviert sind, ändert die umask die Berechtigung nicht,

Nehmen Sie beispielsweise an, Sie müssen 077 aus den Systemstandardwerten für Dateien ( 666 ) und Verzeichnisse ( 777 ) demaskieren.

Der Befehl, den Sie verwenden werden, ist

umask 077

(unmaskierter Wert in%, 000 111 111 )

Was diese Entmaskierung bewirkt, ist, dass jedes der ersten sechs LSBs (niederwertigste Bits) deaktiviert wird, wenn sie 1 sind, und keine Änderung vorgenommen wird, wenn eines davon bereits deaktiviert ist.

So wird die endgültige Berechtigung 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 110 -Werte in 000 geändert haben.

Ebenso

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
Sufiyan Ghori 05.06.2016 16:09
quelle
9

Grundkonzept:

Wenn Sie wie die meisten Menschen sind und nicht verstehen, was zum Teufel "oktale Umasks über das bitweise AND des unären Komplements des Arguments mit bitweisem NOT" "berechnet wird,

Denken Sie zuerst darüber nach, was eine "Maske" ist. Eine Maske blockiert etwas. Denken Sie an Klebeband. In diesem Fall ist umask wie das Maskieren von Band, um die Berechtigungen beim Erstellen einer neuen Datei oder eines neuen Verzeichnisses zu blockieren bzw. 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 haben den umask so eingestellt, dass er bestimmte Berechtigungen blockiert / deaktiviert.

  • Ein Maskenbit von 1 bedeutet, dass diese Berechtigung blockiert / deaktiviert wird (über dieses Bit wird Maskierungsband gelegt).
  • Ein Maskenbit von 0 ermöglicht die Weitergabe der Berechtigung (kein Maskierungsband über diesem Bit).

Eine Maske octal 022 (000 010 010) bedeutet also, group write und others write zu deaktivieren und alle anderen Berechtigungen durchzulassen.

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:

Wenn jedoch inverse Maskenberechnungen Sie nur verwirren, gibt es eine einfachere Möglichkeit, die symbolische Umask-Notation zu verwenden. Wenn Sie diese Methode verwenden, geben Sie nur die Durchgangsbits anstelle der Maskenbits an.

  • umask u=rwx,g=rx,o=rx bedeutet Durchlassen für user rwx , group rx , other rx . Das bedeutet, dass Sie group w , others w deaktivieren. Wenn Sie diesen Befehl ausführen und dann umask überprüfen, erhalten Sie 022 .
  • umask u=rwx,g=,o= bedeutet Durchlass für user rwx . Dies bedeutet, dass der Zugriff für group und others deaktiviert wird. Wenn Sie diesen Befehl ausführen und dann umask überprüfen, erhalten Sie 077 .

Bonusberechnung:

Wenn Sie wirklich verstehen wollen, was "oktale Umasks über das bitweise AND des unären Komplements des Arguments mit den bitweisen NOT-Werten" "berechnet werden, finden Sie hier einige Logiktabellen, die das demonstrieren können. Denken Sie daran, dass ein Maskenbit 1 deaktiviert ist, 0 Durchlauf bedeutet.

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 NOT(mask) erstellen, ist dies jetzt nur eine einfache AND Logic-Tabelle!

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)

    
wisbucky 04.04.2017 00:30
quelle

Tags und Links