chmod - chmod

chmod
Originalautor(en) AT&T Bell Laboratories
Entwickler Verschiedene Open-Source- und kommerzielle Entwickler
Erstveröffentlichung 3. November 1971 ; Vor 49 Jahren ( 1971-11-03 )
Betriebssystem Unix , Unix-like , Plan 9 , Inferno , IBM i
Plattform Plattformübergreifend
Typ Befehl
Lizenz coreutils : GPLv3

In Unix und Unix-ähnlichen Betriebssystemen ist chmod der Befehl und Systemaufruf, der verwendet wird, um die Zugriffsberechtigungen von Dateisystemobjekten ( Dateien und Verzeichnisse ) zu ändern, die manchmal als Modi bezeichnet werden . Es wird auch verwendet, um spezielle Modus- Flags wie setuid- und setgid- Flags und ein 'Sticky'-Bit zu ändern . Die Anfrage wird durch die umask gefiltert . Der Name ist eine Abkürzung für Änderungsmodus . Sie werden angezeigt, wenn Dateien im Langformat aufgelistet werden.

Geschichte

Ein chmod- Befehl erschien erstmals in AT&T Unix Version 1.

Als die Anzahl und die Benutzertypen der Systeme zunahmen, wurden vielen Dateisystemen zusätzlich zu diesen grundlegendsten Modi Zugriffskontrolllisten hinzugefügt, um die Flexibilität zu erhöhen.

Die in den GNU- Coreutils enthaltene Version von chmod wurde von David MacKenzie und Jim Meyering geschrieben.

Der Befehl chmod wurde auch auf das Betriebssystem IBM i portiert .


Befehlssyntax

In diesem Abschnitt bezieht sich u ser auf den Eigentümer der Datei, um daran zu erinnern, dass die symbolische Form des Befehls " u " verwendet.

chmod [options] mode[,mode] file1 [file2 ...]

In der Regel implementierte Optionen umfassen:

  • -R Rekursiv, dh Objekte in Unterverzeichnisse aufnehmen.
  • -v ausführlich, zeigt geänderte Objekte an (unveränderte Objekte werden nicht angezeigt).

Wird ein symbolischer Link angegeben, ist das Zielobjekt betroffen. Dateimodi, die direkt mit symbolischen Links selbst verbunden sind, werden normalerweise nicht verwendet.

Um den Dateimodus anzuzeigen, können die lsoder statBefehle verwendet werden:

$ ls -l findPhoneNumbers.sh
-rwxr-xr--  1 dgerman  staff  823 Dec 16 15:03 findPhoneNumbers.sh
$ stat -c %a findPhoneNumbers.sh
754

Die r, w, und xspezifizieren den Lese-, Schreib- und Ausführungszugriff (das erste Zeichen der ls- Anzeige bezeichnet den Objekttyp; ein Bindestrich steht für eine einfache Datei). Das Skript findPhoneNumbers.sh kann vom Benutzer dgerman gelesen, geschrieben und ausgeführt werden ; gelesen und ausgeführt von Mitgliedern der Mitarbeitergruppe ; und nur von anderen Benutzern gelesen werden.

Die wichtigsten Teile der chmod- Berechtigungen:

Zum Beispiel: rwxr-x---

Jede Gruppe von drei Zeichen definiert Berechtigungen für jede Klasse :

  • die drei Zeichen ganz links, rwx, definieren Berechtigungen für die Benutzerklasse (dh den Dateibesitzer).
  • die mittleren drei Zeichen, r-x, definieren Berechtigungen für die Group- Klasse (dh die Gruppe, die die Datei besitzt)
  • die drei Zeichen ganz rechts, ---, definieren Berechtigungen für die Klasse Others . In diesem Beispiel haben Benutzer, die nicht der Eigentümer der Datei sind und die nicht Mitglieder der Gruppe sind (und daher in der Klasse Andere sind ), keine Berechtigung zum Zugriff auf die Datei.

Numerische Berechtigungen

