Ich habe nie wirklich verstanden, wie chmod
funktioniert bis heute gearbeitet. Ich habe ein Tutorial befolgt, das mir eine große Sache erklärt hat.
Ich habe zum Beispiel gelesen, dass Sie drei verschiedene Berechtigungsgruppen haben:
- Eigentümer (
u
) - Gruppe (
g
) - alle (
o
)
Basierend auf diesen drei Gruppen weiß ich jetzt Folgendes:
- 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 Eigentümer der Datei ist und nicht in der Gruppe ist, wird die andere Berechtigung verwendet.
Ich habe auch erfahren, dass Sie die folgenden Berechtigungen haben:
- lesen (
r
) - schreiben (
w
) - Ausführen (
x
)
Ich habe ein Verzeichnis erstellt, um mein neu erworbenes Wissen zu testen:
mkdir test
Dann habe ich einige Tests gemacht:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Nachdem ich einige Zeit herumgealbert habe, glaube ich, dass ich chmod
endlich verstanden habe und wie Sie die Berechtigung mit diesem Befehl festlegen.
Aber...
Ich habe noch ein paar Fragen:
- Was bedeutet das
d
am Start stehen für? - Wie lautet der Name und die Verwendung des enthaltenden Slots und welche anderen Werte kann er enthalten?
- Wie kann ich sie aktivieren und deaktivieren?
- Was ist der Wert für dieses
d
? (Da Sie nur 7=4+2+1 7=4+2+1 7=4+2+1 haben) - Warum wird manchmal
0777
verwendet? statt777
Berechtigungen festlegen?
Aber da ich nicht mehrere Fragen stellen sollte, werde ich versuchen, sie in einer Frage zu stellen.
Was bedeutet in UNIX-basierten Systemen wie allen Linux-Distributionen bezüglich der Berechtigungen der erste Teil (d
) stehen und wozu dient dieser Teil der Berechtigungen?
Akzeptierte Antwort:
Ich beantworte Ihre Fragen in drei Teilen:Dateitypen, Berechtigungen und Anwendungsfälle für die verschiedenen Formen von chmod
.
Dateitypen
Das erste Zeichen in ls -l
Ausgabe repräsentiert den Dateityp; d
bedeutet, dass es sich um ein Verzeichnis handelt. Es kann nicht gesetzt oder nicht gesetzt 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 werden, sind
-
:„normale“ Datei, erstellt mit jedem Programm, das eine Datei schreiben kannb
:Spezielle Blockdateien, typischerweise Platten- oder Partitionsgeräte, können mitmknod
erstellt werdenc
:zeichenspezifische Datei, kann auch mitmknod
erstellt werden (siehe/dev
für Beispiele)d
:Verzeichnis, kann mitmkdir
erstellt werdenl
:Symbolischer Link, kann mitln -s
erstellt werdenp
:Named Pipe, kann mitmkfifo
erstellt werdens
:Socket, kann mitnc -U
erstellt werdenD
:door, erstellt von einigen Serverprozessen auf Solaris/openindiana.
Berechtigungen
chmod 0777
wird verwendet, um alle Berechtigungen in einem chmod
festzulegen Ausführung, anstatt Änderungen mit u+
zu kombinieren usw. Jede der vier Ziffern ist ein Oktalwert, der einen Satz von Berechtigungen darstellt:
suid
,sgid
und „klebrig“ (siehe unten)- Benutzerberechtigungen
- Gruppenberechtigungen
- "andere" Berechtigungen
Der Oktalwert wird als Summe der Berechtigungen berechnet:
- "lesen" ist 4
- „Schreiben“ ist 2
- "Ausführen" ist 1
Für die erste Ziffer:
suid
ist 4; Binärdateien mit diesem gesetzten Bit werden als ihr Eigentümer ausgeführt (üblicherweiseroot
)sgid
ist 2; Binärdateien mit diesem Bit-Set laufen als ihre Besitzergruppe (dies wurde für Spiele verwendet, damit Highscores geteilt werden konnten, aber es ist oft ein Sicherheitsrisiko, wenn es mit Schwachstellen in den Spielen kombiniert wird), und 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)- „sticky“ (oder „eingeschränkte Löschung“) ist 1; Dateien in Verzeichnissen mit diesem gesetzten Bit können nur von ihrem Besitzer, dem Besitzer des Verzeichnisses oder
root
gelöscht werden (siehe/tmp
für ein allgemeines Beispiel dafür).
Siehe chmod
Manpage für Details. Beachten Sie, dass ich bei all dem andere Sicherheitsfunktionen ignoriere, die die Berechtigungen von Benutzern für Dateien ändern können (SELinux, Datei-ACLs …).
Spezielle Bits werden je nach Dateityp (normale Datei oder Verzeichnis) und dem zugrunde liegenden System unterschiedlich behandelt. (Dies wird im chmod
erwähnt Manpage.) Auf dem System, mit dem ich das getestet habe (mit coreutils
8.23 auf einem ext4
Dateisystem, auf dem Linux-Kernel 3.16.7-ckt2 ausgeführt wird), ist das Verhalten wie folgt. Für eine Datei werden die speziellen Bits immer gelöscht, sofern sie nicht explizit gesetzt sind, also chmod 0777
entspricht chmod 777
, und beide Befehle löschen die speziellen Bits und geben jedem die vollen Berechtigungen für die Datei. Bei einem Verzeichnis werden die speziellen Bits niemals vollständig gelöscht, wenn die vierstellige numerische Form verwendet wird, also chmod 0777
entspricht auch chmod 777
aber es ist irreführend, da einige der speziellen Bits unverändert bleiben. (Eine frühere Version dieser Antwort hat dies falsch verstanden.) Um spezielle Bits in Verzeichnissen zu löschen, müssen Sie u-s
verwenden , g-s
und/oder o-t
explizit oder geben Sie einen negativen numerischen Wert an, also chmod -7000
löscht alle speziellen Bits in einem Verzeichnis.
In ls -l
Ausgabe, suid
, sgid
und „sticky“ erscheinen anstelle des x
Eintrag:suid
ist s
oder S
anstelle des x
des Benutzers , sgid
ist s
oder S
anstelle des x
der Gruppe , und „sticky“ ist t
oder T
anstelle des x
anderer . Ein Kleinbuchstabe zeigt an, dass sowohl das spezielle Bit als auch das ausführbare Bit gesetzt sind; ein Großbuchstabe zeigt an, dass nur das spezielle Bit gesetzt ist.
Die verschiedenen Formen von chmod
Aufgrund des oben beschriebenen Verhaltens werden die vollen vier Ziffern in chmod
verwendet kann verwirrend sein (zumindest stellt sich heraus, dass ich verwirrt war). Es ist nützlich, wenn Sie sowohl spezielle Bits als auch Berechtigungsbits setzen möchten; Andernfalls werden die Bits gelöscht, wenn Sie eine Datei bearbeiten, und beibehalten, wenn Sie ein Verzeichnis bearbeiten. Also chmod 2750
stellt sicher, dass Sie mindestens sgid
erhalten und genau u=rwx,g=rx,o=
; aber chmod 0750
löscht nicht unbedingt die speziellen Bits.
Numerische Modi anstelle von Textbefehlen verwenden ([ugo][=+-][rwxXst]
) ist wohl eher Gewohnheitssache und Ziel des Befehls. Sobald Sie sich an die Verwendung numerischer Modi gewöhnt haben, ist es oft einfacher, einfach den vollständigen Modus auf diese Weise anzugeben. und es ist nützlich, sich Berechtigungen mit numerischen Modi vorstellen zu können, da viele andere Befehle sie verwenden können (install
, mknod
…).
Einige Textvarianten können sich als nützlich erweisen:Wenn Sie einfach sicherstellen möchten, dass eine Datei von jedem ausgeführt werden kann, chmod a+x
wird dies tun, unabhängig von den anderen Berechtigungen. Ebenso +X
fügt die Ausführungsberechtigung nur hinzu, wenn eine der Ausführungsberechtigungen bereits festgelegt ist oder die Datei ein Verzeichnis ist; Dies kann praktisch sein, um Berechtigungen global wiederherzustellen, ohne dass Dateien im Vergleich zu Verzeichnissen in Sonderfällen behandelt werden müssen. Also chmod -R ug=rX,u+w,o=
entspricht der Anwendung von chmod -R 750
zu allen Verzeichnissen und ausführbaren Dateien und chmod -R 640
zu allen anderen Dateien.