Accedere ai file in una directory senza l'autorizzazione x?


19

Ho un po 'di problemi a capire cosa significa l'autorizzazione di esecuzione per le directory. Comprendo correttamente che qualsiasi cosa in una directory per la quale un utente non ha diritti x è inaccessibile anche se le cose all'interno della directory danno diritti specifici all'utente?

O l'utente avrà ancora accesso diretto alle cose nella directory, ma semplicemente non può elencare ciò che è nella directory?

(Quello che sto davvero cercando di capire è quanto sia sicura una directory dall'accesso di altri utenti se non hanno l'autorizzazione x per essa.)

Risposte:


20

x bit per directory viene anche chiamato bit di ricerca. In realtà, ti consente di accedere agli inode dei file elencati all'interno della cartella. Quindi, se si desidera accedere a /home/user/foo/bar.txt, è necessario disporre dell'accesso alla ricerca su tutti gli antenati di bar.txt

Citando dalla pagina

Poiché le directory non vengono utilizzate allo stesso modo dei file normali, le autorizzazioni funzionano leggermente (ma solo leggermente) in modo diverso. Un tentativo di elencare i file in una directory richiede l'autorizzazione di lettura per la directory, ma non sui file all'interno. Un tentativo di aggiungere un file a una directory, eliminare un file da una directory o rinominare un file, richiede tutti l'autorizzazione di scrittura per la directory, ma (forse sorprendentemente) non per i file all'interno. L'autorizzazione di esecuzione non si applica alle directory (una directory non può essere anche un programma). Ma quel bit di autorizzazione viene riutilizzato per le directory per altri scopi.

È necessaria l'autorizzazione di esecuzione su una directory per poterlo inserire in cd (ovvero, per rendere una directory la directory di lavoro corrente).

È necessario eseguire su una directory per accedere alle informazioni sull'inode dei file all'interno. È necessario questo per cercare una directory per leggere gli inode dei file all'interno. Per questo motivo l'autorizzazione di esecuzione su una directory viene spesso chiamata autorizzazione di ricerca.

È richiesta l'autorizzazione alla ricerca in molte situazioni comuni. Considera il comando cat / home / user / foo. Questo comando richiede chiaramente l'autorizzazione di lettura per il file pippo. Ma a meno che tu non abbia il permesso di ricerca nelle directory /, / home e / home / user, cat non può individuare l'inode di foo e quindi non può leggerlo! Per accedere all'inode di qualsiasi file (o directory) è necessario il permesso di ricerca su ogni directory antenata e non è possibile leggere un file a meno che non si riesca ad accedere al suo inode.

Si prega di leggere di più nella sezione directory dei permessi dei file.

Aggiornamento: Leo ha sollevato un'ottima domanda. Se conosciamo l'inode, allora possiamo accedere a un file da una directory con x bit non impostato? Credo che non dovremmo essere in grado di farlo. Non l'ho provato con il programma c ma ho usato alcuni comandi bash per confermarlo.

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
Quindi, se ho il numero di inode di un file / directory all'interno di una directory senza diritti di ricerca, sarei in grado di accedervi fintanto che le sue autorizzazioni lo consentono? (Ottenere il numero di inode senza essere in grado di fare stat è piuttosto difficile anche se suppongo.)
Leo,

@Leo Credo che non dovremmo essere in grado di farlo. Ho aggiornato la risposta. Se hai un piccolo ceppo C, controllalo e facci sapere.
Amey Jah,

1
@AmeyJah, in realtà, scommetto che puoi. Considera cosa succede quando colleghi un file a un'altra directory a cui sei autorizzato. Stesso inode, ma puoi leggerlo. In altre parole, l'autorizzazione in lettura non dipende dal fatto che il sistema cerchi tutte le cartelle a cui potrebbe appartenere l'inode e vedrà se hanno il bit x. Ottima risposta però. Molte grazie.
user1477,

@AmeyJah ls , stat ecc uso stat (2) , ecc Nel caso in cui non sapevano ormai. Potrei scrivere un programma in C ma il tuo test fa tutto ciò che il programma mostrerebbe anche se sicuramente potrebbe fare di più il punto è lo stesso: usa le syscalls (sezione 2). Le chiamate alla libreria (sezione 3) sono di livello superiore rispetto alle syscall ma ciò non cambia nulla (es. Remove (3) usa rmdir (2) per le directory e unlink (2) per i file).
Pryftan,

5

Dal momento che stai chiedendo directory:

read significa: leggere i contenuti, ovvero elencarli con ls.

scrivere significa: scrivere nel regista. cioè creando file o sottodirectory.

eseguire significa: entrare in quella directory.

le autorizzazioni di lettura ed esecuzione potrebbero essere un po 'complicate per le directory.

Ad esempio, se si dispone delle autorizzazioni di lettura ma non si esegue, è possibile elencare i contenuti della directory ma non è possibile inserirli. Inoltre non puoi elencare file o directory specifici anche se conosci i suoi nomi.

Se si dispone dell'autorizzazione di esecuzione ma non si legge, è possibile rilasciarlo ma non è possibile elencare direttamente i file. Ma se conosci i nomi dei file o delle directory puoi elencarli.


2
Se si dispone dell'autorizzazione di lettura ma non si esegue, è possibile elencare (ls) il contenuto della directory ma non è possibile accedere (cat) ai file in essa contenuti. Se hai il permesso di esecuzione ma non leggi e conosci i nomi dei file puoi accedervi (cat).
dash17291,

2

L'autorizzazione di esecuzione su directory significa:

La possibilità di eseguire il cd in questa directory e accedere ai file in questa directory.

Se non hai i xdiritti sulla tua directory non puoi:

  • Entra nella directory (es. cd:)
  • Impossibile accedere a qualsiasi file in questa directory (anche se si conosce il nome).

Esempio:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

Leggi Confusione autorizzazione file Linux pt 2 per una buona introduzione sull'argomento.

L'unica cosa che l' xautorizzazione non sembra impedire è l'accesso ai nomi dei file in quella directory.

Esempio:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ ls testdir
ls: cannot access testdir/a: Permission denied
ls: cannot access testdir/b: Permission denied
a  b
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.