Directory con permesso + x, genitori senza di essa. Quando sarebbe utile?


11

Di 'che ho una cartella chiamata foldernel seguente percorso:

my_path = /a/b/c/d/e/folder

e un file chiamato filein quella cartella.

Quindi, supponiamo di eseguire questo comando per rimuovere le autorizzazioni di gruppo in / a /

> chmod g-rwx -R /a/

Ora, dì che do le +rxautorizzazioni per folder:

> chmod g+rx /a/b/c/d/e/folder

Quindi, se viene eseguito un secondo utente nel mio gruppo:

> ls /a/b/c/d/e/folder

o

> cat /a/b/c/d/e/folder/file 

lei riceve errori di autorizzazione, e per quanto ho capito questo è perché devo fornire g+xaccesso a tutti i genitori di folder. La mia domanda allora è, quando o perché sarebbe mai utile dare il +xpermesso a una directory il cui genitore non ce l' ha?

Grazie


1
Sei sicuro di correre chmod +grx -R /a/b/c/d/e/folder? È sbagliato, il modo giusto per eseguirlo è:chmod g+rx -R /a/b/c/d/e/folder
nozimica,

3
Non risponde direttamente a questa domanda, ma consiglia di leggere in background: spiegazione dei permessi della directory
Gilles 'SO- smetti di essere malvagio'

Risposte:


6

Il più delle volte, se si desidera bloccare l'accesso e l'utilizzo di un'intera directory (inclusa la sua sottodirectory), è possibile farlo rimuovendolo (in modo non ricorsivo) -x. Pertanto, potresti aver lasciato le sottodirectory con +x, senza fare alcun danno.

Mantenere le autorizzazioni sulle sottodirectory può essere utile per una serie di motivi (soprattutto quando -xnon si applica a tutti ma almeno un utente può ancora fare qualcosa).

Ad esempio, è possibile bloccare temporaneamente l'utilizzo della directory del contenitore, mentre si apportano altre modifiche alle autorizzazioni all'interno di quella struttura di directory e quindi riattivare l'accesso all'intero albero in un'unica operazione (assegnando +xalla directory di livello superiore).

Potresti anche avere una situazione in cui uno script (non necessariamente eseguito dal proprietario) esegue il backup dell'albero delle directory in una posizione temporanea (che non dovrebbe essere leggibile da altri) e mette tutto in un file tar, preservando le impostazioni di autorizzazione del contenuto della directory.


7

Hai bisogno delle autorizzazioni + x su tutte le directory principali per cd o accedere a un file in una directory.

Per elencare i file sono necessarie le autorizzazioni + r nelle directory. Quindi ecco un esempio:

puoi emettere questi comandi per ottenere alcune impostazioni:

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

Senza diritti:

pwd
/a$ pwd
/a
/a$ chmod -rwx b
/a$ ls -l
d---------  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
ls: : Permission denied
/a$ cat b/file1
cat: b/file1: Permission denied

Solo con esegui

/a$ chmod +x b
/a$ ls -l
total 0
d--x--x--x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: b: Permission denied
/a$ cat b/file1
a
/a$ ls -l b/file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 b/file1

Ora con leggi:

/a$ chmod +r b/
/a$ ls -l
/a$ ls -l
total 0
dr-xr-xr-x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
total 16
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file2

Questa parte potrebbe essere un po 'confusa, ma con solo la lettura e la mancata esecuzione, puoi effettivamente elencare i file nella directory, ma non leggere i metadati degli inode, quindi ti verrà negata l'autorizzazione ma sarai ancora in grado di vedere l'elenco dei file in una directory come di seguito ..

/a$ chmod -x b/
/a$ ls -l
total 0
dr--r--r--  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: file1: Permission denied
ls: file2: Permission denied

2
Grazie @skrewler. Hai detto: "Hai bisogno di + autorizzazioni x su tutte le directory principali per cd o accedere a un file in una directory", che è quello che ho pensato. La mia domanda allora è: perché vuoi sempre dare + x il permesso di una directory il cui genitori non non avere + x permesso?
Amelio Vazquez-Reina

L'unica cosa che mi viene in mente è se vuoi fare un mount del binding direttamente lì, bypassando le directory principali senza i permessi di esecuzione. Se ciò non avesse senso, mostrerò un esempio.
skrewler

Quanto sopra avrebbe dovuto essere più chiaro. Un utente root con le autorizzazioni per tutte le directory principali potrebbe eseguire questo bind mount per consentire ad altri utenti di raggiungere la directory. Dal momento che potevano raggiungere / a / b / c / d / e dove solo d o e avevano l'esecuzione globale, si poteva fare un mount di collegamento da / mnt / d -> / a / b / c / d / e e un utente poteva raggiungere andando al punto di montaggio. È la stessa idea di creare un collegamento reale a qualche parte in profondità in un albero di directory che altrimenti sarebbe irraggiungibile. I collegamenti simbolici non funzionano in questo modo, tuttavia è necessario un montaggio di collegamento.
skrewler

2

Vuoi usare le +xautorizzazioni non ricorsive nella situazione che hai dato:

chmod g+x /a /a/b /a/b/c /a/b/c/d /a/b/c/d/e

(Ciò presuppone che l'utente sia un membro del gruppo di ciascuna directory. In caso contrario, si dovrebbe fare chmod o+xper tali directory.)

Affinché un utente funzioni ls /a/b/c/d/e/foldercorrettamente, deve disporre dell'autorizzazione per ogni directory nel percorso e leggere l'autorizzazione folder.

Se avete fatto

chmod g+x -R /a

funzionerebbe, ma daresti l'autorizzazione all'esecuzione del gruppo per ogni file e directory in / a. Non è necessario e, nel caso dei file, probabilmente è sbagliato.


1

Nella particolare situazione che stai affrontando, il problema è che anche se folderha le autorizzazioni appropriate a cui alcuni utenti possono accedere dal tuo gruppo, se una delle cartelle principali di foldernon è accessibile a quell'utente, allora non sarà in grado di accedi a quello interno (ciò che è chiamato foldernel tuo esempio).

Se esegui:

chmod g-rwx -R /a/

allora ae tutti i suoi figli avranno quel permesso.

Quando esegui yhou:

chmod g+rx -R /a/b/c/d/e/folder

allora foldere anche tutti i suoi figli avranno quel permesso. Ma, con questo comando in seguito, le cartelle a/, a/be così via fino a quando a/b/c/d/enon cambierà i loro permessi.


0

Il caso comune per rimuovere il bit x nelle directory è quello di bloccare gli utenti nelle loro home directory. Le shell con restrizioni hanno l'opzione di non consentire di cdfare riferimento a nomi di percorso assoluti e di non consentire l'esecuzione di programmi che utilizzano percorsi assoluti. Inoltre, non possono accedere cd ..alla directory principale della propria directory home e pertanto sono effettivamente bloccati e non possono eseguire programmi che non si trovano in $ PATH.

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.