L'accesso privilegiato a file e directory è in realtà determinato dalle capacità, non solo dall'essere root
o meno. In pratica, di root
solito 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 x
impostato 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_OVERRIDE
editing /etc/shadow
e cose del genere, quindi è approssimativamente uguale ad avere comunque l'accesso completo alla radice.)
C'è anche la CAP_DAC_READ_SEARCH
capacità che consente di leggere qualsiasi file e accedere a qualsiasi directory, ma di non eseguirli o scriverli; e CAP_FOWNER
ciò 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_OVERRIDE
non basterebbe ignorarlo. (Ti darebbe il permesso di scrivere, ma di solito in directory appiccicose lo hai comunque e lo +t
limita.)
(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
/proc
e /sys
, dato che non sono file reali
- SELinux e altri moduli di sicurezza che potrebbero limitare root
chattr
immutabile +i
e aggiungi solo +a
flag 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_squash
nelle 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!