GNU/Linux >> Linux Esercitazione >  >> Linux

15 Esempi di comandi SELinux chcon per modificare il contesto di sicurezza

In SELinux, una delle attività più frequenti che puoi eseguire è modificare il contesto di sicurezza di un oggetto. Per questo, utilizzerai il comando chcon.

chcon sta per Cambia contesto.

Questo comando viene utilizzato per modificare il contesto di sicurezza di SELinux di un file.

Questo tutorial spiega i seguenti esempi di comandi chcon:

  1. Cambia il contesto completo di SELinux
  2. Cambia il contesto utilizzando un altro file come riferimento
  3. Cambia solo l'utente nel contesto SELinux
  4. Cambia solo il ruolo nel contesto SELinux
  5. Cambia solo il tipo nel contesto SELinux
  6. Cambia solo l'intervallo (livello) nel contesto di SELinux
  7. Combina utente, ruolo, tipo, livello in chcon
  8. Comportamento predefinito di Chcon sul collegamento simbolico
  9. Forza la modifica del contesto SELinux del collegamento simbolico
  10. Cambia il contesto di SELinux in modo ricorsivo
  11. Visualizza dettagli dettagliati dell'operazione chcon
  12. Comportamento predefinito Chcon sui collegamenti simbolici per ricorsivi
  13. Forza chcon per attraversare i collegamenti simbolici specificati per il ricorsivo
  14. Forza chcon ad attraversare TUTTI i collegamenti simbolici per ricorsivo
  15. Comportamento Chcon su / directory root per modifiche a livello di sistema

1. Modifica il contesto SELinux completo

Per visualizzare il contesto di sicurezza di un file, usa l'opzione -Z (Z maiuscola) nel comando ls come mostrato di seguito.

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

Nell'esempio precedente, il contesto di sicurezza del file httpd.conf è il seguente:

unconfined_u:object_r:admin_home_t:s0

Questo è un contesto SELinux errato per il file httpd.conf che si trova nella directory /etc/httpd/conf.

Quindi, per cambiare il contesto di sicurezza, usa il seguente comando chcon.

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

Nell'esempio sopra, abbiamo modificato il contesto di sicurezza del file httpd.conf nel seguente, che è quello corretto.

system_u:object_r:httpd_config_t:s0

Possiamo verificarlo usando il seguente comando ls -lZ.

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

Nota:nell'esempio sopra, stiamo fornendo il contesto SELinux completo di un file (ovvero utente, ruolo, tipo e intervallo) nel formato utente:ruolo:tipo:intervallo senza interromperlo ulteriormente.

Ogni volta che ti trovi di fronte ad alcuni problemi relativi a SELinux, potresti essere tentato di disabilitare semplicemente SELinux come abbiamo spiegato in precedenza. Ma, in molte situazioni, potresti scoprire che è solo che il file in questione ha un contesto di sicurezza errato, che può essere modificato usando il comando chcon.

2. Cambia contesto usando un altro file come riferimento

A volte potresti non sapere quale contesto SELinux dovresti impostare per un file.

In tal caso, puoi utilizzare il contesto di sicurezza di un altro file come riferimento e utilizzarlo per assegnarlo al tuo file.

Fondamentalmente, invece di specificare il contesto SELinux completo per il file, stai semplicemente usando il contesto di un altro file per il tuo file.

Nell'esempio seguente, vediamo che sia ssl.conf che httpd.conf hanno un contesto SELinux diverso.

# 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 questo caso, sappiamo che il file ssl.conf ha il contesto di sicurezza corretto. Ma httpd.conf ne ha uno errato.

Quindi, cambieremo il contesto di sicurezza del file httpd.conf, ma useremo il contesto di ssl.conf come riferimento per questa modifica, come mostrato di seguito.

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

Dopo la modifica di cui sopra, puoi vedere che il file httpd.conf ha lo stesso contesto di sicurezza del file ssl.conf.

# 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

