Ich glaube, dass umask etwas ist, das Dateiberechtigungen kontrolliert , aber es nicht vollständig versteht.
Nach dem Ausführen umask 0644
in einem Terminal kann ich die mit dem Befehlszeilentexteditor erstellten Dateien nicht lesen nano
. Ich habe festgestellt, dass die Berechtigungen für diese Datei 0022
anstelle der Standardeinstellung festgelegt sind 0755
.
Wie funktioniert umask? Ich dachte, ich könnte einfach jede Ziffer in der umask von entfernen 0777
, 7 - 6 = 1
und 7 - 4 = 3
so erwarte ich, dass dies die Berechtigungen sind 0133
, aber anscheinend ist dies nicht der Fall.
- Was ist Umask genau? Erkläre es mir, als wäre ich ein "Linux-Neuling"
- Wie berechne ich mit umask?
- Was sind Use Cases für umask?
permissions
umask
Lekensteyn
quelle
quelle
app_mode 666 rw- rw- rw-
umask 644 --0 -00 -00
file_mode 022 --- -w- -w-
Antworten:
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
777
in Anwendungen zu Dateiberechtigungen führen133
. 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
000
neu erstellte Verzeichnisse für alle lesbar, beschreibbar und abbaubar (die Berechtigungen sind777
). Eine solche umask ist sehr unsicher und Sie sollten die umask niemals auf einstellen000
.Die Standardeinstellung für umask unter Ubuntu war,
022
was bedeutet, dass neu erstellte Dateien von jedem gelesen werden können, aber nur vom Eigentümer geschrieben werden können:Ab Ubuntu Oneiric (11.10) wurde die Standardeinstellung umask gelockert
002
, wodurch der Schreibzugriff auf die Gruppe des Besitzers erweitert wird:Umask anzeigen und ändern
Um Ihre aktuelle umask-Einstellung anzuzeigen, öffnen Sie ein Terminal und führen Sie den Befehl aus:
Führen Sie Folgendes aus, um die umask-Einstellung der aktuellen Shell in etwas anderes zu ändern, z. B. 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:
Die umask-Einstellung wird von Prozessen übernommen, die von derselben Shell gestartet wurden. Starten Sie beispielsweise den Texteditor GEdit, indem Sie ihn
gedit
im 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
~/.profile
und fügen Sie eine neue Zeile hinzu mit:Sie müssen sich erneut anmelden, damit diese Änderung in umask
~/.profile
wirksam 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: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
.quelle
777
, dass die Gruppe und andere an sie schreiben können, während077
dies nicht möglich ist?000
, wird die Datei Erlaubnis sein777
. Sollte also bei einer Standardmaske von022
nicht die Dateiberechtigung755
entsprechend sein , also-rwxr-xr-x
nicht-rw-r--r--
?000
keine Berechtigungen entfernt. Anwendungen mögentouch
undnano
erstellen Dateien mit Standard,666
so dass die Dateiberechtigung erhalten bleibt,666
aber eine umask von022
entfernt die Schreibbits für die Gruppe und andere, wird also666
auf644
aka reduziert .-rw-r--r--
Überlegen Sie,mkdir
welcher Standarderstellungsmodus777
mit einer umask von022
die Berechtigungen für755
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.defs
und nicht in/etc/profile
, wie der offizielle Hinweis in/etc/profile
lautet:Pam_umask
wird 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_umask
ist eines von vielen wichtigen PAM-Modulen , die für den Betrieb von Ubuntu von entscheidender Bedeutung sind (führen Sie diese ausapropos '^pam_'
, um die Hilfeseiten für die anderen zu finden). In der Manpage fürpam_umask
wird darauf hingewiesen , dassEin Hinweis zur Standard-Umask
Neue Ordner in
$HOME
könnenmkdir
mit den Standardberechtigungen 775 und Dateientouch
mit 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.defs
Enthält bei einer normalen Installation die EinstellungUSERGROUPS_ENAB yes
. Das ist wasAus diesem Grund
stat
wird bei dermkdir
Erstellung eines neuen Ordners auf einem einzelnen Benutzersystem wie meinem folgendes angezeigt (UID und GID sind identisch):Weitere Informationen finden Sie unter
man pam_umask
und auf den Ubuntu-Online-Hilfeseiten .quelle
/etc/login.defs
jeden FallUSERGROUPS_ENAB yes
nach dem Überprüfen. Die Syntax dieser Datei ist etwas ungewöhnlich.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:
Dann können Sie berechnen, um die richtigen Voraussetzungen für umask festzulegen:
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
(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
(777-022)
:755 (rwxr-xr-x)
quelle
077
wie würden Sie666-077
in diesem Fall subtrahieren ?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
umask
ist 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
077
des Systems für die Dateien666
und Verzeichnisse aufheben777
.Der Befehl, den Sie verwenden, lautet:
(Demaskierungswert in Binär
000 111 111
)Diese Demaskierung deaktiviert die ersten sechs niedrigstwertigen Bits (LSBs)
1
und nimmt keine Änderungen vor, wenn eines davon bereits deaktiviert ist.So wird die endgültige Erlaubnis berechnet:
Beobachten Sie, wie sich beide
110
Werte in geändert haben000
.Ähnlich,
quelle
umask 177
(001 111 111), werden die ersten 7 niedrigstwertigen Bits ausgeschaltet, wenn dies der1
result = file permission & (!umask)
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 istoctal 666 (110 110 110)
. Wir setzen die umask so, dass bestimmte Berechtigungen blockiert / deaktiviert werden.1
zum Blockieren / Deaktivieren dieser Berechtigung (Masking Tape über dieses Bit legen).0
lässt die Erlaubnis durch (kein Maskierungsband über diesem Bit).Eine
octal 022 (000 010 010)
Maske bedeutet also, alle anderen Berechtigungen zu deaktivierengroup write
undothers write
zuzulassen.Berechnung:
Hier ist eine Beispielberechnung für eine neue Datei (Standardberechtigung 666) mit einer 022-Umask:
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=rx
Mittel ermöglichen passierenuser rwx
,group rx
,other rx
. Was bedeutet , deaktivierengroup w
,others w
. Wenn Sie diesen Befehl ausführen, überprüfenumask
Sie, erhalten Sie022
.umask u=rwx,g=,o=
Mittel durchlassen füruser rwx
. Was bedeutet, dass jeglicher Zugriff fürgroup
und deaktiviert wirdothers
. Wenn Sie diesen Befehl ausführen, überprüfenumask
Sie, erhalten Sie077
.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
1
bedeutet Deaktivieren,0
bedeutet Durchreichen.Wenn Sie die Tabelle mit machen
NOT(mask)
, ist es jetzt nur eine einfacheAND
Logiktabelle!Die Formel dafür lautet also:
result = perm AND (NOT mask)
quelle