L'accesso privilegiato a file e directory è effettivamente determinato dalle capacità, non solo dall'essere root
o no. In pratica, root
di solito ha tutte le capacità possibili, ma ci sono situazioni in cui tutte/molte di esse potrebbero essere abbandonate o alcune potrebbero essere date ad altri utenti (i loro processi).
In breve, hai già descritto come funzionano i controlli di controllo degli accessi per un processo privilegiato. Ecco come le diverse funzionalità lo influenzano effettivamente:
La capacità principale qui è CAP_DAC_OVERRIDE
, un processo che può "ignorare i controlli di autorizzazione di lettura, scrittura ed esecuzione dei file". Ciò include la lettura e la scrittura su qualsiasi file, nonché la lettura, la scrittura e l'accesso alle directory.
In realtà non si applica all'esecuzione di file che non sono contrassegnati come eseguibili. Il commento in generic_permission
(fs/namei.c
), prima che l'accesso controlli i file, dice che
I DAC di lettura/scrittura sono sempre sovrascrivibili. I DAC eseguibili sono sovrascrivibili quando è impostato almeno un exec bit.
E il codice controlla che ci sia almeno un x
bit impostato se stai tentando di eseguire il file. Sospetto che sia solo una funzione utile, per evitare l'esecuzione accidentale di file di dati casuali e ottenere errori o risultati strani.
Ad ogni modo, se puoi ignorare le autorizzazioni, potresti semplicemente creare una copia eseguibile ed eseguirla. (Anche se in teoria potrebbe fare la differenza per i file setuid di un processo era in grado di ignorare i permessi dei file (CAP_DAC_OVERRIDE
), ma non disponeva di altre funzionalità correlate (CAP_FSETID
/CAP_FOWNER
/CAP_SETUID
). Ma avendo CAP_DAC_OVERRIDE
consente la modifica di /etc/shadow
e cose del genere, quindi è approssimativamente uguale ad avere comunque un accesso root completo.)
C'è anche il CAP_DAC_READ_SEARCH
capacità che consente di leggere qualsiasi file e accedere a qualsiasi directory, ma non di eseguirli o scriverli; e CAP_FOWNER
che consente a un processo di fare cose che di solito sono riservate solo al proprietario del file, come cambiare i bit di autorizzazione e il gruppo di file.
L'override dello sticky bit sulle directory è menzionato solo in CAP_FOWNER
, quindi sembra che CAP_DAC_OVERRIDE
non sarebbe sufficiente ignorarlo. (Ti darebbe il permesso di scrittura, ma di solito nelle directory appiccicose lo hai comunque, e +t
lo limita.)
(Penso che i dispositivi speciali qui contino come "file". Almeno generic_permission()
ha solo un controllo del tipo per le directory, ma non ho controllato al di fuori di questo.)
Naturalmente, ci sono ancora situazioni in cui anche le funzionalità non ti aiuteranno a modificare i file:
- alcuni file in
/proc
e/sys
, poiché non sono realmente file - SELinux e altri moduli di sicurezza che potrebbero limitare root
chattr
immutabile+i
e aggiungi solo+a
flag su ext2/ext3/ext4, entrambi bloccano anche root e impediscono anche la ridenominazione dei file ecc.- filesystem di rete, in cui il server può eseguire il proprio controllo di accesso, ad es.
root_squash
in NFS mappa root su nessuno - FUSE, che presumo potrebbe fare qualsiasi cosa
- montaggi di sola lettura
- dispositivi di sola lettura
È esattamente come hai notato per i permessi predefiniti:
-
Leggi e scrivi:
Per impostazione predefinita, l'utente root può accedere a qualsiasi file nel sistema. Puoi rimuovere questo accesso modificando gli attributi come spiegato qui:chattr. Questo è poi collegato alle capacità. -
Esegui:
L'utente root non ha il permesso di esecuzione a meno che non sia impostato almeno uno dei bit di esecuzione.
Il myFile.txt
è ottenuto da chmod 000 myFile.txt
.
0 no permission
1 execute
2 write
3 execute + write
4 read
5 read + execute
6 read + write
7 all
---------
significa che non ci sono permessi per utente, gruppo e altro.
L'utente root ha un senza restrizioni possibilità di modificare questo file. La lettura/scrittura è concessa. Per eseguire questo file l'utente root deve comunque renderlo eseguibile. (chmod 100 , 010 o 001)