GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einführung in den Linux-Befehl chmod

Jedes Objekt auf Ihrem Linux-System hat einen Berechtigungsmodus, der beschreibt, welche Aktionen ein Benutzer darauf ausführen kann. Es gibt drei Arten von Berechtigungen:Lesen (r ), schreibe (w ) und ausführen (x ).

Zum Lesen eine Datei soll ihren Inhalt anzeigen. Beispielsweise muss eine Textdatei gelesen haben Erlaubnis für jemanden, den darin enthaltenen Text zu lesen. Wenn der Benutzer dieser Datei einen Satz hinzufügen möchte, muss er schreiben Erlaubnis. Die Ausführung Berechtigung ermöglicht es jemandem, eine Datei auszuführen, z. B. ein Shell-Skript oder eine binäre Programmdatei.

Grundlegende Berechtigungen

Das ls -l Der Befehl zeigt die einer Datei zugewiesenen Berechtigungen an. Zum Beispiel:

ls -l
-rw-rw-r-- 1 bruce bruce    0 Jul 30 16:25 schedule1.txt

Einige Berechtigungen (rw ) erscheinen mehr als einmal, weil sie sich auf verschiedene Entitäten beziehen:Benutzer , Gruppe , und andere . Benutzer ist gleichbedeutend mit Eigentümer und Gruppe bezieht sich auf die primäre Gruppe des Benutzers, die beide bruce sind . Andere bezieht sich auf alle anderen Benutzer.

Die erste Position gibt den Typ des Objekts an:- für eine Datei d für ein Verzeichnis und l für einen symbolischen Link. Die nächsten neun Positionen sind zu dritt gruppiert und beschreiben den Berechtigungsmodus. Die Positionen sind r geordnet ,w ,x , und die Gruppen sind nach Benutzer geordnet , Gruppe , Andere .

--- --- --- rwx rwx rwx
uuu ggg ooo u=Benutzer, g=Gruppe, o=andere

Dateien

Eine Datei mit gesetzten Lese-, Schreib- und Ausführungsbits für alle Entitäten würde erscheinen:

rwxrwxrwx 

Natürlich konfigurieren wir Dateien in der realen Welt normalerweise nicht so freizügig; Dies ist nur eine Veranschaulichung, wie jede Position verwendet wird.

Im folgenden Beispiel wird eine Datei für ihren Eigentümer konfiguriert (pablo ) Lese- und Schreibberechtigungen, für Mitglieder der Gruppe nur Leseberechtigungen und für alle anderen keine Berechtigungen.

-rw-r----- 1 pablo pablo    0 Jul 30 16:25 textfile

Die chmod Der Befehl ändert den Berechtigungsmodus von Objekten im System. Es ist einer der am häufigsten verwendeten und wichtigsten Befehle in der Gruppe der Linux-Sicherheitsbefehle.

Ein Plus (+ ) Symbol fügt eine Berechtigung und ein Minuszeichen (- ) Symbol entfernt eine Berechtigung. Sie können chmod u+r lesen als "user plus read", da es dem Benutzer read gibt Erlaubnis. Der Befehl chmod u-r bedeutet "Benutzer minus gelesen", da es das Lesen nimmt Erlaubnis vom Benutzer entfernt.

Verzeichnisse

Dieselben drei Berechtigungen gelten auch für ein Verzeichnis. Ein Verzeichnis muss das read haben Berechtigung für einen Benutzer, seine Inhalte anzuzeigen. Es muss schreiben Erlaubnis für einen Benutzer, dem Verzeichnis etwas hinzuzufügen (z. B. um eine neue Datei zu erstellen). Damit ein Benutzer in ein Verzeichnis wechseln kann (cd ), muss es execute haben Erlaubnis.

drw-rw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS

Pablo ist möglicherweise der Eigentümer des JBOSS-Verzeichnisses, aber da er keine Ausführungsberechtigung hat, kann er nicht cd hinein. Er kann den Befehl chmod u+x verwenden um die Berechtigung hinzuzufügen, und dann kann er cd hinein.

$ cd JBOSS
bash: cd: JBOSS: Permission denied
$ chmod u+x JBOSS
$ ls -l
drwxrw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
$ cd JBOSS
$ pwd
/opt/JBOSS

Kombinierte Argumente

Sie können Argumente mit einem Komma kombinieren. In diesem Beispiel benötigen Sie nur einen Befehl, um Berechtigungen festzulegen, damit die Gruppe weder in eine Datei schreiben noch der Rest der Welt sie lesen kann:

