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
/proce/sys, poiché non sono realmente file - SELinux e altri moduli di sicurezza che potrebbero limitare root
chattrimmutabile+ie aggiungi solo+aflag 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_squashin 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)