Wykonaj vs Bit odczytu. Jak działają uprawnienia do katalogów w systemie Linux?


380

W moim CMS zauważyłem, że katalogi potrzebują +xzestawu bitów wykonywalnych ( ), aby użytkownik mógł je otworzyć. Dlaczego do odczytu katalogu wymagane jest uprawnienie do wykonywania i jak działają uprawnienia do katalogu w systemie Linux?


17
... uh, bo do tego właśnie służy flaga „+ x” :)
badp


16
Pomyśl tak: pozycja katalogu zawiera nazwy plików , więc „czytanie” katalogu zawiera listę plików, „korzystanie” z katalogu uzyskuje dostęp do plików.
tylerl

7
Po ustawieniu bitu wykonywania katalogu dozwolone jest przechodzenie przez jego hierarchię . Biorąc pod uwagę, że należysz do „innych” osób i wykonujesz tylko bit set ( chmod 771 dirOne), nie możesz wyświetlić zawartości dirOne. ALE jeśli zawiera podkatalog „dirTwo” z prawami ustawionymi jak ( chmod 774 dirTwo), możesz faktycznie wyświetlić jego zawartość!
Stphane

1
Przyszli odwiedzający powinni również zobaczyć powiązane pytanie na AskUbuntu: askubuntu.com/q/1106822/295286
Sergiy Kolodyazhnyy

Odpowiedzi:


351

Podczas stosowania uprawnień do katalogów w systemie Linux bity uprawnień mają inne znaczenie niż w przypadku zwykłych plików.

  • Nieco read ( r) pozwala użytkownikowi na zaatakowaną listy plików w katalogu
  • Nieco write ( w) pozwala użytkownikowi na tworzenie dotknięte, zmienić nazwę lub usunąć pliki w katalogu i modyfikować atrybuty katalogu użytkownika
  • Nieco wykonać ( x) pozwala użytkownikowi na zaatakowaną wejść do katalogu, a dostęp do plików i katalogów wewnątrz
  • Lepki bit ( Tlub tjeśli jest ustawiony bit wykonywania dla innych) stwierdza, że pliki i katalogi w tym katalogu mogą zostać usunięte lub przemianowane przez ich właściciela (lub root) tylko

25
Świetna odpowiedź, ale myślę, że ostatnie zdanie wprowadza w błąd. Żadnego z tych uprawnień nie można w rzeczywistości zastąpić dla pliku. Tutaj „dostęp” jest nieco niejednoznaczny: +xw katalogu zapewnia dostęp do plików i-węzłów przez ten konkretny katalog (nic więcej, nic więcej, no cóż… może też chdirpotrzebuje +x). Aby odczytać lub zapisać zawartość jednego pliku, użytkownik potrzebuje również +r/ +wdo tego pliku, ale są to odrębne uprawnienia (niczego nie zastępują).
Stéphane Gimenez

2
Niezmienna flaga jest specyficzna dla systemu plików i nie będzie dokładnie zastępować tych uprawnień, dlatego myślę, że ostatnie zdanie wprowadza w błąd :-)
Stéphane Gimenez

1
Myślę, że warto wspomnieć o ACL w tej i innych odpowiedziach, ponieważ ich zastosowanie do niektórych katalogów może być mylące, jeśli weźmie się pod uwagę tylko informacje dostarczone przez Chrisa Downa
user907860,

4
Wydaje się, że ta odpowiedź nie wspomina o łącznym efekcie bitu zapisu i bitu wykonania, jak wspomina odpowiedź Baldricka poniżej? tzn. jeśli masz tylko uprawnienie do zapisu, ale nie masz pozwolenia na wykonanie, jest to dość bezużyteczne.
Xji

1
@ StéphaneGimenez „ +xw katalogu zapewnia dostęp do plików i-węzłów” - To wydaje się być dobrym nemonikiem, ale może nie mówi całej historii? Bez ustawionego bitu wykonania w katalogu nie można zmienić nazwy pliku w tym katalogu. Zastanawiam się, dlaczego tak jest, ponieważ nazwa pliku jest przechowywana w pozycji katalogu, a nie w i-węźle.
Kevin Wheeler,

259

Najpierw pomyśl: co to jest katalog? To tylko lista elementów (plików i innych katalogów), które znajdują się w środku. Zatem: katalog = lista nazw.

Read bit = Jeśli ustawiony, możesz przeczytać tę listę. Na przykład, jeśli masz katalog o nazwie poems:

  • Możesz, ls poemsa otrzymasz listę przedmiotów mieszkających w środku ( -lnie ujawni żadnych szczegółów!).
  • Możesz użyć uzupełniania z wiersza poleceń, tj touch poems/so <TAB> poems/somefile.
  • Nie możesz utworzyć poemskatalogu roboczego (tzn. cdDo niego).