In una nota correlata, per visualizzare lo stato corrente di SELinux utilizzare il comando sestatus. È importante comprendere l'output del comando sestatus come spiegato qui:3 Output del comando sestatus di SELinux spiegato con esempi

3. Cambia solo l'UTENTE nel contesto SELinux

Invece di cambiare l'intero contesto di sicurezza di SELinux, possiamo anche cambiarne solo un valore parziale.

Quello che segue è il contesto di sicurezza corrente del file httpd.conf.

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

Nell'esempio sopra, "unconfined_u" è la parte USER del contesto di sicurezza.

Usando l'opzione chcon -u, possiamo cambiare solo la parte utente del contesto di sicurezza.

Nell'esempio seguente, stiamo impostando la parte utente del contesto di sicurezza su system_u per il file httpd.conf.

# chcon -u system_u httpd.conf

Come puoi vedere dal seguente output, solo la parte USER del contesto di sicurezza viene modificata per il file httpd.conf.

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

Puoi anche usare –user invece di -u. Entrambi i seguenti comandi sono esattamente gli stessi.

# chcon --user system_u httpd.conf

# chcon -u system_u httpd.conf

4. Cambia solo il RUOLO nel contesto di SELinux

Usando l'opzione chcon -r, possiamo cambiare solo la parte ROLE del contesto di sicurezza.

Nell'esempio seguente, stiamo impostando la parte del ruolo del contesto di sicurezza su object_r per il file httpd.conf.

# chcon -r object_r httpd.conf

Come si vede dall'output seguente, solo la parte ROLE del contesto di sicurezza viene modificata per il file httpd.conf.

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

Quando assegni un ruolo che non è riconosciuto da SELinux, otterrai il seguente errore di argomento non valido. In questo esempio, non esiste un ruolo come "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

Puoi anche usare –role invece di -r. Entrambi i seguenti comandi sono esattamente gli stessi.

# chcon --role object_r httpd.conf

# chcon -r object_r httpd.conf

5. Cambia solo il TIPO nel contesto di SELinux

Questo è probabilmente ciò che utilizzerai maggiormente, poiché TYPE è ciò di cui ci occupiamo la maggior parte del tempo in una tipica configurazione di SELinux.

Quello che segue è il contesto di sicurezza corrente del file httpd.conf.

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

Nell'esempio sopra, "admin_home_t" è la parte TYPE del contesto di sicurezza.

Usando l'opzione chcon -t, possiamo cambiare solo la parte del tipo del contesto di sicurezza.

Nell'esempio seguente, stiamo impostando la parte del tipo del contesto di sicurezza su httpd_config_t per il file httpd.conf.

# chcon -t httpd_config_t httpd.conf

Come puoi vedere dall'output seguente, solo la parte TYPE del contesto di sicurezza viene modificata per il file httpd.conf.

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

Puoi anche usare –type invece di -t. Entrambi i seguenti comandi sono esattamente gli stessi.

# chcon -t httpd_config_t httpd.conf

# chcon --type httpd_config_t httpd.conf

6. Modifica solo il RANGE (Livello) nel contesto di SELinux

Usando l'opzione chcon -l, possiamo cambiare solo la parte RANGE (che è anche chiamata livello) del contesto di sicurezza. L'intervallo viene utilizzato solo in MLS e in una situazione tipica potremmo non modificare l'intervallo.

Nell'esempio seguente, stiamo impostando la parte dell'intervallo del contesto di sicurezza su "s0" per il file httpd.conf.

# chcon -l s0 httpd.conf

Come si vede dall'output seguente, solo la parte ROLE del contesto di sicurezza viene modificata per il file httpd.conf.

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

Puoi anche usare –range invece di -l. Entrambi i seguenti comandi sono esattamente gli stessi.

# chcon -l s0 httpd.conf

# chcon --range s0 httpd.conf

7. Combina Utente, Ruolo, Tipo, Livello in chcon

Puoi combinare l'opzione utente (-u), ruolo (-r), tipo (-t) o livello (-l) in chcon.