$ chmod o-r,g-w readme.txt
$ ls -l
-rw-r----- 1 pablo share 0 Jul 31 13:34 readme.txt

Sie können dies lesen als "andere minus lesen und gruppieren minus schreiben."

Angenommen, Denise hat ein Bash-Skript namens home_backup.sh geschrieben und will es ausführen geben Erlaubnis. Sie möchte auch verhindern, dass jemand anderes es liest, schreibt oder ausführt. Eine Möglichkeit, dies zu tun, sind die Plus- und Minuszeichen:

$ chmod go-rw,u+x home_backup.sh

Eine andere Möglichkeit ist die Verwendung des Gleichheitszeichens (= ) Symbol. Dadurch werden die Berechtigungen absolut ohne Rücksicht auf vorherige Einstellungen festgelegt. Beachten Sie, dass nach dem zweiten Gleichheitszeichen ein Leerzeichen steht; dies zeigt einen Wert von none an :

$ chmod u=rwx,go= home_backup.sh

Sie können dies als "Berechtigungen für Benutzer gleich lesen, schreiben und ausführen und Berechtigungen für Gruppe und andere gleich keine" lesen.

Numerischer Modus

Chmod unterstützt auch einen numerischen Modus, der jeder Position zugewiesene Werte verwendet:

Eigentümer Gruppe andere
r w x r w x r w x
400 200 100 40 20 10 4 2 1

Der Gesamtwert eines Satzes von Berechtigungen kann berechnet und als einzelnes Argument an den Befehl chmod übergeben werden. Nehmen Sie das Beispiel mit Denise und ihrem Backup-Skript. Wenn sie den numerischen Modus verwendet, um die Berechtigungen für ihr Skript festzulegen, muss sie zuerst den Gesamtwert berechnen:

-rwx------ 1 denise denise 0 Jul 31 13:53 home_backup.sh

Denise fügt die Nummern hinzu, die jeder Berechtigung entsprechen, die sie beantragen möchte:

400 + 200 + 100 =700

Ihr Befehl lautet chmod 700 home_backup.sh . Angenommen, Denise wollte die ursprünglichen Berechtigungen für die Datei zurücksetzen:

-rw-rw-r-- 1 denise denise 0 Jul 31 13:53 home_backup.sh

Der Wert dieser Berechtigungen berechnet sich zu 664:

400 + 200 + 40 + 20 + 4 =664

Denise kann den Befehl chmod 664 home_backup.sh verwenden um die ursprünglichen Berechtigungen wiederherzustellen.

Spezialmodi

Drei weitere Modi können für ein Objekt eingestellt werden:

name symbolisch numerisch
setuid s 4000
setgid s 2000
klebrig t 1000

Die SetUID bit erzwingt die Benutzereigenschaft für eine ausführbare Datei. Wenn es gesetzt ist, wird die Datei mit der Benutzer-ID des Dateieigentümers ausgeführt, nicht mit der Person, die sie ausführt.

$ chmod u+s

Die SetGID bit erzwingt den Gruppenbesitz für Dateien und Verzeichnisse. Wenn es gesetzt ist, erhält jede Datei oder jedes Verzeichnis, das in einem Verzeichnis erstellt wird, den Gruppenbesitz des Verzeichnisses, nicht den des Benutzers. Wenn es auf eine Datei gesetzt wird, wird die Datei immer als ihre besitzende Gruppe ausgeführt und nicht als der Benutzer:

$ chmod g+s

Der klebrige Bit, auch als "Flag für eingeschränktes Löschen" bezeichnet, kann für ein Verzeichnis gesetzt werden, um zu verhindern, dass jemand außer dem Eigentümer des Verzeichnisses eine Datei in diesem Verzeichnis löscht:

$ chmod o+t

Das Sticky-Bit kann im numerischen Modus gesetzt werden, indem sein Wert zu denen der anderen Berechtigungen addiert wird. Wenn Sie ein Objekt mit einem Wert von 755 haben und das Sticky-Bit setzen möchten, fügen Sie 1000 hinzu:

1000 + 400 + 200 + 100 + 40 + 10 + 4 + 1 =1755

Dieser Befehl wäre chmod 1755 . Mehrere symbolische Methoden sind äquivalent; ein Beispiel ist chmod u=rwx,go=rx,o+t .

Extras

Der Buchstabe a ist eine Verknüpfung, um allen Benutzern Berechtigungen zuzuweisen. Der Befehl chmod a+rwx entspricht chmod ugo+rwx .

Rekursiv

