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.