Write bit = Jeśli jest ustawiony, możesz zmodyfikować tę listę, tzn. Możesz {dodać, zmienić nazwę, usunąć} nazwy na niej. Ale! Możesz to zrobić tylko wtedy, gdy bit wykonania jest również ustawiony.

Wykonaj bit = Ustaw ten katalog jako katalog roboczy, tzn cd. W nim. Potrzebujesz tego pozwolenia, jeśli chcesz:

  • dostęp (odczyt, zapis, wykonanie) elementów mieszkających w środku.
  • zmodyfikuj samą listę, tj. dodaj, zmień nazwę, usuń na niej nazwy (oczywiście bit zapisu musi być ustawiony w katalogu).

Interesujący przypadek 1 : Jeśli masz uprawnienia do zapisu i wykonywania w katalogu, możesz {usunąć, zmienić nazwę} przedmiotów żyjących w środku, nawet jeśli nie masz zapisu na tych elementach. (użyj lepkiej końcówki, aby temu zapobiec)

Interesujący przypadek 2 : Jeśli masz uprawnienia do wykonywania katalogu (ale nie do zapisu) ORAZ masz uprawnienia do zapisu pliku znajdującego się w nim, nie możesz go usunąć (ponieważ wiąże się to z usunięciem go z listy). Możesz jednak usunąć jego zawartość, np. Jeśli jest to plik tekstowy, możesz użyć vi, aby go otworzyć i usunąć wszystko. Plik nadal tam będzie, ale będzie pusty.

Podsumowanie:

Read bit = Możesz odczytać nazwy z listy.
Write bit = Możesz {dodać, zmienić nazwę, usunąć} nazwy na liście, JEŚLI bit wykonania również jest ustawiony.
Wykonaj bit = Możesz ustawić ten katalog jako katalog roboczy.

PS: Artykuł wspomniany przez Kusalanandę to dobra lektura.


17
Myślenie o katalogu jako liście sprawia, że ​​wszystko jest bardziej jasne i logiczne.
Trismegistos

20
Świetna odpowiedź, ale zbyt skoncentrowana na pojęciu „katalog roboczy”. Potrzebuję xbitu do dowolnego dostępu do tego pliku: cat a/b/c/dbo potrzebuję xbitu na wszystkich a, ba cnawet jeśli nie używam ich jako cwd.
glglgl

1
W tym miejscu dowiedziałem się, że nie możesz pisać, chyba że jest to również plik wykonywalny! Przypadek 2 jest również interesujący, świetna odpowiedź!
Mirko

1
Inna uwaga jest taka, że ​​nawet jeśli masz xuprawnienia do katalogu, jeśli nie masz xuprawnień do pliku , nie możesz tak naprawdę „wykonać” pliku. Możesz to zrobić tylko catna przykład, ale nie możesz uruchomić samego pliku.
Xji

2
Jeśli chcesz ls -lpracować dla folderu, potrzebujesz zarówno pozwolenia , jak ri xpozwolenia.
Eric Wang,

44

Przygotowałem tę tabelę ze wszystkimi możliwymi uprawnieniami i ich praktycznymi efektami.

uprawnienia do katalogu linux

(*) Tylko nazwy plików : inne atrybuty, takie jak rozmiar lub data, są niedostępne. Np. Możesz użyć klawisza Tab do autouzupełniania, ale nie polecenia ls.

Kilka myśli :

  • Przy wyłączonym X , R i W są w większości bezużyteczne.
  • Sam X wyłączający RW daje fałszywe poczucie bezpieczeństwa, ponieważ możesz ślepo czytać i zapisywać zawartość plików oraz uzyskiwać dostęp do podkatalogów. Powinieneś być pewien, że każde bezpośrednie potomstwo katalogu ma jawne uprawnienia.
  • Rzadko będziesz używać innych wartości niż:
    • 0 : brak dostępu.
    • 1 : Minimalny dostęp umożliwiający przejście.
    • 5 : Pozwól na odczyt / zapis, ale nie zmieniaj struktury samego drzewa katalogów.
    • 7 : Pełny dostęp.

1
Uznałbym 5 za przydatną wartość, gdy chcesz zezwolić na odczyt / zapis, ale nie zmieniając struktury samego drzewa katalogów.
hgiesel

Masz rację. Zaktualizowano!
David

4
Świetna tabela podsumowująca. Zastanawiam się, co ktoś uważał -W-za funkcjonalnie równoważny ---dla katalogów. Niezbyt intuicyjny. Oczywiście tego rodzaju bity niskiego poziomu często nie są.
CivFan

2
Przetestowałem to na moim komputerze Mac, ale z -W-, mogłem zmienić nazwę katalogu (w katalogu z lepkim bitem), ale nie za pomocą ---. To wydaje się być różnicą
cozyconemotel

3
@David, brakuje ci lepkiej końcówki.
Pacerier

42

Oto dobry artykuł na ten temat.

Podsumowanie:

Katalog z xustawionym bitem pozwala użytkownikowi cd(zmienić katalog) na ten katalog i uzyskiwać dostęp do plików w nim zawartych.