Wie viele andere Linux-Befehle hat chmod ein rekursives Argument, -R , wodurch Sie rekursiv mit einem Verzeichnis und seinem Inhalt arbeiten können. Mit rekursiv ist gemeint, dass der Befehl versucht, mit allen Objekten unterhalb des angegebenen Verzeichnisses zu arbeiten, und nicht nur mit dem Verzeichnis selbst. Dieses Beispiel beginnt in einem leeren Verzeichnis und fügt das -v hinzu (ausführliches) Argument, also wird chmod berichten, was es tut:

$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug  5 15:33 conf

conf:
-rw-rw-r-- 1 alan alan 0 Aug  5 15:33 conf.xml
$ chmod -vR 700 conf
mode of 'conf' changed from 0775 (rwxrwxr-x) to 0700 (rwx------)
mode of 'conf/conf.xml' changed from 0664 (rw-rw-r--) to 0700 (rwx------)

Referenz

Ein Referenzdateibefehl (--reference=RFILE ) kann verwendet werden, um den Modus einer anderen Datei zu duplizieren (RFILE ), bekannt als Referenzdatei. Dies ist praktisch, wenn Sie den Modus von Dateien ändern, um ihn an eine bestimmte Konfiguration anzupassen, oder wenn Sie den genauen Modus nicht kennen – oder sich keine Zeit nehmen möchten, ihn zu berechnen:

$ ls -l
-rw-r--r-x 1 alan alan 0 Aug  5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug  5 17:10 readme.txt
$ chmod --reference=readme.txt notes.txt
$ ls -l
-rw-rw-r-- 1 alan alan 0 Aug  5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug  5 17:10 readme.txt

Änderungen melden

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Der chmod-Befehl hat auch ein -c (--Änderungen )-Argument, das chmod anweist, nur zu melden, wenn eine Änderung vorgenommen wird (im Gegensatz zu -v , oder -verbose , was chmod anweist, seine gesamte Ausgabe zu melden). Chmod wird immer noch andere Dinge melden, z. B. wenn eine Operation nicht erlaubt ist.

Das Argument -f (--stumm , --leise ) unterdrückt die meisten Fehlermeldungen. Verwendung dieses Arguments mit -c zeigt nur echte Änderungen an.

Stamm beibehalten

Die Wurzel (/ ) des Linux-Dateisystems sollte mit großem Respekt behandelt werden. Wenn jemand auf dieser Ebene einen Befehlsfehler macht, können die Folgen schrecklich sein und ein System völlig unbrauchbar machen, insbesondere wenn Sie einen rekursiven Befehl ausführen, der jede Art von Änderung vornimmt – oder schlimmer noch:Löschungen. Glücklicherweise ist die Datei --preserve-root des chmod-Befehls argument schützt und erhält die Wurzel. Wenn das Argument mit einem rekursiven chmod-Befehl im Stammverzeichnis verwendet wird, passiert nichts und Sie sehen diese Meldung:

[alan@localhost ~]# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe

Die Option hat keine Wirkung, wenn sie nicht mit rekursiv verwendet wird. Wenn der Root-Benutzer den Befehl jedoch ausführt, werden die Berechtigungen der / ändern, aber nicht die anderer Dateien oder Verzeichnisse.

[alan@localhost ~]$ chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted
[root@localhost /]# chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)

Überraschenderweise ist dies nicht das Standardargument; --no-preserve-root ist. Wenn Sie einen Befehl ohne die "preserve"-Option ausführen, wird er standardmäßig in den "no-preserve"-Modus versetzt und möglicherweise Berechtigungen für Dateien ändern, die nicht geändert werden sollten.

[alan@localhost ~]$ chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)

Schlussfolgerung

Alle Objekte auf einem Linux-System haben eine Reihe von Berechtigungen. Es ist wichtig, sie gelegentlich zu überprüfen und zu warten, um unerwünschten Zugriff zu verhindern.


Linux
  1. Einführung in den Linux-Befehl chown

  2. Linux-Berechtigungen:Eine Einführung in chmod

  3. Einführung in den Alternativen-Befehl in Linux

  4. Linux-chmod-Befehl

  5. Beispiele für grundlegende „chmod“-Befehle unter Linux

Meistern Sie die Linux-Befehlszeile

Wiederherstellen der ausführbaren Berechtigung für den Chmod-Befehl in Linux

Der Choose-Befehl unter Linux

Der Timer-Befehl in Linux

5 praktische Beispiele für den Read-Befehl unter Linux

Wesentliche Beispiele des ps-Befehls in Linux