Das numerische Format chmod akzeptiert bis zu vier Ziffern. Die drei Ziffern ganz rechts definieren Berechtigungen für den Dateibenutzer, die Gruppe und andere. Die optionale führende Ziffer, wenn 4 Ziffern angegeben sind, gibt die speziellen Flags setuid , setgid und sticky an . Jede Ziffer der drei Ziffern ganz rechts stellt einen Binärwert dar, der die Berechtigungen "Lesen", "Schreiben" bzw. "Ausführen" steuert. Ein Wert von 1 bedeutet, dass eine Klasse diese Aktion erlaubt, während eine 0 bedeutet, dass sie nicht erlaubt ist.

# Summe rwx Erlaubnis
7 4(r) + 2(w) + 1(x) rwx lesen, schreiben und ausführen
6 4(r) + 2(w) rw- lesen und Schreiben
5 4(r) + 1(x) r-x lesen und ausführen
4 4(r) r-- schreibgeschützt
3        2(w) + 1(x) -wx schreiben und ausführen
2        2(w) -w- nur schreiben
1               1(x) --x nur ausführen
0 0 --- keiner

754Würde zum Beispiel erlauben:

  • "read" (4), "write" (2) und "execute" (1) für die Benutzerklasse , dh 7 (4+2+1).
  • "read" (4) und "execute" (1) für die Gruppenklasse , dh 5 (4+1).
  • Nur "lesen" (4) für die Klasse Andere .

Ein numerischer Code erlaubt die Ausführung genau dann, wenn er ungerade ist (dh 1, 3, 5, oder 7). Während ein Zahlencode das "Lesen" genau dann zulässt, wenn er größer oder gleich ist 4, bedeutet dies 4, 5, 6, oder 7).

Um zu bestimmen, ob "Schreiben" erlaubt ist, subtrahiere 1 vom numerischen Wert, wenn er ungerade ist (und nichts subtrahiere, wenn er gerade ist); dann ist "schreiben" genau dann erlaubt, wenn diese resultierende Zahl 2oder ist 6. Zum Beispiel:

  • Wenn der Wert 6(bzw. 2) war, dann (ziehen Sie nichts ab und) schließen Sie, dass das Schreiben erlaubt ist.
  • Wenn der Zahlenwert 7(bzw. 3) ist, dann subtrahiere 1 um 6(bzw. 2) zu erhalten und zu dem Schluss zu kommen, dass das Schreiben erlaubt ist.
  • Wenn der Wert 4(bzw. 0) war, dann (subtrahieren Sie nichts und) schließen Sie, dass das Schreiben nicht erlaubt ist.
  • Wenn der Wert 5(bzw. 1) war, subtrahieren Sie 1 um 4(bzw. 0) zu erhalten und schließen Sie daraus, dass wieder Schreiben nicht erlaubt ist.

Numerisches Beispiel

Ändern Sie die Berechtigungen, um Mitgliedern der Programmierergruppe zu erlauben , eine Datei zu aktualisieren:

$ ls -l sharedFile
-rw-r--r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile
$ chmod 664 sharedFile
$ ls -l sharedFile
-rw-rw-r--  1 jsmith programmers 57 Jul  3 10:13  sharedFile

Da die Bits setuid , setgid und sticky nicht angegeben sind, entspricht dies:

$ chmod 0664 sharedFile

Symbolische Modi

Der Befehl chmod akzeptiert auch eine feinkörnigere symbolische Notation, die es ermöglicht, bestimmte Modi zu ändern, während andere Modi unberührt bleiben. Der symbolische Modus besteht aus drei Komponenten, die zu einem einzigen Textstring kombiniert werden:

$ chmod [references][operator][modes] file ...

Benutzerklassen werden verwendet, um zu unterscheiden, für wen die Berechtigungen gelten. Wenn keine Klassen angegeben werden, wird "all" impliziert. Die Klassen werden durch einen oder mehrere der folgenden Buchstaben dargestellt:

Referenz Klasse Beschreibung
du Benutzer Dateibesitzer
g Gruppe Mitglieder der Dateigruppe
Ö Andere Benutzer, die weder der Eigentümer der Datei noch Mitglieder der Gruppe der Datei sind
ein alle alle drei oben, genauso wie ugo

Das Programm chmod verwendet einen Operator, um anzugeben, wie die Modi einer Datei angepasst werden sollen. Folgende Operatoren werden akzeptiert:

