Uzyskujesz dostęp do plików w katalogu bez pozwolenia X?

19

Mam trochę problemów ze zrozumieniem, co oznacza wykonanie uprawnień dla katalogów. Czy rozumiem poprawnie, że cokolwiek w katalogu, do którego użytkownik nie ma praw x, jest niedostępne, nawet jeśli rzeczy w katalogu dają określone uprawnienia użytkownikowi?

A może użytkownik nadal będzie miał bezpośredni dostęp do rzeczy w katalogu, ale po prostu nie będzie mógł wyświetlić tego, co jest w katalogu?

(Naprawdę staram się zrozumieć, jak bezpieczny jest dostęp do katalogu przed innymi użytkownikami, jeśli nie mają na to pozwolenia X).

Lew
źródło

Odpowiedzi:

20

Bit x dla katalogu jest również nazywany bitem wyszukiwania. W rzeczywistości umożliwia dostęp do i-węzłów plików wymienionych w folderze. Więc jeśli chcesz uzyskać dostęp do /home/user/foo/bar.txt, musisz mieć dostęp do wyszukiwania na każdym przodku bar.txt

Cytowanie ze strony

Ponieważ katalogi nie są używane w taki sam sposób jak zwykłe pliki, uprawnienia działają nieco (ale tylko nieznacznie) inaczej. Próba wyświetlenia listy plików w katalogu wymaga uprawnień do odczytu dla katalogu, ale nie dotyczy plików w nim zawartych. Próba dodania pliku do katalogu, usunięcia pliku z katalogu lub zmiany nazwy pliku wymaga uprawnień do zapisu w tym katalogu, ale (co może zaskakujące) nie dotyczy plików w nim zawartych. Uprawnienie do wykonywania nie dotyczy katalogów (katalog nie może być również programem). Ale ten bit zezwolenia jest ponownie wykorzystywany w katalogach do innych celów.

Wymagane jest zezwolenie na wykonanie katalogu, aby móc w nim cd (tzn. Aby jakiś katalog stał się bieżącym katalogiem roboczym).

Wykonanie jest potrzebne w katalogu, aby uzyskać dostęp do informacji i-węzła plików w nim zawartych. Potrzebujesz tego do przeszukiwania katalogu w celu odczytania i-węzłów plików w nim zawartych. Z tego powodu uprawnienie do wykonywania katalogu jest często nazywane zamiast tego uprawnieniem do wyszukiwania.

W wielu typowych sytuacjach wymagane jest zezwolenie na wyszukiwanie. Rozważ polecenie cat / home / user / foo. To polecenie wyraźnie wymaga uprawnień do odczytu pliku foo. Ale dopóki nie masz uprawnień do wyszukiwania w katalogach /, / home i / home / user, cat nie może zlokalizować i-węzła foo, a zatem nie może go odczytać! Aby uzyskać dostęp do i-węzła dowolnego pliku (lub katalogu), musisz mieć uprawnienia do wyszukiwania w każdym katalogu nadrzędnym i nie możesz odczytać pliku, chyba że możesz dostać się do jego i-węzła.

Przeczytaj więcej w sekcji katalogu uprawnień do plików.

Aktualizacja: Lew podniósł bardzo dobre pytanie. Jeśli znamy i-węzeł, to czy możemy uzyskać dostęp do pliku z katalogu, którego x bit jest nieustawiony? Uważam, że nie powinniśmy tego robić. Nie testowałem tego za pomocą programu c, ale raczej użyłem kilku przydatnych poleceń bash, aby to potwierdzić.

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
Amey Jah
źródło
2
Więc jeśli mam numer i-węzła pliku / katalogu w katalogu bez uprawnień do wyszukiwania, będę mógł uzyskać do niego dostęp, o ile pozwolą na to uprawnienia? (Wydaje mi się, że uzyskanie numeru i-węzła bez możliwości wykonania statystyki jest dość trudne.)
Leo
@Leo Uważam, że nie powinniśmy tego robić. Zaktualizowałem odpowiedź. Jeśli masz mały kodek, sprawdź go i daj nam znać.
Amey Jah
1
@AmeyJah, właściwie założę się, że możesz. Zastanów się, co się stanie, gdy na stałe podłączysz plik do innego katalogu, do którego masz uprawnienia. Ten sam i-węzeł, ale możesz go przeczytać. Innymi słowy, uprawnienie do odczytu nie zależy od wyszukiwania przez system wszystkich folderów, do których może należeć i-węzeł i sprawdzenia, czy mają one bit x. Świetna odpowiedź. Wielkie dzięki.
user1477
@AmeyJah ls , stat itp. Użyj stat (2) itd. Na wypadek, gdybyś nie wiedział. Mógłbym napisać program w języku C, ale twój test robi wszystko, co pokazałby program, choć na pewno mógłby zrobić więcej, chodzi o to samo: używa wywołań systemowych (sekcja 2). Wywołania biblioteczne (sekcja 3) są na wyższym poziomie niż wywołania systemowe, ale to niczego nie zmienia (np. Remove (3) używa rmdir (2) dla katalogów i unlink (2) dla plików).
Pryftan
5

Ponieważ pytasz o katalogi:

czytaj oznacza: przeczytaj zawartość, tj. wyświetlając je za pomocą ls.

napisz oznacza: napisz do reżysera. tj. tworzenie plików lub podkatalogów.

Wykonaj oznacza: wejdź do tego katalogu.

uprawnienia do odczytu i wykonywania mogą być nieco trudne dla katalogów.

Na przykład, jeśli masz uprawnienia do odczytu, ale go nie wykonujesz, możesz wyświetlić zawartość katalogu, ale nie możesz do niego wpaść. Nie można także wyświetlać określonych plików ani katalogów, nawet jeśli znasz ich nazwy.

Jeśli masz uprawnienia do wykonywania, ale nie jesteś w stanie odczytać, możesz do niego wpaść, ale nie możesz bezpośrednio wyświetlić plików. Ale jeśli znasz nazwy plików lub katalogów, możesz je wymienić.

żartobliwy
źródło
2
Jeśli masz uprawnienia do odczytu, ale go nie wykonasz, możesz wyświetlić (ls) zawartość katalogu, ale nie możesz uzyskać dostępu (cat) plików w nim zawartych. Jeśli masz uprawnienia do wykonywania, ale nie czytasz i znasz nazwy plików, możesz uzyskać do nich dostęp (cat).
dash17291
2

Zezwolenie na wykonywanie katalogów oznacza:

Możliwość cd do tego katalogu i dostęp do plików w tym katalogu.

Jeśli nie masz xprawa do swojego katalogu, nie możesz:

  • Wejść do katalogu (tj cd)
  • Nie można uzyskać dostępu do żadnego pliku w tym katalogu (nawet jeśli znasz nazwę).

Przykład:

$ 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.

Przeczytaj Linux Confission Permission Confusion pt 2, aby uzyskać dobre wprowadzenie do tematu.

Jedyną rzeczą, której xwydaje się to nie uniemożliwiać, jest dostęp do nazw plików w tym katalogu.

Przykład:

$ 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
lgarzo
źródło