GNU/Linux >> Linux Esercitazione >  >> Linux

Ho davvero bisogno di chmod ricorsivo per limitare l'accesso a una cartella?

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.)


Linux
  1. Assegna l'accesso in lettura/scrittura a un utente su una directory specifica in Linux

  2. Come eliminare una directory e una cartella in Linux?

  3. Errore Accesso negato necessita del privilegio PROCESSO [MySQL]

  4. Linux ext4 ripristina i diritti di accesso a file e directory dopo un backup/ripristino errato

  5. Limita l'accesso ai file solo per aggiungere

Come limitare l'accesso alla directory e alle sottodirectory su Nginx

Come accedere rapidamente a una cartella che desideri?

Gestisci le autorizzazioni di directory e file con chmod Recursive

Linux / Cartella e cartella /root

Limita dimensione directory

PSCP:carica un'intera cartella, da Windows a Linux