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 dir
e dir/subdir
, oltre alle autorizzazioni su file
per 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/bar
ma non su /foo
, ma la directory corrente è /foo/bar
, è possibile accedere ai file /foo/bar
tramite un percorso relativo ma non tramite un percorso assoluto. Non è possibile passare a /foo/bar
in questo scenario; un processo più privilegiato ha presumibilmente fatto cd /foo/bar
prima 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 dir
per 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 /home
sono vietati a joe
( setfacl -m user:joe:0 / /home
) ed /home/joe
è joe
la home directory, joe
non sarà in grado di accedere al resto del sistema (incluso l'esecuzione di script shell con /bin/sh
o 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.