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

15 SELinux chcon-Befehlsbeispiele zum Ändern des Sicherheitskontexts

In SELinux besteht eine der häufigsten Aufgaben darin, den Sicherheitskontext eines Objekts zu ändern. Dazu verwenden Sie den Befehl chcon.

chcon steht für Change Context.

Dieser Befehl wird verwendet, um den SELinux-Sicherheitskontext einer Datei zu ändern.

Dieses Tutorial erklärt die folgenden chcon-Befehlsbeispiele:

  1. Ändern Sie den vollständigen SELinux-Kontext
  2. Kontext mit einer anderen Datei als Referenz ändern
  3. Nur den Benutzer im SELinux-Kontext ändern
  4. Nur die Rolle im SELinux-Kontext ändern
  5. Nur den Typ im SELinux-Kontext ändern
  6. Nur den Bereich (Level) im SELinux-Kontext ändern
  7. Kombinieren Sie Benutzer, Rolle, Typ, Ebene in chcon
  8. Standardverhalten von Chcon bei symbolischem Link
  9. Änderung des SELinux-Kontexts des symbolischen Links erzwingen
  10. Ändern Sie den SELinux-Kontext rekursiv
  11. Ausführliche Details des chcon-Vorgangs anzeigen
  12. Chcon-Standardverhalten bei symbolischen Links für rekursiv
  13. Chcon zwingen, bestimmte symbolische Links für Rekursiv zu durchlaufen
  14. Chcon zwingen, ALLE symbolischen Links für Rekursiv zu durchlaufen
  15. Chcon-Verhalten im / root-Verzeichnis für systemweite Änderung

1. Vollständigen SELinux-Kontext ändern

Um den Sicherheitskontext einer Datei anzuzeigen, verwenden Sie die Option -Z (großes Z) im Befehl ls, wie unten gezeigt.

# ls -lZ httpd.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

Im obigen Beispiel lautet der Sicherheitskontext der Datei httpd.conf wie folgt:

unconfined_u:object_r:admin_home_t:s0

Das ist ein falscher SELinux-Kontext für die Datei httpd.conf, die sich im Verzeichnis /etc/httpd/conf befindet.

Um also den Sicherheitskontext zu ändern, verwenden Sie den folgenden chcon-Befehl.

# chcon system_u:object_r:httpd_config_t:s0 httpd.conf

Im obigen Beispiel haben wir den Sicherheitskontext der Datei httpd.conf in den folgenden geändert, der korrekt ist.

system_u:object_r:httpd_config_t:s0

Wir können dies mit dem folgenden Befehl ls -lZ überprüfen.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Hinweis:Im obigen Beispiel geben wir den vollständigen SELinux-Kontext einer Datei (d. h. Benutzer, Rolle, Typ und Bereich) im Format Benutzer:Rolle:Typ:Bereich an, ohne ihn weiter aufzuschlüsseln.

Jedes Mal, wenn Sie mit Problemen im Zusammenhang mit SELinux konfrontiert sind, könnten Sie versucht sein, SELinux einfach zu deaktivieren, wie wir bereits erklärt haben. In vielen Situationen können Sie jedoch feststellen, dass die betreffende Datei nur einen falschen Sicherheitskontext hat, der mit dem Befehl chcon geändert werden kann.

2. Kontext mit einer anderen Datei als Referenz ändern

Manchmal wissen Sie vielleicht nicht, welchen SELinux-Kontext Sie für eine Datei einstellen sollten.

In diesem Fall können Sie den Sicherheitskontext einer anderen Datei als Referenz verwenden und diesen Ihrer Datei zuweisen.

Anstatt den vollständigen SELinux-Kontext für die Datei anzugeben, verwenden Sie im Grunde nur den Kontext einer anderen Datei für Ihre Datei.

Im folgenden Beispiel sehen wir, dass sowohl ssl.conf als auch httpd.conf einen unterschiedlichen SELinux-Kontext haben.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

In diesem Fall wissen wir, dass die Datei ssl.conf den richtigen Sicherheitskontext hat. Aber die httpd.conf hat eine falsche.

Wir ändern also den Sicherheitskontext der Datei httpd.conf, verwenden aber den Kontext von ssl.conf als Referenz für diese Änderung, wie unten gezeigt.