Ad esempio, quanto segue li cambierà tutti e quattro come mostrato di seguito.

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

Oppure puoi mescolare e abbinare e cambiarne solo pochi alla volta. Ad esempio, nell'esempio seguente, stiamo modificando solo USER e TYPE del file httpd.conf.

# chcon -u system_u -t httpd_config_t httpd.conf

8. Comportamento predefinito di Chcon sul collegamento simbolico

Nell'esempio seguente, apache.conf è un collegamento simbolico al file httpd.conf. Entrambi hanno il contesto di sicurezza sbagliato.

# 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

Nell'esempio seguente, sto modificando USER e TYPE per il collegamento simbolico apache.conf.

# chcon -u system_u -t httpd_config_t apache.conf

MA, come puoi vedere qui, questo ha davvero cambiato il contesto di SELinux per il file a cui punta invece di cambiarlo per il collegamento simbolico.

# 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

Questo è il comportamento predefinito del comando chcon. cioè cambierà il contesto del file a cui punta invece del collegamento simbolico stesso.

Questo comportamento è chiamato come dereferenziazione. Chcon ha un'opzione chiamata –dereference che cambierà il file invece del collegamento simbolico.

Entrambi i seguenti esempi sono esattamente uguali.

# chcon -u system_u -t httpd_config_t apache.conf

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

9. Forza la modifica del contesto SELinux del collegamento simbolico

Invece di modificare il contesto di sicurezza del file a cui fa riferimento un collegamento simbolico, puoi anche forzare chcon a cambiare il contesto del collegamento simbolico stesso.

Nell'esempio seguente, apache.conf è un collegamento simbolico al file httpd.conf. Entrambi hanno il contesto di sicurezza sbagliato.

# 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

Quando specifichiamo l'opzione –no-dereference in chcon, cambierà il contesto del collegamento simbolico e non il file a cui punta.

Quindi, l'esempio seguente cambierà il collegamento simbolico USER e TYPE per apache.conf (e non il file httpd.conf).

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

Come puoi vedere da quanto segue, solo il contesto SELinux del collegamento simbolico apache.conf è cambiato in quello che abbiamo specificato sopra.

# 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

Invece di –no-dereference, possiamo anche specificare l'opzione '-h' come mostrato di seguito.

Entrambi i seguenti comandi sono esattamente gli stessi.

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

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

10. Modifica ricorsivamente il contesto di SELinux

In questo esempio, il seguente contesto linux di sicurezza corrente di tutti i file in 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

Usando l'opzione ricorsiva chcon -R, possiamo cambiare ricorsivamente tutti i file in conf.d nel contesto di sicurezza fornito come mostrato di seguito.

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

Come puoi vedere di seguito, il contesto viene modificato in modo ricorsivo per tutti i file in conf.d

# 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

Nota:se ci sono altre sottodirectory all'interno di conf.d, anche tutte quelle sottodirectory e i file sottostanti saranno interessati dall'opzione -R.

Puoi anche usare l'opzione –ricorsiva. Entrambi i seguenti comandi sono esattamente gli stessi.

# 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. Visualizza dettagli dettagliati sull'operazione chcon

Usando l'opzione -v, puoi visualizzare i dettagli di ciò che sta facendo chcon.

-v sta per verbose, che visualizzerà il nome del file che viene attualmente elaborato dal comando chcon come mostrato di seguito.

Questo è molto utile quando stai combinando con l'opzione -R ricorsiva, dove potresti cambiare il contesto di molti file e ti piace vedere cosa sta facendo chcon come mostrato di seguito.

# 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. Comportamento predefinito Chcon sui collegamenti simbolici per ricorsivi

In questo esempio, "config" è un collegamento simbolico alla directory conf.d come mostrato di seguito.

# 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

Per impostazione predefinita, quando esegui un'operazione ricorsiva su un collegamento simbolico, non attraverserà la struttura della directory.

Puoi vederlo combinando l'opzione -v con -R, che non mostra alcun nome di file nell'output. Ciò indica che non sta attraversando il collegamento simbolico "config".

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

