L'accesso privilegiato a file e directory è in realtà determinato dalle capacità, non solo dall'essere rooto meno. In pratica, di rootsolito ha tutte le possibilità possibili, ma ci sono situazioni in cui tutti / molti di essi potrebbero essere eliminati o alcuni dati ad altri utenti (i loro processi).
In breve, hai già descritto come funzionano i controlli di controllo dell'accesso per un processo privilegiato. Ecco come le diverse funzionalità la influenzano effettivamente:
La capacitàCAP_DAC_OVERRIDE principale qui è , un processo che lo ha può "bypassare la lettura, la scrittura e l'esecuzione dei controlli delle autorizzazioni". 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 trageneric_permission ( fs/namei.c), prima che l'accesso controlli i file, dice questo
I DAC di lettura / scrittura sono sempre ignorabili. I DAC eseguibili sono sostituibili quando è impostato almeno un bit di exec.
E il codice verifica che sia ximpostato almeno un bit se si sta tentando di eseguire il file. Sospetto che sia solo una funzione utile, per impedire l'esecuzione accidentale di file di dati casuali e ottenere errori o risultati strani.
Ad ogni modo, se puoi sovrascrivere le autorizzazioni, potresti semplicemente fare una copia eseguibile ed eseguirla. (Anche se potrebbe fare una differenza in teoria per i file setuid di un processo è stato in grado di sovrascrivere i permessi dei file ( CAP_DAC_OVERRIDE), ma non aveva altre capacità correlate ( CAP_FSETID/ CAP_FOWNER/ CAP_SETUID). Ma avendo permesso l' CAP_DAC_OVERRIDEediting /etc/shadowe cose del genere, quindi è approssimativamente uguale ad avere comunque l'accesso completo alla radice.)
C'è anche la CAP_DAC_READ_SEARCHcapacità che consente di leggere qualsiasi file e accedere a qualsiasi directory, ma di non eseguirli o scriverli; e CAP_FOWNERciò consente a un processo di fare cose che di solito sono riservate solo al proprietario del file, come la modifica dei bit di autorizzazione e del gruppo di file.
L'override della parte adesiva delle directory è menzionata solo sotto CAP_FOWNER, quindi sembra che CAP_DAC_OVERRIDEnon basterebbe ignorarlo. (Ti darebbe il permesso di scrivere, ma di solito in directory appiccicose lo hai comunque e lo +tlimita.)
(Penso che i dispositivi speciali contino come "file" qui. Almeno generic_permission()ha 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, dato che non sono file reali
- SELinux e altri moduli di sicurezza che potrebbero limitare root
chattrimmutabile +ie aggiungi solo +aflag su ext2 / ext3 / ext4, entrambi i quali fermano anche il root e impediscono anche la ridenominazione dei file, ecc.
- filesystem di rete, in cui il server può eseguire il proprio controllo di accesso, ad esempio
root_squashnelle mappe NFS root a nessuno
- FUSE, che presumo possa fare qualsiasi cosa
- supporti di sola lettura
- dispositivi di sola lettura
capabilities(7)pagina man - considera di presentare una segnalazione di bug!