Operator Beschreibung
+ fügt die angegebenen Modi zu den angegebenen Klassen hinzu
- entfernt die angegebenen Modi aus den angegebenen Klassen
= die angegebenen Modi sind zu den genauen Modi für die angegebenen Klassen zu machen

Die Modi geben an, welche Berechtigungen für die angegebenen Klassen erteilt oder entfernt werden sollen. Es gibt drei Grundmodi, die den Grundberechtigungen entsprechen:

Modus Name Beschreibung
R lesen r eine Datei ead oder den Inhalt eines Verzeichnisses auflisten
w schreiben w rite in eine Datei oder ein Verzeichnis
x ausführen e x Ausführen einer Datei oder Rekursion eines Verzeichnisbaums
x Sonderausführung Dies ist keine Berechtigung an sich, sondern kann anstelle von x verwendet werden . Es wendet Ausführungsberechtigungen auf Verzeichnisse unabhängig von ihren aktuellen Berechtigungen an und wendet Ausführungsberechtigungen auf eine Datei an, für die bereits mindestens ein Ausführungsberechtigungsbit gesetzt ist (entweder Benutzer , Gruppe oder Andere ). Es ist nur wirklich nützlich, wenn es mit +und normalerweise in Kombination mit dem -RFlag verwendet wird, um Gruppen oder Anderen Zugriff auf einen großen Verzeichnisbaum zu gewähren, ohne die Ausführungsberechtigung für normale Dateien (wie Textdateien) zu setzen, was normalerweise passieren würde, wenn Sie nur verwenden chmod -R a+rx ., während mit X kannst du chmod -R a+rX .stattdessen tun
S setuid/gid Details im Abschnitt Spezialmodi
T klebrig Details im Abschnitt Spezialmodi

Mehrere Änderungen können angegeben werden, indem mehrere symbolische Modi durch Kommas (ohne Leerzeichen) getrennt werden. Wenn kein Benutzer angegeben ist, chmodwird die umask überprüft und der Effekt ist, als ob " a " angegeben wurde, außer dass Bits, die in der umask gesetzt sind, nicht betroffen sind.

Symbolische Beispiele

  • Schreibberechtigung ( w ) zu den Zugriffsmodi der Gruppe ( g ) eines Verzeichnisses hinzufügen, sodass Benutzer in derselben Gruppe Dateien hinzufügen können:
$ ls -ld shared_dir # show access modes before chmod
drwxr-xr-x   2 jsmitt  northregion 96 Apr 8 12:53 shared_dir
$ chmod  g+w shared_dir
$ ls -ld shared_dir  # show access modes after chmod
drwxrwxr-x   2 nfinny  eastregion 96 Apr 8 12:53 shared_dir
  • Entfernen Sie Schreibberechtigungen ( w ) für alle Klassen ( a ), 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 ebowman  northregion 96 Apr 8 12:53 ourBestReferenceFile
  • Legen Sie die Berechtigungen für den u ser und die Gruppe ( ug ) zu lesen und auszuführen ( rx ) nur (keine Schreibberechtigung) auf referenceLib , jemanden zu verhindern Dateien hinzuzufügen.
$ ls -ld referenceLib
drwxr-----   2 ebowman  northregion 96 Apr 8 12:53 referenceLib
$ chmod ug=rx referenceLib
$ ls -ld referenceLib
dr-xr-x---   2 dhinkle  northregion 96 Apr 8 12:53 referenceLib
  • Fügen Sie den Benutzer- und Gruppenklassen einer Datei oder eines Verzeichnisses namens sample die Lese- und Schreibberechtigungen hinzu :
$ chmod ug+rw sample
$ ls -ld sample
drw-rw----   2 rsanchez  budget       96 Dec  8 12:53 sample
  • Ändern Sie die Berechtigungen für den Benutzer und die Gruppe auf nur Lesen und Ausführen (keine Schreibberechtigung) für Beispiel .
$ # Sample file permissions before command
$ ls -ld sample
drw-rw----   2 oschultz  warehousing       96 Dec  8 12:53 NY_DBs
$ chmod ug=rx sample
$ ls -ld sample
dr-xr-x---   2 aolensky  warehousing       96 Dec  8 12:53 NJ_DBs