# chcon --reference=ssl.conf httpd.conf

Nach der obigen Änderung können Sie sehen, dass die Datei httpd.conf denselben Sicherheitskontext wie die Datei ssl.conf hat.

# ls -lZ
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 ssl.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Um den aktuellen Status von SELinux anzuzeigen, verwenden Sie den Befehl sestatus. Es ist wichtig, dass Sie die Ausgabe des sestatus-Befehls verstehen, wie hier erklärt:3 SELinux sestatus-Befehlsausgabe mit Beispielen erklärt

3. Ändern Sie nur den BENUTZER im SELinux-Kontext

Anstatt den gesamten SELinux-Sicherheitskontext zu ändern, können wir auch nur einen Teilwert davon ändern.

Das Folgende ist der aktuelle Sicherheitskontext der Datei httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 httpd.conf

Im obigen Beispiel ist „unconfined_u“ der USER-Teil des Sicherheitskontexts.

Mit der Option chcon -u können wir nur den Benutzerteil des Sicherheitskontexts ändern.

Im folgenden Beispiel setzen wir den Benutzerteil des Sicherheitskontexts für die Datei httpd.conf auf system_u.

# chcon -u system_u httpd.conf

Wie Sie der folgenden Ausgabe entnehmen können, wird nur der USER-Teil des Sicherheitskontexts für die Datei httpd.conf geändert.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Sie können auch –user anstelle von -u verwenden. Die beiden folgenden Befehle sind genau gleich.

# chcon --user system_u httpd.conf

# chcon -u system_u httpd.conf

4. Ändern Sie nur die ROLLE im SELinux-Kontext

Mit der Option chcon -r können wir nur den ROLE-Teil des Sicherheitskontextes ändern.

Im folgenden Beispiel setzen wir den Rollenteil des Sicherheitskontexts auf object_r für die Datei httpd.conf.

# chcon -r object_r httpd.conf

Wie Sie der folgenden Ausgabe entnehmen können, wird nur der ROLE-Teil des Sicherheitskontexts für die Datei httpd.conf geändert.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Wenn Sie eine Rolle vergeben, die von SELinux nicht erkannt wird, erhalten Sie den folgenden Fehler „Ungültiges Argument“. In diesem Beispiel gibt es keine Rolle wie „identity_r“.

# chcon -r identity_r httpd.conf
chcon: failed to change context of ‘httpd.conf’ to ‘system_u:identity_r:admin_home_t:s0’: Invalid argument

Sie können auch –role anstelle von -r verwenden. Die beiden folgenden Befehle sind genau gleich.

# chcon --role object_r httpd.conf

# chcon -r object_r httpd.conf

5. Ändern Sie nur den TYP im SELinux-Kontext

Dies werden Sie wahrscheinlich am häufigsten verwenden, da wir uns in einem typischen SELinux-Setup die meiste Zeit mit TYPE befassen.

Das Folgende ist der aktuelle Sicherheitskontext der Datei httpd.conf.

# ls -lZ httpd.conf 
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 httpd.conf

Im obigen Beispiel ist „admin_home_t“ der TYPE-Teil des Sicherheitskontexts.

Mit der Option chcon -t können wir nur den Typteil des Sicherheitskontexts ändern.

Im folgenden Beispiel setzen wir den Typteil des Sicherheitskontexts auf httpd_config_t für die Datei httpd.conf.

# chcon -t httpd_config_t httpd.conf

Wie Sie der folgenden Ausgabe entnehmen können, wird nur der TYPE-Teil des Sicherheitskontexts für die Datei httpd.conf geändert.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Sie können auch –type anstelle von -t verwenden. Die beiden folgenden Befehle sind genau gleich.

# chcon -t httpd_config_t httpd.conf

# chcon --type httpd_config_t httpd.conf

6. Ändern Sie nur den RANGE (Level) im SELinux-Kontext

Mit der Option chcon -l können wir nur den RANGE-Teil (der auch als Ebene bezeichnet wird) des Sicherheitskontexts ändern. Die Reichweite wird nur in MLS verwendet und in einer typischen Situation ändern wir die Reichweite möglicherweise nicht.

