Se ho una cartella principale con qualche permesso restrittivo, diciamo 600, e se le cartelle/file figlio hanno il permesso 777, tutti saranno in grado di leggere/scrivere/eseguire il file figlio anche se la cartella principale ne ha 600?
Risposta accettata:
La regola precisa è:puoi attraversare una directory se e solo se hai il permesso di esecuzione su di essa.
Quindi ad esempio per accedere a dir/subdir/file
, è necessario eseguire l'autorizzazione su dir
e dir/subdir
, più i permessi su file
per il tipo di accesso desiderato. Entrando in casi d'angolo, non sono sicuro che sia universale che tu abbia bisogno dell'autorizzazione di esecuzione sulla directory corrente per accedere a un file tramite un percorso relativo (lo fai su Linux).
Il modo in cui accedi a un file è importante. Ad esempio, se hai i permessi di esecuzione su /foo/bar
ma non su /foo
, ma la tua directory attuale è /foo/bar
, puoi accedere ai file in /foo/bar
attraverso un percorso relativo ma non attraverso un percorso assoluto. Non puoi passare a /foo/bar
in questo scenario; un processo più privilegiato ha presumibilmente eseguito cd /foo/bar
prima di andare senza privilegi. Se un file ha più collegamenti reali, il percorso che utilizzi per accedervi determina i tuoi vincoli di accesso.
I collegamenti simbolici non cambiano nulla. Il kernel usa i diritti di accesso del processo chiamante per attraversarli. Ad esempio, se sym
è un collegamento simbolico alla directory dir
, è necessario eseguire l'autorizzazione su dir
per accedere a sym/foo
. I permessi sul collegamento simbolico stesso possono o meno avere importanza a seconda del sistema operativo e del filesystem (alcuni li rispettano, altri li ignorano).
La rimozione dell'autorizzazione di esecuzione dalla directory principale limita in modo efficace un utente a una parte dell'albero delle directory (in cui deve passare un processo con più privilegi). Ciò richiede che gli elenchi di controllo di accesso siano utili. Ad esempio, se /
e /home
sono off-limits per joe
(setfacl -m user:joe:0 / /home
) e /home/joe
è joe
la directory home di 's, quindi joe
non sarà in grado di accedere al resto del sistema (incluso l'esecuzione di script di shell con /bin/sh
o binari collegati dinamicamente che devono accedere a /lib
, quindi dovresti approfondire per un 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. A volte è utile concedere il permesso di esecuzione senza concedere il permesso di lettura:i nomi delle voci servono come password per accedervi. Non riesco a pensare a qualsiasi utilità nel concedere il permesso di lettura o scrittura a una directory senza il permesso di esecuzione.