Spezialmodi

Der Befehl chmod ist auch in der Lage, zusätzliche Berechtigungen oder spezielle Modi einer Datei oder eines Verzeichnisses zu ändern. Die symbolischen Modi verwenden ' s ', um die Modi setuid und setgid darzustellen , und ' t ', um den Sticky- Modus darzustellen . Die Modi werden nur auf die entsprechenden Klassen angewendet, unabhängig davon, ob andere Klassen angegeben sind oder nicht.

Die meisten Betriebssysteme unterstützen die Spezifikation spezieller Modi mit Oktalmodi, einige jedoch nicht. Auf diesen Systemen können nur die symbolischen Modi verwendet werden.

Beispiele für die Befehlszeile

Befehl Erläuterung
chmod a+r publicComments.txt fügt Leseberechtigung für alle Klassen (dh u ser , Gruppe und andere )
chmod a-x publicComments.txt entfernt die Ausführungsberechtigung für alle Klassen
chmod a+rx viewer.sh fügt Lese- und Ausführungsberechtigungen für alle Klassen hinzu
chmod u=rw,g=r,o= internalPlan.txt Sätze Lese- und Schreibberechtigung für u ser , lesen Sätze für Gruppen , und verweigert den Zugang für andere
chmod -R u+w,go-w docs fügt in das Verzeichnis Schreibrechte docs und alle Inhalte (dh R ecursively) für Eigentümer und entfernt Schreibrechte für Gruppen und andere
chmod ug=rw groupAgreements.txt Sätze Lese- und Schreibberechtigungen für u ser und Gruppen
chmod 664 global.txt Sätze Lese- und Schreibberechtigungen für u ser und Gruppen , und zu lesen bietet Andere .
chmod 744 Show_myCV.sh Sätze lesen, schreiben und Ausführungsrechte für u ser und setzt die Erlaubnis lesen Gruppe und Sonstiges
chmod 1755 findReslts.sh setzt Sticky-Bit, setzt Lese-, Schreib- und Ausführungsberechtigungen für den Besitzer und setzt Lese- und Ausführungsberechtigungen für Gruppen und andere (dies legt nahe, dass das Skript im Speicher verbleibt)
chmod 4755 setCtrls.sh Sets UID , lesen Sie Sätze, Schreib- und Ausführungsberechtigungen für u ser und Sätze lesen und Ausführungsberechtigungen für Gruppen und andere
chmod 2755 setCtrls.sh setzt GID , Sätze zu lesen, schreiben und Ausführungsberechtigungen für u ser und Sätze lesen und Ausführungsberechtigungen für Gruppen und andere
chmod -R u+rwX,g-rwx,o-rx personalStuff R ecursively (dh auf alle Dateien und Verzeichnisse in personalStuff ) Addiert Lesen, Schreiben und spezielle Ausführungsberechtigungen für u ser , lesen entfernt, Schreib- und Ausführungsberechtigungen für Gruppen und entfernt Lese- und Ausführungsberechtigungen für andere
chmod -R a-x+X publicDocs R ecursively (dh auf alle Dateien und Verzeichnisse in publicDocs ) entfernt die Ausführungsberechtigung für alle Klassen und fügt spezielle Ausführungserlaubnis für alle Klassen

Siehe auch

  • Dateisystemberechtigungen
  • chattr, der Befehl zum Ändern der Attribute einer Datei oder eines Verzeichnisses auf Linux-Systemen
  • chown, der Befehl zum Ändern des Besitzers einer Datei oder eines Verzeichnisses auf Unix-ähnlichen Systemen
  • chgrp, der Befehl zum Ändern der Gruppe einer Datei oder eines Verzeichnisses auf Unix-ähnlichen Systemen
  • cacls, ein Befehl, der unter Windows NT und seinen Derivaten verwendet wird, um die einer Datei oder einem Verzeichnis zugeordneten Zugriffskontrolllisten zu ändern
  • attrib
  • umask, beschränkt den Modus (Berechtigungen) bei der Datei- oder Verzeichniserstellung auf Unix-ähnlichen Systemen
  • Benutzerkennung
  • Gruppenkennung
  • Liste der Unix-Befehle

Verweise

Externe Links