Im folgenden Beispiel setzen wir den Bereichsteil des Sicherheitskontexts für die Datei httpd.conf auf „s0“.

# chcon -l s0 httpd.conf

Wie Sie der folgenden Ausgabe entnehmen können, wird nur der ROLE-Teil des Sicherheitskontexts für die Datei httpd.conf geändert.

# ls -lZ httpd.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 httpd.conf

Sie können auch –range anstelle von -l verwenden. Die beiden folgenden Befehle sind genau gleich.

# chcon -l s0 httpd.conf

# chcon --range s0 httpd.conf

7. Kombinieren Sie Benutzer, Rolle, Typ und Ebene in chcon

Sie können die Option Benutzer (-u), Rolle (-r), Typ (-t) oder Ebene (-l) in chcon kombinieren.

Im Folgenden werden beispielsweise alle vier wie unten gezeigt geändert.

# chcon -u system_u -r object_r  -t httpd_config_t -l s0 httpd.conf

Oder Sie können nur wenige davon gleichzeitig mischen und anpassen und ändern. Im folgenden Beispiel ändern wir beispielsweise nur USER und TYPE der Datei httpd.conf.

# chcon -u system_u -t httpd_config_t httpd.conf

8. Standardverhalten von Chcon bei symbolischem Link

Im folgenden Beispiel ist apache.conf ein symbolischer Link zur Datei httpd.conf. Beide haben den falschen Sicherheitskontext.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Im folgenden Beispiel ändere ich USER und TYPE für den symbolischen Link apache.conf.

# chcon -u system_u -t httpd_config_t apache.conf

ABER, wie Sie hier sehen, hat dies den SELinux-Kontext für die Datei, auf die es zeigt, wirklich geändert, anstatt ihn für den symbolischen Link zu ändern.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. system_u:object_r:httpd_config_t:s0 httpd.conf

Dies ist das Standardverhalten des Befehls chcon. Das heißt, es ändert den Kontext der Datei, auf die es zeigt, anstatt des symbolischen Links selbst.

Dieses Verhalten wird als Dereferenzierung bezeichnet. Chcon hat eine Option namens –dereference, die die Datei anstelle des symbolischen Links ändert.

Beide der folgenden Beispiele sind genau gleich.

# chcon -u system_u -t httpd_config_t apache.conf

# chcon --dereference -u system_u -t httpd_config_t apache.conf

9. Erzwinge die Änderung des SELinux-Kontexts des symbolischen Links

Anstatt den Sicherheitskontext der Datei zu ändern, auf die durch einen symbolischen Link verwiesen wird, können Sie chcon auch zwingen, den Kontext des symbolischen Links selbst zu ändern.

Im folgenden Beispiel ist apache.conf ein symbolischer Link zur Datei httpd.conf. Beide haben den falschen Sicherheitskontext.

# ls -lZ
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Wenn wir die Option –no-dereference in chcon angeben, wird der Kontext des symbolischen Links geändert und nicht die Datei, auf die er zeigt.

Das folgende Beispiel ändert also USER und TYPE für den symbolischen Link apache.conf (und nicht die Datei httpd.conf).

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

Wie Sie im Folgenden sehen, wird nur der SELinux-Kontext des symbolischen Links apache.conf in den oben angegebenen geändert.

# ls -lZ
lrwxrwxrwx. system_u:object_r:httpd_config_t:s0 apache.conf -> httpd.conf
-rw-r--r--. unconfined_u:object_r:admin_home_t:s0 httpd.conf

Anstelle von –no-dereference können wir auch die Option „-h“ angeben, wie unten gezeigt.

Die beiden folgenden Befehle sind genau gleich.

# chcon -h -u system_u -t httpd_config_t apache.conf

# chcon --no-dereference -u system_u -t httpd_config_t apache.conf

10. SELinux-Kontext rekursiv ändern

In diesem Beispiel folgt der aktuelle Linux-Sicherheitskontext aller Dateien unter conf.d

# ls -lZ conf.d/
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 autoindex.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 nss.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 README
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 userdir.conf
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 welcome.conf

Mit der rekursiven Option chcon -R können wir alle Dateien in der conf.d rekursiv in den gegebenen Sicherheitskontext ändern, wie unten gezeigt.

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