Detale:

  • Czytaj ( r)

    Możliwość odczytu nazw plików przechowywanych w tym katalogu.

  • Napisz ( w)

    Możliwość zmiany nazw plików w katalogu, tworzenia nowych plików lub usuwania istniejących plików, jeśli masz także uprawnienia do wykonywania. Jeśli nie masz uprawnień do wykonywania, to uprawnienia do zapisu są bez znaczenia.

  • Wykonaj ( x)

    Możliwość cdprzejścia do tego katalogu i dostępu do plików w tym katalogu.

Oto kilka przykładów, które powinny ułatwić zrozumienie:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Jeszcze więcej informacji znajduje się w artykule Hacking Linux Exposed .



2

Każda operacja dostępu do pliku lub katalogu musi najpierw rozwiązać ścieżkę do pliku lub katalogu. Rozwiązanie wymaga, aby użytkownik miał uprawnienia do wykonywania wszystkich katalogów na ścieżce, z wyjątkiem końcowego komponentu ścieżki. W przypadku katalogów można pomyśleć, że bit wykonania oznacza „możliwe do rozwiązania”.

/a/b/c.txtJako przykład weź ścieżkę , powiedz, że użytkownik ma 1) wykonać uprawnienie na /i /a; 2) ma uprawnienia do odczytu /a/b; 3) uprawnienia do odczytu i zapisu /a/b/c.txt.

  • Użytkownik nie może odczytać (listy) /a, ponieważ nie ma uprawnień do odczytu. Ale rozdzielczość ścieżki nie zawodzi.

  • Użytkownik będzie mógł odczytać (lista) /a/b, ponieważ użytkownik ma prawo wykonania /, /aa uprawnienia do odczytu na /a/b. Zauważ, że podczas czytania /a/bnazwa pliku c.txtjest widoczna, ale metadane (np. Rozmiar pliku), a treść nie, ponieważ nazwa pliku jest przechowywana w katalogu, a nie w pliku, ale metadane są przechowywane w i-węzle pliku.

  • Użytkownik nie będzie w stanie odczytać /a/b/c.txt, ponieważ podczas rozwiązywania ścieżkę od /do /acelu /a/b, nie jest on w /a/bponieważ użytkownik nie posiada uprawnienia do wykonywania.

Zobacz także, jak nazwa ścieżki jest tłumaczona na plik .


0

Przydatną analogią jest myślenie o każdym pliku jak o książce, a każdy katalog o pokoju, w którym przechowywane są książki.

Istnieją reguły, aby móc wymienić wszystkie nazwy w pokoju: bit odczytu dla katalogów. Zasady usuwania książki z pokoju: bit zapisu do katalogów. I zasady, aby wejść do pokoju i eksplorować: wynikowy katalog wykonuje bit.

Te zasady są odrębne i różnią się od zasad dla każdej książki. Istnieją zasady pozwalające komuś otworzyć książkę i odczytać jej zawartość: bity odczytu dla każdego pliku. Istnieją zasady modyfikowania zawartości książki: bit (y) zapisu dla każdego pliku. I aby wykonać plik: bit (y) wykonania dla każdego pliku.

Piszę bity, ponieważ dla każdej akcji są trzy bity. Jest jeden bit odczytu dla właściciela, jeden bit odczytu dla grupy (grup) i bit odczytu dla wszystkich innych (innych). Jeśli któryś z tych trzech bitów jest ustawiony dla określonego użytkownika, ten użytkownik ma aktywny bit odczytu. To nie ma znaczenia, w jaki sposób nieco okazała się być aktywny albo u ser lub g rupy lub o Ther, ma te same rezultaty.

W ten sposób użytkownik może wejść do pokoju i usunąć książki z biblioteki, ale nie może czytać zawartości tej samej książki.

Dlatego wymagany jest bit odczytu dla katalogów: aby kontrolować, kto może wyświetlać zawartość pokoju (tytuły książek).

A bit wykonania służy do kontrolowania, kto może wejść do pokoju książek.


-1

Znaczenie wykonania dla katalogów jest dość jasne. Ponieważ nie ma uprawnień Traverse, w przeciwieństwie do systemu Windows, musisz coś przeładować. Projektanci wybrali Wykonaj, co powoduje niekończące się zamieszanie. Facet do spraw bezpieczeństwa komputerowego, który przypisuje uprawnienia do wykonania do czegoś, czego faktycznie nie zamierzasz wykonać, wygląda podejrzanie.


1
Wynalezienie bitu zezwolenia na wykonanie poprzedza wynalezienie koncepcji wyraźnego zezwolenia na przejście przez około dwie dekady. Logika tej odpowiedzi zależy od historycznej osi czasu, która nie przypomina rzeczywistości rzeczywistej, a także nie zauważa istnienia GENERIC_EXECUTEi tego, czym jest.
JdeBP
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.