Questo comportamento predefinito è anche referenziato dall'opzione -P (P maiuscola).

Quindi, entrambi i seguenti comandi sono esattamente gli stessi. Entrambi non attraverseranno collegamenti simbolici.

# chcon -Rv -t httpd_config_t config

# chcon -RPv -t httpd_config_t configuration

13. Forza chcon per attraversare i collegamenti simbolici specificati per il ricorsivo

In questo esempio, "config" è un collegamento simbolico alla directory conf.d come mostrato di seguito.

# 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

Quando specifichi un simbolico nel comando chcon, puoi forzare chcon ad attraversarlo usando l'opzione -H come mostrato di seguito.

Come puoi vedere dal seguente output, chcon sta attraversando il collegamento simbolico di configurazione ed elabora tutti i file quando abbiamo specificato l'opzione "-H" insieme all'opzione "-R".

# 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. Forza chcon ad attraversare TUTTI i collegamenti simbolici per ricorsivi

In questo esempio, "config" è un collegamento simbolico alla directory conf.d come mostrato di seguito.

# 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

Nell'esempio seguente, all'interno della directory config, abbiamo la directory "ndd", che è un collegamento simbolico.

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

Se vuoi che il comando chcon attraversi tutto il collegamento simbolico che incontra durante l'operazione ricorsiva, devi specificare l'opzione -L.

L'opzione seguente ha combinato l'opzione -L con l'opzione -R. Questo attraverserà ogni collegamento simbolico che incontra. Ad esempio, come puoi vedere di seguito, questo ha attraversato il collegamento simbolico "ndd" ed ha elaborato tutti i file di conseguenza.

# 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’

Nota:quando specifichi l'opzione -P, o -H o -L (insieme a -R), se per qualche motivo le hai combinate, qualsiasi cosa sia specificata come ultima opzione avrà effetto.

15. Comportamento Chcon su / directory root per modifiche a livello di sistema

Per impostazione predefinita, puoi usare chcon per cambiare ricorsivamente il contesto SELinux su tutti i file nel tuo filesystem di root come mostrato di seguito.

Questo è chiamato non preservare l'opzione root (cioè –no-preserve-root è il comportamento predefinito)

ATTENZIONE:non eseguire questo comando sul tuo sistema. Finirai per avere un sistema inutilizzabile. Entrambi i seguenti comandi si comporteranno esattamente allo stesso modo.

chcon -Rv system_u:object_r:httpd_config_t:s0 /

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

Ma non è raccomandato, a meno che tu non sappia cosa stai facendo, poiché non vuoi che il contesto SELinux per tutti i file sul tuo sistema sia lo stesso. Se hai commesso un errore e hai impostato un contesto errato su un file, potresti voler capire come usare il comando restorecon per ripristinare il contesto SELinux

Quando specifichi l'opzione –no-preserve-root, non attraverserà la radice, quando la specifichi come opzione della riga di comando come mostrato di seguito.

# 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

Poiché il comportamento predefinito è pericoloso, per evitare errori accidentali, ogni volta che si esegue l'opzione -R ricorsiva su una directory enorme (specialmente dall'interno di uno script di shell), si consiglia di utilizzare –preserve-root. In questo modo per errore se dai / alla fine del comando chcon, non cambierà accidentalmente tutti i file nel tuo sistema.


Linux
  1. 8 Esempi di comandi TR Linux

  2. 5 esempi di comandi touch di Linux (come modificare il timestamp dei file)

  3. Esempi di comandi rm in Linux

  4. ps Esempi di comandi in Linux

  5. Esempi di comandi dnf

3 Spiegazione dell'output del comando di SELinux sestatus con esempi

10 Esempi di comandi Linux restorecon per ripristinare il contesto SELinux

7 Esempi pratici di comandi di localizzazione di Linux – mlocate e updateb

sestatus Esempi di comandi in Linux

Esempi di comandi id in Linux

du Esempi di comandi in Linux