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
dam 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
0777verwendet? statt777Berechtigungen 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 mitmknoderstellt werdenc:zeichenspezifische Datei, kann auch mitmknoderstellt werden (siehe/devfür Beispiele)d:Verzeichnis, kann mitmkdirerstellt werdenl:Symbolischer Link, kann mitln -serstellt werdenp:Named Pipe, kann mitmkfifoerstellt werdens:Socket, kann mitnc -Uerstellt 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,sgidund „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:
suidist 4; Binärdateien mit diesem gesetzten Bit werden als ihr Eigentümer ausgeführt (üblicherweiseroot)sgidist 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
rootgelöscht werden (siehe/tmpfü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.