chmodding files con un contesto di sicurezza / ACL SELinux


2

Ok, quindi ho un sacco di bash& pythonscript che ho scritto, tutti insieme in una grande directory. Bene, in realtà ci sono sottodirectory separate, ma sono tutte nidificate in questa directory principale.
Quindi per amor di argomenti, la struttura delle directory è simile a questa:

find . -type d
.
./scripts/sh
./scripts/sh/a
./scripts/sh/b
./scripts/sh/c
./scripts/py
./scripts/py/x
./scripts/py/y
./scripts/py/z

Comunque, ho provato a rendere eseguibile l'intera raccolta di script, tutto in un colpo solo con finde chmod:

find . -type f -exec chmod +x {} +

Di solito, questo è tutto ciò che dovrei fare, ma ho notato che il +xbit era ancora non impostato. Tutti i loro permessi sono ancora così:

ls -l ./scripts/py/z
-rw-rw----.  1 root 1015  801 May  7 12:00 script_name.py

Presumibilmente. il .carattere (che segue i flag di autorizzazione) implica una sorta di contesto di sicurezza SELinux, con un elenco di controllo degli accessi o simile. Ho controllato con getfacl, non sapendo davvero cosa perdermi; il primo è una directory, il secondo è uno dei file di script:

getfacl -acp ./scripts/py/z &&
getfacl -acp ./scripts/py/z/*
user::rwx
group::rwx
other::--x

user::rw-
group::rw-
other::---

Ho sperimentato le seguenti setfaclopzioni, senza risultati:

setfacl --help | grep 'remove'
  -x, --remove=acl        remove entries from the ACL(s) of file(s)
  -X, --remove-file=file  read ACL entries to remove from file
  -b, --remove-all        remove all extended ACL entries
  -k, --remove-default    remove the default ACL

Quindi, in una situazione in cui l' rootautorità dell'utente non è rispettata e sudonon serve a nulla, devo chiedere; Come posso recuperare il controllo di accesso dei miei file?

Migrato da security.stackexchange.com


Se questa domanda appartiene altrove, inoltrarla al sito pertinente, anziché chiuderla. Grazie.
tjt263,

La chiusura può essere utilizzata insieme alla migrazione (esiste un motivo di votazione per chiudere "Appartiene a un altro sito").
foresta

Normalmente il bit seuid ha senso solo sull'eseguibile e non sugli script. Ciò che viene eseguito per uno script Python sarà l'eseguibile Python.

Risposte:


3

I contesti ACL e SELinux sono completamente diversi. C'è un buon tutorial qui per CentOS

Per vedere se SELinux è effettivamente ciò che sta bloccando l'accesso sestatus

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

Enforcing nella mia uscita dice che SELinux sta attivamente bloccando gli accessi fuori contesto.

Impostare temporaneamente SELinux su permissivo usando # sudo setenforce Permissive

$ sudo setenforce Permissive
[sudo] password for trogdor: 
$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

La modalità permissiva ti avviserà comunque delle violazioni del contesto SELinux ma non le bloccherà. Questo è un buon modo per verificare se SELinux è effettivamente il problema. Se lo era, e ora funziona tutto, riportare SELinux su Enforcing con sudo setenforce Enforcing. (a parte le modifiche a SELinux con setenforce non sopravviverà al riavvio).

Se SELinux è il problema, devi trovare il contesto corretto in cui dovrebbero essere gli script, o forse è una soluzione semplice con un valore booleano.

Se ti trovi nella tua home directory potrebbe essere semplice come impostare un booleano SELinux. Per visualizzare i booleani, c'è una descrizione dei booleani CentOS qui ma noto che il mio esempio user_exec_content di seguito non è elencato lì, uno strumento più conveniente per le descrizioni booleane è il semanage booleano -l

# getsebool -a | grep exec
...
user_exec_content --> off
...

#sudo semanage boolean -l
...
user_exec_content              (off  ,   off)  Allow user to exec content
...

Il primo off mostra il suo stato corrente, che è attualmente impostato su off; il prossimo off mostra l'impostazione predefinita, il che significa che sarà comunque spento dopo il riavvio o la rietichettatura del file system.

In tal caso, utilizzare #setsebool -P user_exec_content on il flag -P per rendere permanente la modifica booleana al riavvio

Se si tratta di un problema di contesto, bene, i contesti sono molto più belli con cui lavorare perché sono più intuitivi. Sembra essere prova, errore ed esperienza su ciò che effettivamente fa cosa con i booleani SELinux, per esempio, non ho idea di cosa faccia effettivamente user_exec_content.

Utilizzare il flag -Z con ls per visualizzare il contesto dei file, ad es. ls -alZ.

$ ls -alZ
-rwxrwxr-x. trogdor trogdor unconfined_u:object_r:user_home_t:s0 backup.sh

Qui user_home_t è il contesto per backup.sh. Supponi di avere un'altra directory con i contesti corretti per eseguire gli script, puoi rispecchiare quel contesto nella directory ./scripts usando:

# chcon -R --reference /onethatworks ./scripts

Per ricontrollare la modifica è stata utilizzata ls -alZ ./scripts

restorecon -Rv ./scripts 

dovrebbe rietichettare nuovamente il filesystem, rietichettando ricorsivamente tutti i file e le directory nei contesti aggiornati. In questo caso sta solo facendo la directory degli script e il suo contenuto.

Se funziona, le modifiche apportate qui non sopravvivranno al riavvio e puoi utilizzare quanto segue per rendere permanente la modifica.

# semanage fcontext -a -s system_u -t <context_that_worked> "./scripts(/.*)?

Un'altra opzione per la gestione di SELinux è l'installazione in policycoreutils-guimodo da poter accedere a una GUI di configurazione selinux inserendo # system-config-selinux. Filtrando usando 'script' ho scoperto che molti script usano bin_t come contesto. Puoi anche cambiare la modalità di applicazione con essa. I miei script nella mia home directory vengono eseguiti felicemente user_home_tma sospetto che tu sia altrove se stai riscontrando questi problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.