Wie Sie unten sehen, wird der Kontext für alle Dateien in der conf.d

rekursiv geändert
# ls -lZ conf.d
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 autoindex.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 nss.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 README
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 userdir.conf
-rw-r--r--. root root system_u:object_r:httpd_config_t:s0 welcome.conf

Hinweis:Wenn es andere Unterverzeichnisse innerhalb von conf.d gibt, werden alle diese Unterverzeichnisse und die darunter liegenden Dateien ebenfalls von der Option -R beeinflusst.

Sie können auch die Option –rekursiv verwenden. Die beiden folgenden Befehle sind genau gleich.

# chcon --recursive system_u:object_r:httpd_config_t:s0 conf.d

# chcon -R system_u:object_r:httpd_config_t:s0 conf.d

11. Ausführliche Details des chcon-Vorgangs anzeigen

Mit der Option -v können Sie die Details darüber anzeigen, was chcon tut.

-v steht für verbose, was den Namen der Datei anzeigt, die gerade vom chcon-Befehl verarbeitet wird, wie unten gezeigt.

Dies ist sehr hilfreich, wenn Sie mit der rekursiven Option -R kombinieren, wo Sie möglicherweise den Kontext vieler Dateien ändern und sehen möchten, was chcon gerade tut, wie unten gezeigt.

# chcon -Rv system_u:object_r:httpd_config_t:s0 conf.d
changing security context of ‘conf.d/README’
changing security context of ‘conf.d/autoindex.conf’
changing security context of ‘conf.d/userdir.conf’
changing security context of ‘conf.d/welcome.conf’
changing security context of ‘conf.d/nss.conf’
changing security context of ‘conf.d’

12. Chcon-Standardverhalten bei symbolischen Links für rekursiv

In diesem Beispiel ist „config“ ein symbolischer Link zum Verzeichnis „conf.d“, wie unten gezeigt.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Wenn Sie eine rekursive Operation auf einem symbolischen Link ausführen, wird die Verzeichnisstruktur standardmäßig nicht durchlaufen.

Sie können dies sehen, indem Sie die Option -v mit -R kombinieren, wodurch keine Dateinamen in der Ausgabe angezeigt werden. Dies zeigt an, dass der symbolische Link „config“ nicht durchlaufen wird.

# chcon -Rv -t httpd_config_t config
changing security context of ‘configuration’

Auf dieses Standardverhalten wird auch durch die Option -P (großes P) verwiesen.

Die beiden folgenden Befehle sind also genau gleich. Beide werden keine symbolischen Links durchlaufen.

# chcon -Rv -t httpd_config_t config

# chcon -RPv -t httpd_config_t configuration

13. Zwingt chcon, bestimmte symbolische Links für rekursiv zu durchlaufen

In diesem Beispiel ist „config“ ein symbolischer Link zum Verzeichnis „conf.d“, wie unten gezeigt.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Wenn Sie im chcon-Befehl ein Symbol angeben, können Sie chcon zwingen, es zu durchlaufen, indem Sie die Option -H wie unten gezeigt verwenden.

Wie Sie der folgenden Ausgabe entnehmen können, durchläuft chcon den symbolischen Link der Konfiguration und verarbeitet alle Dateien, wenn wir die Option „-H“ zusammen mit der Option „-R“ angegeben haben.

# chcon -RHv -t httpd_config_t config
changing security context of ‘config/README’
changing security context of ‘config/autoindex.conf’
changing security context of ‘config/userdir.conf’
changing security context of ‘config/welcome.conf’
changing security context of ‘config/nss.conf’
changing security context of ‘config/ndd’
changing security context of ‘config’

14. Erzwinge chcon, ALLE symbolischen Links für rekursiv zu durchlaufen

In diesem Beispiel ist „config“ ein symbolischer Link zum Verzeichnis „conf.d“, wie unten gezeigt.

# ls -lZ
drwxr-xr-x. system_u:object_r:httpd_config_t:s0 conf.d
lrwxrwxrwx. unconfined_u:object_r:admin_home_t:s0 config -> conf.d

Im folgenden Beispiel haben wir im Konfigurationsverzeichnis das Verzeichnis „ndd“, das ein symbolischer Link ist.

