Powiedzmy, że mam folder o nazwie folder
w następującej ścieżce:
my_path = /a/b/c/d/e/folder
i plik wywołany file
w tym folderze.
Następnie powiedz, że uruchamiam to polecenie, aby usunąć uprawnienia grupy w / a /
> chmod g-rwx -R /a/
Powiedzmy, że daję +rx
uprawnienia folder
:
> chmod g+rx /a/b/c/d/e/folder
Następnie, jeśli uruchomiony zostanie drugi użytkownik w mojej grupie:
> ls /a/b/c/d/e/folder
lub
> cat /a/b/c/d/e/folder/file
dostaje błędy uprawnień i, o ile rozumiem, to dlatego, że muszę zapewnić g+x
dostęp do wszystkich rodziców folder
. Moje pytanie brzmi zatem, kiedy i dlaczego użyteczne byłoby +x
zezwolenie na katalog, którego rodzic go nie ma?
Dzięki
permissions
Amelio Vazquez-Reina
źródło
źródło
chmod +grx -R /a/b/c/d/e/folder
? To źle, właściwym sposobem na wykonanie tego jest:chmod g+rx -R /a/b/c/d/e/folder
Odpowiedzi:
W większości przypadków, jeśli chcesz zablokować dostęp do całego katalogu (w tym jego podkatalogu) i korzystanie z niego, możesz to zrobić, usuwając go (nie rekurencyjnie)
-x
. Dlatego możesz zostawić podkatalogi+x
bez szkody.Zachowanie uprawnień do podkatalogów może być przydatne z wielu powodów (zwłaszcza gdy
-x
nie dotyczy to wszystkich, ale przynajmniej jeden użytkownik może nadal coś zrobić).Na przykład można tymczasowo zablokować korzystanie z katalogu kontenera, jednocześnie wprowadzając inne zmiany w uprawnieniach w tej strukturze katalogów, a następnie ponownie włączyć dostęp do całego drzewa w jednej operacji (dając
+x
katalog najwyższego poziomu).Może również wystąpić sytuacja, w której skrypt (niekoniecznie uruchamiany przez właściciela) tworzy kopię zapasową drzewa katalogów w tymczasowej lokalizacji (która nie powinna być czytana przez innych) i umieszcza wszystko w pliku tar, zachowując ustawienia uprawnień zawartość katalogu.
źródło
Aby uzyskać dostęp do pliku w katalogu lub uzyskać dostęp do pliku w katalogu, potrzebujesz uprawnień + x w dowolnym katalogu macierzystym.
Potrzebujesz uprawnień + r w katalogach, aby wyświetlić listę plików. Oto przykład:
możesz wydać następujące polecenia, aby uzyskać pewne ustawienia:
mkdir -p /a/b
touch /a/b/{file1,file2}
cd /a
echo 1 > b/file1
echo 2 > b/file2
Bez praw:
Tylko z wykonaniem
Teraz z przeczytaniem:
Ta część może być nieco myląca, ale tylko do odczytu i bez wykonywania, możesz faktycznie wyświetlić listę plików w katalogu, ale nie odczytać metadanych i-węzłów, więc otrzymasz odmowę dostępu, ale nadal będziesz mógł zobaczyć listę plików w katalogu jak poniżej ..
źródło
Chcesz użyć
+x
uprawnień nierekurencyjnych w podanej przez Ciebie sytuacji:(Zakłada się, że użytkownik jest członkiem grupy w każdym katalogu. Jeśli nie, musisz zrobić
chmod o+x
dla takich katalogów).Aby użytkownik mógł
ls /a/b/c/d/e/folder
pomyślnie wykonać zadanie , musi mieć uprawnienia do wykonywania każdego katalogu na ścieżce i uprawnienia do odczytufolder
.Jeśli tak
działałoby, ale pozwoliłbyś grupie na wykonywanie każdego pliku i katalogu w / a. Jest to niepotrzebne, aw przypadku plików prawdopodobnie błędne.
źródło
W konkretnej sytuacji, z którą masz do czynienia, problem polega na tym, że nawet jeśli
folder
ma odpowiednie uprawnienia dostępu dla niektórych użytkowników z własnej grupy, jeśli którykolwiek z folderów nadrzędnychfolder
nie jest dostępny dla tego użytkownika, nie będzie on w stanie uzyskaj dostęp do wewnętrznego (tego, co nazywaszfolder
w twoim przykładzie).Jeśli wykonasz:
wtedy
a
i wszystkie jego dzieci będą miały to pozwolenie.Kiedy wykonasz yhou:
wtedy
folder
i wszystkie jego dzieci również będą miały to pozwolenie. Ale z tym ostatnim poleceniu, folderya/
,a/b
i tak dalej, dopókia/b/c/d/e
nie zmienią swoje uprawnienia.źródło
Częstym przypadkiem usuwania bitu x z katalogów jest blokowanie użytkowników w ich katalogach domowych. Ograniczone powłoki mają opcję, aby nie zezwalać
cd
na odwoływanie się do bezwzględnych nazw ścieżek i nie zezwalać na wykonywanie programów przy użyciu ścieżek bezwzględnych. Nie mogą równieżcd ..
przejść do katalogu nadrzędnego swojego katalogu domowego, a zatem są skutecznie zablokowane i nie mogą uruchamiać programów, które nie znajdują się w $ PATH.źródło