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.