sviluppo-web-qa.it

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

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?

168
Ken Li

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

Ad esempio, per accedere a dir/subdir/file, devi eseguire l'autorizzazione 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 tua directory corrente è /foo/bar, puoi accedere ai file in /foo/bar attraverso un percorso relativo ma non attraverso un percorso assoluto. Non puoi cambiare in /foo/bar in questo scenario; un processo più privilegiato ha presumibilmente eseguito cd /foo/bar prima di passare senza privilegi. Se un file ha più collegamenti fissi, il percorso utilizzato per accedervi determina i 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. 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) e /home/joe è la home directory di joe, quindi 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 a /lib, quindi dovrai 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.

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
34
goovim

È 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 programmatori) puoi ancora scrivere nella directory figlio ma non nella directory padre.

4
Kemin Zhou

È 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
1
Kamal