Per una directory, l'accesso "lettura" consente di elencare i contenuti e l'accesso "esecuzione" consente di attraversare la directory per aprire uno dei suoi figli (file o sottodirectory). Quindi, se rimuovi:
- solo l'accesso in lettura, le persone possono ancora accedere alle sottodirectory indovinando i loro nomi
- solo il flag di esecuzione, le persone possono ancora elencare i nomi dei contenuti anche se non possono accedervi, e questo può ancora essere rivelatore
- sia i privilegi di lettura che di esecuzione su una directory, qualsiasi cosa al di sotto di essa diventa irraggiungibile e non è necessario apportare modifiche ricorsive.
Ovviamente se apporti una modifica ricorsiva, un ripristino accidentale non ricorsivo dei diritti di accesso alla directory superiore avrà meno conseguenze.
Inutile dire che, se hai creato un file due giorni fa (con una modalità leggibile pubblicamente) e qualcuno ieri ha letto il file o ne ha fatto una copia, allora non c'è niente che puoi fare oggi per renderlo privato.
xenoid dice (in modo piuttosto semplicistico) che, se rimuovi il gruppo e altri permessi dalla tua directory (oggi, ora), "qualsiasi cosa al di sotto diventa irraggiungibile e non è necessario apportare modifiche ricorsive". Sono d'accordo che, se chmod
la tua directory (di primo livello) in modo appropriato, nessuno tranne te stesso sarà in grado di entrarci in futuro (cioè, d'ora in poi). Ma ci sono alcuni trucchi.
Collegamenti fisici
Ricordi quel file che hai creato due giorni fa? Supponiamo che il tuo avversario abbia creato un hard link a quel file ieri (invece di copiarlo). Se chmod
solo la tua directory (di primo livello), quindi quel file continuerà ad avere i permessi di lettura pubblica che hai assegnato quando lo hai creato, e quindi il cattivo sarà ancora in grado di leggerlo in futuro— (potenzialmente) anche se successivamente modifichi esso. Se esegui un chmod
ricorsivo ,che assicurerà le autorizzazioni sul file,che influirà sul collegamento. Il cattivo sarà comunque in grado di eseguire ls -l
su di esso, così potranno vedere quando lo cambi e quanto è grande, ma non potranno leggerlo di nuovo.
Cartella di lavoro
Supponiamo che, sotto il tuo secret
directory, hai un plans
directory, ed è anche leggibile pubblicamente. E supponiamo che, cinque minuti fa, il cattivo abbia aperto una finestra del terminale e abbia detto
cd /home/clemisch/secret/plans
Ora, dopo aver eseguito il chmod
su secret
, la directory di lavoro del cattivo è ancora /home/clemisch/secret/plans
e possono continuare a elencare quella directory e accedere ai file lì, potenzialmente per sempre. Ovviamente, una volta cd
altrove, o chiudere quella finestra, o disconnettersi, o la macchina viene riavviata, quindi perdono l'accesso.
Se esegui un chmod
ricorsivo , che assicurerà i permessi su tutti i file e tutte le directory, facendo perdere immediatamente l'accesso allo squatter.
Questo potrebbe non essere un rischio molto grande se la macchina è un personal computer a cui si accede solo tramite la console. Ma, se il cattivo potrebbe aver lasciato un screen
o tmux
sessionin background, allora potrebbero usare questo attacco. E, se la macchina supporta ssh
(o altro accesso remoto; forse anche FTP sarebbe sufficiente),questo attacco può essere utilizzato.
Errore umano
Come ha sottolineato xenoid nella loro risposta:se esegui un chmod
ricorsivo su secret
oggi, e poi dopodomani accidentalmentechmod
(solo) la directory di primo livello torna a 755, quindi sarai ancora protetto dal chmod
ricorsivo di oggi —tutti i file e le directory in secret
sarà ancora illeggibile. (Ovviamente, se crei un nuovo file in secret
domani, e consenti che sia leggibile pubblicamente, allora verrà esposto quando aprirai i permessi sul secret
directory. Ma questo sarebbe vero indipendentemente dal chmod
di oggi era ricorsivo o no.)
mazunki ha commentato:"Credo che cp
porta i permessi.” Non sono sicuro di cosa intendessero, ma considera questo scenario. Vuoi fare un diff
tra due file:
secret/plans/the/quick/brown/fox/file1
secret/jumps/over/the/lazy/dog/file2
Ma non sei sicuro di dove siano esattamente quei file e devi curiosare per trovarli. Potresti essere tentato di farlo
cd plans
cd the/quick # looking for file1
cd brown/fox # found it!
cp file1 /tmp
cd ../../../../..
cd jumps/over
cd the # looking for file2
cd lazy/dog # found it!
diff /tmp/file1 file2
Se lo fai, allora /tmp/file1
avrà la stessa protezione di secret/plans/the/quick/brown/fox/file1
— quindi questa è un'altra ragione per eseguire il chmod
ricorsivo oggi.
UN'altra cosa
Se il cattivo ha aperto uno dei tuoi file segreti cinque minuti fa e lo tiene aperto, sarà in grado di leggerlo in futuro, potenzialmente anche se lo modifichi. La buona notizia è che si tratta di un attacco un po' complicato da eseguire:il cattivo deve averci riflettuto prima che tu faccia il chmod
. La cattiva notizia è che è molto difficile difendersi da questo attacco:un chmod ricorsivo non aiuterà.
__________
e, naturalmente, utenti / processi privilegiati
P.S. Puoi accorciare un po' il tuo comando:chmod go=
equivale a chmod g=,o=
. (Questo non renderà il ricorsivo chmod
più veloce, ovviamente.)