Ich habe mich chmod
bis heute noch nie so richtig aufgeregt . Ich folgte einem Tutorial, das mir eine große Sache erklärte.
Ich habe zum Beispiel gelesen, dass Sie drei verschiedene Berechtigungsgruppen haben:
- Besitzer (
u
) - group (
g
) - jeder (
o
)
Aufgrund dieser drei Gruppen weiß ich jetzt, dass:
- Wenn die Datei dem Benutzer gehört, bestimmen die Benutzerberechtigungen den Zugriff.
- Wenn die Gruppe der Datei mit der Gruppe des Benutzers identisch ist, bestimmt die Gruppenberechtigung den Zugriff.
- Wenn der Benutzer nicht der Dateieigentümer und nicht in der Gruppe ist, wird die andere Berechtigung verwendet.
Ich habe auch erfahren, dass Sie die folgenden Berechtigungen haben:
- read (
r
) - schreibe (
w
) - execute (
x
)
Ich habe ein Verzeichnis erstellt, um mein neu erworbenes Wissen zu testen:
mkdir test
Dann habe ich ein paar Tests gemacht:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Nach einigem Herumalbern habe ich endlich den Dreh raus chmod
und die Art und Weise, wie Sie die Berechtigung mit diesem Befehl festlegen.
Aber...
Ich habe noch ein paar Fragen:
- Wofür steht der
d
am Start? - Wie lautet der Name und die Verwendung des enthaltenden Slots und welche anderen Werte können darin enthalten sein?
- Wie kann ich es ein- und ausschalten?
- Was ist der Wert dafür
d
? (Da Sie nur 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1 haben) - Warum verwenden Benutzer manchmal,
0777
anstatt777
ihre Berechtigungen festzulegen?
Da ich aber nicht mehrere Fragen stellen sollte, werde ich versuchen, es in einer Frage zu stellen.
Wofür steht in einem UNIX-basierten System wie allen Linux-Distributionen in Bezug auf die Berechtigungen der erste Teil ( d
) und wozu dient dieser Teil der Berechtigungen?
quelle
S_IFDIR
. Sie verwenden es nicht, wenn Siestat()
den Dateimodus einstellen, aber die Funktion gibt tatsächlich den Wert 040750 für zurückdrwxr-x---
.Antworten:
Ich werde Ihre Fragen in drei Teilen beantworten: Dateitypen, Berechtigungen und Anwendungsfälle für die verschiedenen Formen von
chmod
.Datentypen
Das erste Zeichen in der
ls -l
Ausgabe steht für den Dateityp.d
bedeutet, es ist ein Verzeichnis. Es kann nicht festgelegt oder deaktiviert werden, es hängt davon ab, wie die Datei erstellt wurde. Die vollständige Liste der Dateitypen finden Sie in der ls-Dokumentation . Diejenigen, denen Sie wahrscheinlich begegnen, sind-
: "Normale" Datei, erstellt mit jedem Programm, das eine Datei schreiben kannb
: Spezielle Datei blockieren, in der Regel Festplatten- oder Partitionsgeräte, mit denen erstellt werden könnenmknod
c
: Zeichenspezialdatei, kann auch mit erstellt werdenmknod
(siehe/dev
Beispiele)d
: Verzeichnis, kann mit erstellt werdenmkdir
l
: symbolischer Link, kann mit erstellt werdenln -s
p
: named pipe, kann mit erstellt werdenmkfifo
s
: Socket, kann mit erstellt werdennc -U
D
: door , erstellt von einigen Serverprozessen unter Solaris / openindiana.Berechtigungen
chmod 0777
wird verwendet, um alle Berechtigungen in einerchmod
Ausführung festzulegen, anstatt Änderungen mitu+
usw. zu kombinieren . Jede der vier Ziffern ist ein Oktalwert, der eine Reihe von Berechtigungen darstellt:suid
,sgid
Und „klebrig“ (siehe unten)Der Oktalwert wird als Summe der Berechtigungen berechnet:
Für die erste Ziffer:
suid
ist 4; Binärdateien mit diesem Bit werden (in der Regelroot
) als Eigentümerbenutzer ausgeführt.sgid
ist 2; Binärdateien mit diesem Bit-Set werden als Eigentümergruppe ausgeführt (dies wurde für Spiele verwendet, damit Highscores gemeinsam genutzt werden können. In Kombination mit Sicherheitslücken in den Spielen ist dies jedoch häufig ein Sicherheitsrisiko.) Dateien, die in Verzeichnissen mit diesem Bit-Set erstellt wurden, gehören zu den Standardmäßig die Eigentümergruppe des Verzeichnisses (dies ist praktisch, um freigegebene Ordner zu erstellen)root
(siehe/tmp
für ein allgemeines Beispiel hierfür).Einzelheiten finden Sie auf der
chmod
Manpage . Beachten Sie, dass ich andere Sicherheitsfunktionen ignoriere, die die Berechtigungen der Benutzer für Dateien ändern können (SELinux, Datei-ACLs ...).Spezielle Bits werden je nach Dateityp (reguläre Datei oder Verzeichnis) und dem zugrunde liegenden System unterschiedlich behandelt. (Dies wird in der
chmod
Manpage erwähnt.) Auf dem System, das ich zum Testen verwendet habe (mitcoreutils
8.23 auf einemext4
Dateisystem mit Linux-Kernel 3.16.7-ckt2), ist das Verhalten wie folgt. Bei einer Datei werden die Spezialbits immer gelöscht, es sei denn, dieschmod 0777
ist ausdrücklich festgelegt,chmod 777
und beide Befehle löschen die Spezialbits und erteilen jedem die vollständigen Berechtigungen für die Datei. Bei einem Verzeichnis werden die Spezialbits mit der vierstelligen numerischen Form niemals vollständig gelöscht, was in Wirklichkeitchmod 0777
auch äquivalent zu istchmod 777
aber es ist irreführend, da einige der speziellen Bits unverändert bleiben. (Eine frühere Version dieser Antwort bekam das falsch.) So löschen Sie spezielle Bits auf Verzeichnisse , die Sie verwenden müssenu-s
,g-s
und / odero-t
explizit oder einen negativen numerischen Wert angeben, sochmod -7000
wird klar , alle speziellen Bits in einem Verzeichnis.In
ls -l
Ausgangsuid
,sgid
und „klebrig“ anstelle des erscheinenx
Eintrag:suid
ists
oderS
anstelle des Benutzersx
,sgid
ists
oderS
anstelle der Gruppex
, und „klebrig“ istt
oderT
statt andererx
. Ein Kleinbuchstabe zeigt an, dass sowohl das Spezialbit als auch das ausführbare Bit gesetzt sind. Ein Großbuchstabe zeigt an, dass nur das Spezialbit gesetzt ist.Die verschiedenen Formen von chmod
Aufgrund des oben beschriebenen Verhaltens kann die Verwendung der vollständigen vier Ziffern
chmod
verwirrend sein (zumindest stellte sich heraus, dass ich verwirrt war). Dies ist nützlich, wenn Sie sowohl spezielle Bits als auch Berechtigungsbits festlegen möchten. Andernfalls werden die Bits gelöscht, wenn Sie eine Datei bearbeiten, und beibehalten, wenn Sie ein Verzeichnis bearbeiten. So wirdchmod 2750
sichergestellt, dass Sie mindestenssgid
und genau erhaltenu=rwx,g=rx,o=
; aberchmod 0750
nicht unbedingt die speziellen Bits löschen.Die Verwendung von numerischen Modi anstelle von Textbefehlen (
[ugo][=+-][rwxXst]
) ist wahrscheinlich eher eine Gewohnheit und das Ziel des Befehls. Wenn Sie mit numerischen Modi vertraut sind, ist es oft einfacher, den vollständigen Modus auf diese Weise anzugeben. und es ist nützlich, sich Berechtigungen mit numerischen Modi vorstellen zu können, da sie von vielen anderen Befehlen verwendet werden können (install
,mknod
...).Einige Textvarianten können sich als nützlich erweisen: Wenn Sie lediglich sicherstellen möchten, dass eine Datei von jedem ausgeführt werden kann,
chmod a+x
wird dies unabhängig von den anderen Berechtigungen durchgeführt. Ebenso+X
fügt die Erlaubnis nur ausgeführt , wenn einer der Ausführungsberechtigungen bereits eingestellt ist oder die Datei ist ein Verzeichnis; Dies kann nützlich sein, um Berechtigungen global wiederherzustellen, ohne dass Dateien in Sonderfällen oder Verzeichnisse erforderlich sind. Dieschmod -R ug=rX,u+w,o=
entspricht dem Anwendenchmod -R 750
auf alle Verzeichnisse und ausführbaren Dateien sowiechmod -R 640
auf alle anderen Dateien.quelle
sgid
unabhängig von ihrem tatsächlichen Wert so, als ob ihr Bit immer gesetzt wäre. Unter FreeBSD kann dassuid
Bit so konfiguriert werden, dass es sich analogsgid
verhält (dh Dateien und Unterverzeichnisse, die innerhalb des Verzeichnisses erstellt wurden, haben denselben Eigentümer wie das Verzeichnis), sofern das zugrunde liegende Dateisystem dies unterstützt und mit dersuiddir
Option bereitgestellt wird .+X
fügt die ausführberechtigung nur hinzu, wenn eine der ausführberechtigungen bereits gesetzt ist oder die datei ein verzeichnis ist" danke @ stephen-kitt fehlt die dokumentation "ist bereits gesetzt" hat mich wirklich auf eine schleife geworfen!Berechtigungen in Linux sind also sehr wichtig. Ich werde versuchen, eine kurze Erklärung abzugeben.
Für Teile eines Dateimodus
Jede Unix-Datei verfügt über eine Reihe von Berechtigungen, die festlegen, ob Sie die Datei lesen, schreiben oder ausführen können. Wenn Sie ls -l ausführen, werden die Berechtigungen angezeigt. Hier ist ein Beispiel für eine solche Anzeige:
Ich hänge ein Bild von Teilen eines Dateimodus an:
Typ kann etwas anderes sein. Zum Beispiel:
Wenn Sie einige Berechtigungen für alle Verzeichnisse festlegen möchten, können Sie das R-Attribut verwenden, zum Beispiel:
Für chmod 777 vs 0777
Der
chmod
Befehl erwartet normalerweise, dass die Eingabe eine Oktalzahl ist. Die führende Null bezieht sich auf den Wert des Sticky / Sgid / Suid-Bit-Triplets. In C würde es jedoch einen Unterschied machen, da777
es in01411
(oktal) übersetzt würde , wodurch das Sticky-Bit (siehechmod(2)
Manpage) gesetzt würde, Leseberechtigungen für Eigentümer und ausführbares Bit für Gruppen und andere (was eine ziemlich seltsame Kombination ist). .EDIT 1
Ich habe ein anderes Bild über Linux-Berechtigungen gefunden und werde es anhängen, um es einfacher zu verstehen:
quelle
chmod(777)
wäre es tatsächlich das Äquivalent zu runningchmod 1411
(dh derchmod
Befehl mit Argument1411
).0x1FF
, binär:0b111111111
oder Oktal:0o777
. PYTHON POWERd
bedeutet, dass es sich um ein Verzeichnis handelt, wenn Sie eine Datei haben,-
und wenn es sich um einen Link handelt, finden Sie einel
. Es kann nicht gesetzt / nicht gesetzt werden.Wenn Sie 0777 als Berechtigung verwenden, geben Sie jedem Benutzer / jeder Gruppe des Systems die volle Kontrolle (Lesen + Schreiben + Ausführen). Es ist eine träge Möglichkeit, Probleme zu lösen, wenn Sie Benutzer / Gruppen haben, die nicht auf Verzeichnisse / Dateien zugreifen können.
Wenn Sie beispielsweise den Inhalt eines Verzeichnisses auflisten und Folgendes abrufen:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so ist eine Datei, die dem Benutzer root und der Gruppe root gehört. Der Eigentümer hat Lese- und Schreibzugriff, die Gruppe hat nur Lesezugriff und jeder andere Benutzer hat Lesezugriff. Dies kann als 644 übersetzt werden.
Wenn ich es auf 777 ändere, sieht es so aus:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
quelle
Nachdem ich meine Frage hier beantwortet und einige Nachforschungen über das Ergebnis angestellt hatte, fand ich einen Artikel, der alles sehr gut erklärt. Ich möchte einige Teile dieses Artikels hier für zukünftige Referenzen freigeben.
Berechtigungen anzeigen
Um
chmod
die Berechtigungen einer Datei oder eines Verzeichnisses ändern zu können, müssen Sie zunächst den aktuellen Zugriffsmodus kennen. Sie können den Inhalt eines Verzeichnisses im Terminal übercd
dieses Verzeichnis anzeigen und dann Folgendes verwenden:Der
-l
Schalter ist wichtig, da bei Verwendungls
ohne nur die Namen der Dateien oder Ordner im Verzeichnis angezeigt werden.Unten sehen Sie ein Beispiel für die Verwendung
ls -l
in meinem Home-Verzeichnis:Was bedeuten die Spalten?
Die erste Spalte gibt den Typ jeder Datei an:
-
bezeichnet eine normale Datei.d
bezeichnet ein Verzeichnis, dh einen Ordner, der andere Dateien oder Ordner enthält.p
bezeichnet eine Named Pipe (auch FIFO genannt).l
bezeichnet einen symbolischen Link.Die Buchstaben danach sind die Berechtigungen. Diese erste Spalte ist das, woran wir am meisten interessiert sind. Die zweite ist, wie viele Links sich in einer Datei befinden. Wir können sie ignorieren. Die dritte Spalte enthält zwei Werte / Namen: Der erste (in meinem Beispiel "Peter") ist der Name des Benutzers, dem die Datei gehört. Der zweite Wert ("Benutzer" im Beispiel) ist die Gruppe, zu der der Eigentümer gehört (Weitere Informationen zu Gruppen).
In der nächsten Spalte wird die Größe der Datei oder des Verzeichnisses in Byte angegeben. Anschließend werden Datum und Uhrzeit der letzten Änderung der Datei oder des Verzeichnisses sowie natürlich der Name der Datei oder des Verzeichnisses angegeben.
Was bedeuten die Berechtigungen?
Die ersten drei Buchstaben nach dem ersten
-
oderd
sind die Berechtigungen des Besitzers. Die nächsten drei Buchstaben sind Berechtigungen, die für die Gruppe gelten. Die letzten drei Buchstaben sind die Berechtigungen, die für alle anderen gelten.Jeder Satz von drei Buchstaben besteht aus
r
w
undx
.r
befindet sich immer in der ersten Position,w
befindet sich immer in der zweiten Position undx
befindet sich immer in der dritten Position.r
ist die Leseberechtigung,w
ist die Schreibberechtigung undx
ist die Ausführungsberechtigung. Befindet sich-
an der Stelle eines dieser Buchstaben ein Bindestrich ( ), bedeutet dies, dass die Erlaubnis nicht erteilt wurde. Wenn der Buchstabe vorhanden ist, wird er erteilt.Ordner
Im Falle von Ordnern können die Modusbits wie folgt interpretiert werden:
r
(read) steht für die Fähigkeit, das Inhaltsverzeichnis des angegebenen Verzeichnisses zu lesen.w
(Schreiben) steht für die Fähigkeit, das Inhaltsverzeichnis des angegebenen Verzeichnisses zu schreiben (neue Dateien, Ordner erstellen; vorhandene Dateien, Ordner umbenennen, löschen), wenn und nur wenn das Ausführungsbit gesetzt ist. Ansonsten ist diese Erlaubnis bedeutungslos.x
(execute) steht für die Möglichkeit, mit dem Befehl cd in das angegebene Verzeichnis zu gelangen und auf Dateien und Ordner in diesem Verzeichnis zuzugreifen.Ändern von Berechtigungen mit dem Befehl chmod
chmod
ist ein Befehl unter Linux und anderen Unix-ähnlichen Betriebssystemen. Hier können Sie die Berechtigungen (oder den Zugriffsmodus) einer Datei oder eines Verzeichnisses ändern.Sie können Berechtigungen auf zwei verschiedene Arten ändern: - Textbasiert
chmod
- Zahlenbasiertchmod
Textmethode
Um den Berechtigungs- oder Zugriffsmodus einer Datei zu ändern, verwenden wir den Befehl chmod in einem Terminal. Nachfolgend finden Sie die allgemeine Struktur des Befehls:
Wo Wer ist einer aus einer Reihe von Buchstaben und jeder gibt an, wem Sie die Erlaubnis geben werden. Sie sind wie folgt:
Die Berechtigungen sind die gleichen wie bereits diskutiert (
r
,w
, undx
).Mit dem Befehl chmod können Sie Berechtigungen zu einer vorhandenen Menge hinzufügen und von dieser entfernen, indem Sie + oder - anstelle von = verwenden. Dies unterscheidet sich von den oben genannten Befehlen, bei denen die Berechtigungen im Wesentlichen neu geschrieben werden (dh, um eine Berechtigung von
r--
in zu ändernrw-
, müssen Sie sie weiterhinr
sowiew
nach=
demchmod
Befehl in den Befehl einfügen. Wenn Sie dies verpassen,r
wird dier
Berechtigung als entfernt Sie werden mit den Tasten + und - neu geschrieben. Vermeiden Sie dies, indem Sie die aktuellen Berechtigungen hinzufügen oder entfernen.Zahlenmethode
chmod
Sie können Berechtigungen auch mithilfe von Zahlen festlegen.Die Verwendung von Zahlen ist eine weitere Methode, mit der Sie die Berechtigungen für alle drei Eigentümer, Gruppen und andere gleichzeitig bearbeiten können. Diese Grundstruktur des Codes lautet:
Wobei xxx eine dreistellige Zahl ist, wobei jede Ziffer zwischen 1 und 7 liegen kann. Die erste Ziffer gilt für Berechtigungen für den Eigentümer, die zweite Ziffer für Berechtigungen für die Gruppe und die dritte Ziffer für Berechtigungen für alle anderen.
In dieser Zahlenschreibweise haben die Werte r, w und x einen eigenen Zahlenwert:
Um eine dreistellige Zahl zu erhalten, müssen Sie überlegen, über welche Berechtigungen ein Eigentümer, eine Gruppe und ein Benutzer verfügen sollen, und dann ihre Werte addieren. Angenommen, ich möchte dem Eigentümer eines Verzeichnisses Lese-, Schreib- und Ausführungsberechtigungen erteilen, und ich möchte alle anderen Benutzer gruppieren, um nur Lese- und Ausführungsberechtigungen zu erhalten. Ich würde mit den numerischen Werten wie folgt kommen:
Dies entspricht der Verwendung von:
Die meisten Ordner / Verzeichnisse sind auf 755 eingestellt, um das Lesen und Schreiben sowie die Ausführung für den Eigentümer zu ermöglichen, aber das Schreiben für alle anderen zu verweigern, und Dateien sind normalerweise 644, um das Lesen und Schreiben für den Eigentümer zu ermöglichen, beziehen sich jedoch nur auf das Lesen für alle anderen Hinweis zum Fehlen von x-Berechtigungen bei nicht ausführbaren Dateien - hier gilt das Gleiche.
quelle
Für die d Fragen
Dies sagt Ihnen den Unix-Dateityp. Standardmäßig verfügt Unix nur über drei Dateitypen. Sie sind:
-
- Regelmäßige Dateid
- Verzeichnisdateib
- Datei blockierenc
- Gerätezeichendateip
- Named Pipe-Datei oder nur Pipe-Dateil
- Symbolische Linkdateis
- Socket-DateiLesen Sie hier mehr: Dateitypen unter Linux / Unix im Detail erklärt
0777
vs777
Sticky Bit angegeben oder nicht. Wenn das Sticky-Bit eines Verzeichnisses gesetzt ist, behandelt das Dateisystem die Dateien in solchen Verzeichnissen auf besondere Weise, sodass nur der Eigentümer der Datei, der Eigentümer des Verzeichnisses oder der Root-Benutzer die Datei umbenennen oder löschen können. Ohne das Sticky-Bit-Set kann jeder Benutzer mit Schreib- und Ausführungsberechtigungen für das Verzeichnis enthaltene Dateien unabhängig vom Eigentümer der Datei umbenennen oder löschen.
0777
Setzt 777-Dateiberechtigungen und das Sticky-Bit auf 0 - keine besonderen Modi.777
setzt 777 Dateiberechtigungen, ohne das Sticky-Bit zu ändern.Weiterlesen: Sticky Bit und Chmod
quelle
chmod 777
die setuid-, setgid- und sticky-Bits nicht gelöscht werden? Versuch es.