# ls -l configuration/ndd
lrwxrwxrwx. 1 root root 6 Jul  8 00:13 configuration/ndd -> ../ndd

Wenn Sie möchten, dass der Befehl chcon alle symbolischen Links durchläuft, auf die er während der rekursiven Operation trifft, sollten Sie die Option -L angeben.

Die folgende Option hat die Option -L mit der Option -R kombiniert. Dies durchquert jede symbolische Verbindung, auf die es trifft. Wie Sie beispielsweise unten sehen, hat dies den symbolischen Link „ndd“ durchlaufen und alle Dateien entsprechend verarbeitet.

# chcon -RLv -t httpd_config_t configuration
changing security context of ‘configuration/README’
changing security context of ‘configuration/autoindex.conf’
changing security context of ‘configuration/userdir.conf’
changing security context of ‘configuration/welcome.conf’
changing security context of ‘configuration/nss.conf’
changing security context of ‘configuration/ndd/nd1-conf’
changing security context of ‘configuration/ndd/nd2-conf’
changing security context of ‘configuration/ndd/nd3-conf’
changing security context of ‘configuration/ndd/nd-main.conf’
changing security context of ‘configuration/ndd’
changing security context of ‘configuration’

Hinweis:Wenn Sie die Option -P, oder -H oder -L (zusammen mit -R) angeben und diese aus irgendeinem Grund kombiniert haben, wird die als letzte Option angegebene Option wirksam.

15. Chcon-Verhalten im /root-Verzeichnis für systemweite Änderung

Standardmäßig können Sie chcon verwenden, um den SELinux-Kontext für alle Dateien unter Ihrem Root-Dateisystem wie unten gezeigt rekursiv zu ändern.

Dies nennt man die Root-Option nicht beibehalten (d. h. –no-preserve-root ist das Standardverhalten)

WARNUNG:Führen Sie diesen Befehl nicht auf Ihrem System aus. Am Ende haben Sie ein unbrauchbares System. Die beiden folgenden Befehle verhalten sich genau gleich.

chcon -Rv system_u:object_r:httpd_config_t:s0 /

chcon -Rv --no-preserve-root system_u:object_r:httpd_config_t:s0 /

Es wird jedoch nicht empfohlen, es sei denn, Sie wissen, was Sie tun, da Sie nicht möchten, dass der SELinux-Kontext für alle Dateien auf Ihrem System gleich ist. Wenn Sie einen Fehler gemacht und einen falschen Kontext für eine Datei festgelegt haben, möchten Sie vielleicht verstehen, wie der Befehl restorecon verwendet wird, um den SELinux-Kontext wiederherzustellen

Wenn Sie die Option –no-preserve-root angeben, wird das Root-Verzeichnis nicht durchlaufen, wenn Sie es wie unten gezeigt als Befehlszeilenoption angeben.

# chcon -Rv --preserve-root system_u:object_r:httpd_config_t:s0 /
chcon: it is dangerous to operate recursively on `/'
chcon: use --no-preserve-root to override this failsafe

Da das Standardverhalten gefährlich ist, um versehentliche Fehler zu vermeiden, empfehle ich Ihnen, jedes Mal, wenn Sie die rekursive Option -R in einem riesigen Verzeichnis ausführen (insbesondere aus einem Shell-Skript), die Verwendung von –preserve-root. Wenn Sie also versehentlich / am Ende des chcon-Befehls eingeben, werden nicht versehentlich alle Dateien in Ihrem System geändert.


Linux
  1. 7 Beispiele für Linux-df-Befehle

  2. 8 Linux TR-Befehlsbeispiele

  3. 5 Beispiele für Linux-Touch-Befehle (So ändern Sie den Dateizeitstempel)

  4. chcon-Befehlsbeispiele unter Linux

  5. setenforce-Befehlsbeispiele in Linux

3 SELinux sestatus Befehlsausgabe mit Beispielen erklärt

10 Linux-restorecon-Befehlsbeispiele zum Wiederherstellen des SELinux-Kontexts

7 praktische Linux-Locate-Befehlsbeispiele – mlocate und updatedb

sestatus-Befehlsbeispiele in Linux

id-Befehlsbeispiele in Linux

du-Befehlsbeispiele in Linux