Le autorizzazioni della directory principale sono importanti quando si accede a una sottodirectory?


160

Se ho una cartella radice con qualche autorizzazione restrittiva, diciamo 600, e se le cartelle / i file secondari dispongono dell'autorizzazione 777, tutti saranno in grado di leggere / scrivere / eseguire il file secondario anche se la cartella principale ne ha 600?


12
Nota che modificare una directory su 600 rende inaccessibile anche al proprietario, poiché è necessario eseguire l'autorizzazione per chdir in essa ...
Shadur,

Risposte:


183

La regola precisa è: puoi attraversare una directory se e solo se hai il permesso di eseguirla.

Ad esempio, per accedere dir/subdir/file, è necessario eseguire le autorizzazioni su dire dir/subdir, oltre alle autorizzazioni su fileper il tipo di accesso desiderato. Entrando nei casi angolari, non sono sicuro che sia universale che sia necessario eseguire l'autorizzazione sulla directory corrente per accedere a un file attraverso un percorso relativo (lo si fa su Linux).

Il modo in cui accedi a un file è importante. Ad esempio, se si dispone di autorizzazioni di esecuzione su /foo/barma non su /foo, ma la directory corrente è /foo/bar, è possibile accedere ai file /foo/bartramite un percorso relativo ma non tramite un percorso assoluto. Non è possibile passare a /foo/barin questo scenario; un processo più privilegiato ha presumibilmente fatto cd /foo/barprima di passare senza privilegi. Se un file ha più collegamenti fisici, il percorso utilizzato per accedervi determina i vincoli di accesso.

I collegamenti simbolici non cambiano nulla. Il kernel utilizza i diritti di accesso del processo di chiamata per attraversarli. Ad esempio, se symè un collegamento simbolico alla directory dir, è necessario eseguire l'autorizzazione dirper accedere sym/foo. Le autorizzazioni sul link simbolico stesso possono o meno dipendere dal sistema operativo e dal file system (alcuni li rispettano, altri li ignorano).

La rimozione dell'autorizzazione di esecuzione dalla directory principale limita efficacemente un utente a una parte dell'albero della directory (in cui deve essere modificato un processo più privilegiato). Ciò richiede che gli elenchi di controllo di accesso siano utili. Ad esempio, se /e /homesono vietati a joe( setfacl -m user:joe:0 / /home) ed /home/joeè joela home directory, joenon sarà in grado di accedere al resto del sistema (incluso l'esecuzione di script shell con /bin/sho binari collegati dinamicamente che devono accedere /lib, quindi ' d necessità di approfondire l'uso pratico, ad es setfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib.).

L'autorizzazione di lettura su una directory dà il diritto di enumerare le voci. Dare il permesso di esecuzione senza dare il permesso di leggere è occasionalmente utile: i nomi delle voci servono come password per accedervi. Non riesco a pensare a nessun uso nel dare l'autorizzazione di lettura o scrittura a una directory senza autorizzazione di esecuzione.


32

No. L'autorizzazione della cartella principale limita l'autorizzazione dei file secondari. Puoi provarlo.

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

Capisco questo:

$ cat: ./rootfolder/childfile: permission denied

4

È possibile rendere scrivibile la directory figlio anche se la directory padre non lo è. Lo faccio per gruppi.

Ad esempio: la directory principale è di proprietà del codificatore di gruppo

drwxr-sr-x

directory figlio

drwxrwsr-x

Tu (qualsiasi membro del gruppo di coder) puoi ancora scrivere nella directory figlio ma non nella directory padre.


1

È possibile creare il collegamento reale per accedere al file anche se non si dispone di un privilegio di esecuzione sulla directory principale. Ma il trucco qui è che devi creare il collegamento reale prima di perdere il privilegio di esecuzione sulla directory principale

$ ln foo/bar/test_privs privs_test_checking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.