chmodist ein Shell -Befehl zum Ändern von Zugriffsrechten und speziellen Modus-Flags von Dateien (einschließlich spezieller Dateitypen wie Verzeichnissen ). Der Name ist eine Kurzform von „change mode “ , wobei „mode“ die Berechtigungen und Flags zusammenfasst. [ 1 ] [ 2 ]
Der Befehl stammt aus AT&T Unix Version 1 und war bis zu seiner Portierung auf andere Betriebssysteme wie Windows (in UnxUtils ) [ 3 ] und IBM i [ 4 ] ausschließlich Unix- und Unix -ähnlichen Betriebssystemen vorbehalten.
In Unix- und Unix-ähnlichen Betriebssystemen ermöglicht ein Systemaufruf mit demselben Namen wie der Befehl ` chmod() ` den Zugriff auf die zugrundeliegenden Zugriffskontrolldaten. Der Befehl stellt die Funktionen des Systemaufrufs einem Shell-Benutzer zur Verfügung.
Mit dem wachsenden Bedarf an erweiterten Dateisystemberechtigungen wurden Zugriffskontrolllisten [ 5 ] zu vielen Dateisystemen hinzugefügt, um die über gesteuerten Modi zu erweitern chmod.
Die Implementierung der chmodin den GNU Coreutils enthaltenen Funktionen wurde von David MacKenzie und Jim Meyering geschrieben. [ 6 ]
Verwenden
Obwohl die Syntax des Befehls je nach Implementierung etwas variiert, akzeptiert er im Allgemeinen entweder einen einzelnen Oktalwert (der alle Modusbits jeder Datei angibt) oder eine durch Kommas getrennte Liste symbolischer Spezifizierer (die beschreibt, wie die vorhandenen Modusbits jeder Datei geändert werden sollen). Die übrigen Argumente sind eine Liste von Pfaden zu den zu ändernden Dateien. [ 7 ]
Das Ändern von Berechtigungen ist nur für den Superuser (root) und den Eigentümer einer Datei zulässig.
Wird ein symbolischer Link angegeben, werden die Modusbits des Ziels des Links angepasst. Berechtigungen, die direkt mit einem Dateisystemeintrag eines symbolischen Links verknüpft sind, werden in der Regel nicht verwendet.
Optionen
Optionale Befehlszeilenoptionen können Folgendes umfassen:
-Rrekursiv; einschließlich enthaltener Dateien und Unterverzeichnisse der angegebenen Verzeichnisse-vausführlich; Protokollierung geänderter Dateinamen
Oktalnotation
Bei Angabe eines numerischen Berechtigungsarguments chmodbehandelt der Befehl dieses als Oktalzahl [ a ] und ersetzt alle Modusbits für jede Datei. (Obwohl vier Ziffern angegeben werden, 0können führende Ziffern weggelassen werden.) [ 8 ]
Es gibt zwölf Standardmodus-Bits, bestehend aus drei Spezialbits ( setuid , setgid und sticky ) und drei Berechtigungsgruppen (die den Zugriff durch Benutzer , Gruppe und andere steuern ) mit jeweils 3 Bits ( read , write und exec/scan ); jedes Berechtigungsbit gewährt Zugriff, wenn es gesetzt (1) ist, oder verweigert den Zugriff, wenn es gelöscht (0) ist.
Da eine Oktalziffer einen 3-Bit-Wert darstellt, können die zwölf Modusbits als vier Oktalziffern dargestellt werden. chmodDie Funktion akzeptiert bis zu vier Ziffern und verwendet 0 für nicht spezifizierte linke Ziffern (wie bei numerischen Darstellungen üblich). In der Praxis werden üblicherweise drei Ziffern angegeben, da die Sondermodi selten verwendet werden und die Benutzerklasse in der Regel festgelegt ist.
Im Kontext einer Oktalziffer repräsentiert jedes Operationsbit einen numerischen Wert: Lesen: 4, Schreiben: 2 und Ausführen: 1. Die folgende Tabelle ordnet Oktalziffernwerte einem Klassenoperationswert zu.
| # | Bits | rwx | genehmigte Operationen |
|---|---|---|---|
| 7 | 4 + 2 + 1 | rwx | lesen, schreiben und ausführen |
| 6 | 4 + 2 | rw- | lesen und schreiben |
| 5 | 4 + 1 | r-x | lesen und ausführen |
| 4 | 4 | r-- | Nur lesen |
| 3 | 2 + 1 | -wx | schreiben und ausführen |
| 2 | 2 | -w- | Nur schreiben |
| 1 | 1 | --x | nur ausführen |
| 0 | --- | keiner |
Der Befehl statkann die Dateiberechtigungen als Oktalzahl ausgeben. Zum Beispiel:
$ stat -c %a findPhoneNumbers.sh 754Der gemeldete Wert 754gibt die folgenden Berechtigungen an:
- Benutzerklasse: Lesen, Schreiben und Ausführen; 7 => (4 + 2 + 1)
- Gruppenklasse: Lesen und Ausführen; 5 => (4 + 1)
- andere Klasse: schreibgeschützt; (4)
Ein Code erlaubt die Ausführung genau dann, wenn er ungerade ist (d. h. 1, 3, 5 oder 7). Ein Code erlaubt das Lesen genau dann, wenn er größer oder gleich 4 ist (d. h. 4, 5, 6 oder 7). Ein Code erlaubt das Schreiben genau dann, wenn er 2, 3, 6 oder 7 ist.
Symbolische Notation
Der chmodBefehl akzeptiert eine symbolische Notation, die angibt, wie die bestehenden Berechtigungen geändert werden sollen. [ 9 ] Der Befehl akzeptiert eine durch Kommas getrennte Liste von Spezifizierern, wie zum Beispiel:[classes]+|-|=operations
Klassen ordnen Benutzern Berechtigungen zu. Ein Änderungsspezifizierer kann eine Klasse durch Angabe ihres Symbols, mehrere Klassen durch Angabe der Symbole jeder Klasse ohne Trennzeichen oder alle Klassen durch Angabe eines Symbols auswählen; bei Verwendung der letzten Methode bleiben die Bits der umask- Maske unverändert. [ 10 ] Klassenspezifizierer umfassen:
| Symbol | Beschreibung |
|---|---|
| u | Benutzer: Dateibesitzer |
| G | Gruppe: Mitglieder der Gruppe der Datei |
| O | Andere: Benutzer, die weder der Eigentümer der Datei noch Mitglieder der Dateigruppe sind |
| A | alle drei Klassen; dasselbe wieugo |
Da die Eigentumsverhältnisse für die Zugriffskontrolle von zentraler Bedeutung sind und in der symbolischen Spezifikation die Abkürzung o verwendet wird , denken manche fälschlicherweise, dass diese für „Eigentümer“ steht , obwohl sie in Wirklichkeit die Abkürzung für „ Andere“ ist .
Zu den Wechseloperatoren gehören:
| Symbol | Beschreibung |
|---|---|
| + | Operationen/Flags hinzufügen |
| - | Operationen/Flags entfernen |
| = | Setzt das gesamte Feld „Operationen/Flags“; gewährt die angegebenen Operationen und verweigert andere. |
Operationen können wie folgt spezifiziert werden:
| Symbol | Beschreibung |
|---|---|
| R | Eine normale Datei lesen oder den Inhalt eines Verzeichnisses auflisten |
| w | in eine Datei schreiben |
| X | Führe eine reguläre Datei aus oder durchlaufe rekursiv einen Verzeichnisbaum |
| X | Spezielle Ausführung: Wählt aus, die Ausführung auf Verzeichnisse (unabhängig von ihren aktuellen Berechtigungen) und auf Dateien anzuwenden, denen bereits mindestens eine Ausführungsberechtigung erteilt wurde (für jede Klasse); nur sinnvoll in +Verbindung mit der Operation und üblicherweise mit der Option -R, Gruppen oder anderen Zugriff auf einen Verzeichnisbaum zu gewähren, ohne die Ausführungsberechtigung für reguläre Dateien festzulegen, was normalerweise mit geschehen würde chmod -R a+rx .; stattdessen verwendenchmod -R a+rX . |
| S | s etuid-Modus oder s etgid-Modus |
| T | klebriger Modus |
Die meisten chmodImplementierungen unterstützen die Spezifikation der speziellen Modi im Oktalsystem, einige jedoch nicht, weshalb die symbolische Notation verwendet werden muss.
Der lsBefehl kann Dateiberechtigungen in einer symbolischen Notation ausgeben, die der Notation von . ähnelt chmod. ls -lgibt Berechtigungen in einer 10-stelligen Notation aus. Der erste Buchstabe gibt den Typ des Dateisystemeintrags an, z. B. einen Bindestrich für eine reguläre Datei und 'd' für ein Verzeichnis. Darauf folgen drei Dreiergruppen von Buchstaben, die Lese-, Schreib- und Ausführungsberechtigungen, gruppiert nach Benutzer-, Gruppen- und anderen Klassen, angeben. Jede Position ist entweder ein Bindestrich, um fehlende Berechtigungen anzuzeigen, oder die Einbuchstabenabkürzung der Berechtigung, um anzuzeigen, dass sie erteilt ist. Zum Beispiel:
$ ls -l findPhoneNumbers.sh -rwxr-xr-- 1 dgerman staff 823 16. Dezember 15:03 findPhoneNumbers.shDie Berechtigungsangabe -rwxr-xr--beginnt mit einem Bindestrich, der anzeigt, dass findPhoneNumbers.shes sich um eine reguläre Datei und nicht um ein Verzeichnis handelt. Die nächsten drei Buchstaben rwxgeben an, dass die Datei vom Besitzer gelesen, geschrieben und ausgeführt werden kann dgerman. Die darauffolgenden drei Buchstaben r-xgeben an, dass die Datei von Mitgliedern der staffGruppe gelesen und ausgeführt werden kann. Die letzten drei Buchstaben r--geben an, dass die Datei für andere Benutzer schreibgeschützt ist.
Beispiele
Fügt der Gruppenklasse eines Verzeichnisses Schreibberechtigungen hinzu , sodass Benutzer derselben Gruppe Dateien hinzufügen können:
$ ls -ld dir # vorher drwxr-xr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dir $ chmod g+w dir $ ls -ld dir # nachher drwxrwxr-x 2 jsmitt northregion 96 Apr 8 12:53 shared_dirSchreibberechtigung für alle Klassen entfernen , um zu verhindern, dass jemand in die Datei schreibt:
$ ls -l ourBestReferenceFile -rw-rw-r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFile $ chmod a-w ourBestReferenceFile $ ls -l ourBestReferenceFile -r--r--r-- 2 tmiller northregion 96 Apr 8 12:53 ourBestReferenceFileSetzen Sie die Berechtigungen für die Benutzer- und Gruppenklassen auf Lese- und Ausführungsrechte ohne Schreibrechte, um zu verhindern, dass jemand Dateien hinzufügt:
$ ls -ld referenceLib drwxr----- 2 ebowman Northregion 96 8. April 12:53 referenceLib $ chmod ug = rx referenceLib $ ls -ld referenceLib dr-xr-x--- 2 ebowman Northregion 8. April 96 12:53 referenceLibAktivieren Sie Lese- und Schreibrechte für die Benutzerklasse , während Sie für die Gruppenklasse und andere Klassen nur Leserechte festlegen :
$ chmod u = rw,go = r sample $ ls -ld sample drw-r--r-- 2 oschultz warehousing 96 Dec 8 12:53 sampleUm den Zugriff auf das Verzeichnis docs/ und die darin enthaltenen Dateien rekursiv festzulegen:
chmod -R u+w docs/
Um Benutzer und Gruppe nur zum Lesen und Schreiben zuzulassen und andere nur zum Lesen:
chmod 664 file
Um einen Benutzer nur für Lese-, Schreib- und Ausführungsrechte und eine Gruppe sowie andere nur für Leserechte festzulegen:
chmod 744 file
Um zusätzlich zu Benutzer-, Gruppen- und anderen Berechtigungen auch das Sticky Bit festzulegen:
chmod 1755 file
Um zusätzlich zu Benutzer-, Gruppen- und anderen Berechtigungen eine UID festzulegen:
chmod 4755 file
So legen Sie zusätzlich zu Benutzer-, Gruppen- und anderen Berechtigungen die GID fest:
chmod 2755 file
Siehe auch
attribcacls, ändert Zugriffskontrolllistenchatträndert die Attribute einer Dateichgrpändert die Gruppe einer Dateichownändert den Besitzer einer Datei- Gruppenkennung – Unix/POSIX-Systemkontogruppennummer; numerischer Wert zur Darstellung einer bestimmten Gruppe
- Liste der POSIX-Befehle
- Benutzerkennung – Wert zur Identifizierung eines Benutzerkontos in Unix- und Unix-ähnlichen Betriebssystemen
umaskschränkt die Berechtigungen bei der Dateierstellung ein.
Anmerkungen
- Warum Oktal statt Dezimal? Obwohl Oktal heute selten verwendet wird, war es in der frühen Entwicklungsphase von UNIX sehr nützlich, da sich wiederholende Dreiergruppen von Bits in der damaligen Computerarchitektur häufig vorkamen. Diese Bits ließen sich leichter lesen und verstehen, wenn sie als Oktalziffern kodiert waren, ähnlich wie Vierergruppen von Bits in Hexadezimalziffern leichter lesbar sind. Die numerische Darstellung von Dateisystemberechtigungen in Oktal ist eines der wenigen Überbleibsel aus dieser Zeit.
Referenzen
- ^ Die Modi/Berechtigungen werden angezeigt, wenn Dateien im Langformat aufgelistet werden.
- ^ „Anleitung für chmod“ . catcode.com . Archiviert vom Original am 20. Mai 2000. Abgerufen am 26. August 2008 .
- ^ „Native Win32-Portierungen einiger GNU-Dienstprogramme“ . unxutils.sourceforge.net . Archiviert vom Original am 9. Februar 2006. Abgerufen am 9. August 2025 .
- ^ IBM . „IBM System i Version 7.2 Programming Qshell“ (PDF) . IBM . Archiviert (PDF) vom Original am 18. September 2020. Abgerufen am 5. September 2020 .
- ^ „AIX 5.3 Systemverwaltung“ . IBM Knowledge Center . IBM. Archiviert vom Original am 4. März 2016. Abgerufen am 30. August 2015 .
- ^ „chmod(1): Dateizugriffsrechte ändern – Linux-Manpage“ . linux.die.net . Archiviert vom Original am 9. Januar 2019. Abgerufen am 6. Januar 2019 .
- ^ „chmod-Manpage mit Beispielen und Rechner – Linux – SS64.com“ . ss64.com . Archiviert vom Original am 12. Februar 2003. Abgerufen am 12. September 2020 .(Bitte beachten Sie, dass „durch Leerzeichen getrennt“ eine Eigenschaft der Shell ist , nicht von chmod selbst.)
- ^ Dies unterscheidet sich von der „C“-Sprache, bei der das
0Präfix für Oktalzahlen ein Überbleibsel aus ihrer Frühzeit ist. - ^ „AIX 5.5 Befehlsreferenz“ . IBM Knowledge Center . IBM. Archiviert vom Original am 4. März 2016. Abgerufen am 30. August 2015 .
- ^ „Berechtigungsmaskierung mit umask, chmod, 777 oktalen Berechtigungen“ . teaching.idallen.com . Archiviert vom Original am 22. Februar 2020. Abgerufen am 9. März 2020 .
Externe Links
- Dateimodi ändern – FreeBSD- Handbuch für allgemeine Befehle
- – Plan 9 Programmierhandbuch, Band 1
- – Inferno General Befehlshandbuch
chmod— Handbuchseite von GNU coreutils .- GNU-Handbuch „Berechtigungen festlegen“
- CHMOD-Win 3.0 — Freeware Windows' ACL ↔ CHMOD converter.
- Anfängertutorial mit Online-„Live“-Beispiel