W systemach Linux możesz z powodzeniem chmod u+s $some_directory
, ale zamiast wymuszać własność nowych podkatalogów i plików, aby być właścicielem katalogu zawierającego (i ustawiać również podkatalogi u+s
), jak można się spodziewać, system po prostu ignoruje bit setuid. Podkatalogi i pliki nadal dziedziczą identyfikatory UID swoich procesów tworzenia, a podkatalogi nie są domyślnie skonfigurowane jako setuid.
Dlaczego setuid jest ignorowany w katalogach i jak mogę sprawić, by system go rozpoznał?
linux
file-permissions
Blacklight Shining
źródło
źródło
nosuid
chociaż istnieje inny (ramdysk/dev/shm
), który / jest / zamontowanynosuid
, i wydaje się, że traktujesetuid
bit dokładnie w ten sam sposób. 6_9Odpowiedzi:
Przypomnij sobie, że bity setuid i setgid zostały wymyślone w zupełnie innym celu: spowodowanie uruchomienia pliku wykonywalnego z identyfikatorem użytkownika lub identyfikatorem użytkownika, a nie identyfikatorem użytkownika lub identyfikatora użytkownika uruchamiającego plik. Każde inne użycie jest tylko dodatkową funkcją.
Te bity nie działają w zwykłych plikach, które nie są wykonywalne. (A także skrypty powłoki w niektórych dystrybucjach, ze względu na problemy związane z bezpieczeństwem.) Początkowo nie miały one również funkcji katalogów. Oczywiście ktoś zdecydował, że fajnie byłoby wziąć nieużywany setgid do katalogów i użyć go do wymuszenia spójności własności grupy. W końcu, jeśli grasz z własnością grupy, dzieje się tak, ponieważ więcej niż jedna osoba pracuje z plikiem i prawdopodobnie ma sens, aby wszystkie pliki w danym katalogu należały do tej samej grupy, bez względu na to, kto je utworzył. Problemy związane z zapominaniem o uruchomieniu newgrp są eliminowane.
Dlaczego więc nie wdrożyć tej samej funkcji dla setuid i UID pliku? Cóż, UID jest znacznie bardziej podstawowy niż GID. Jeśli to zaimplementujesz, często plik nie będzie należeć do użytkownika, który go utworzył! Prawdopodobnie użytkownik nadal może modyfikować plik (zakładając, że umask jest czymś rozsądnym), ale nie może zmienić bitów uprawnień. Trudno dostrzec użyteczność tego.
źródło
Uważam, że odpowiedź na to pytanie dotyczy problemów związanych z bezpieczeństwem „rozdawania plików”, które spowodowały, że większość współczesnych systemów uniksowych nie pozwala na „rozdawanie plików”. „Rozdawanie plików” ma miejsce, gdy użytkownik niebędący superużytkownikiem zmienia własność pliku na osobę inną niż ten użytkownik. Ta zdolność daje wiele możliwości psot.
Ponieważ prezenty plików nie są dozwolone, setuid w katalogach, które pełnią tę samą funkcję w innej formie, nie jest dozwolony lub ignorowany, jeśli jest ustawiony.
Jeśli chodzi o zmianę zachowania, będziesz musiał zmodyfikować biblioteki i narzędzia systemu operacyjnego.
źródło
Jednym z bardzo dobrych przypadków zastosowania tego jest:
Załóżmy, że masz serwer z wieloma lokacjami i 3 bezpiecznymi witrynami. Utworzono 3 grupy, po jednej dla każdego z różnych opiekunów witryn. Wszystkie pliki we wszystkich witrynach muszą być własnością użytkownika apache, aby apache mógł je czytać i zapisywać (drupal / wordpress itp.).
Gdyby setuid działał jak bit setgid dla uprawnień do katalogów, wyglądałby mniej więcej tak:
W ten sposób każda grupa opiekunów miała dostęp do przeglądania i dotykania tylko ich zawartości, ale apache użytkownika serwera WWW mógł obsługiwać całą zawartość i użytkownicy nie muszą się martwić o zmianę własności przesyłanych plików.
Innym przypadkiem jest Anonimowe przesyłanie ftp / http lub nawet sftp / ssh. Grupa i identyfikator GID w katalogu przesyłania będą rootem, podobnie jak właściciel i identyfikator UID. Inne uprawnienia byłyby
-wx
. Umożliwiłoby to wszystkim WRITE dostęp do katalogu wysyłania, ale nie mogliby niczego odczytać po przesłaniu, a root byłby właścicielem wszystkich nowo utworzonych plików.Istnieją więc dwa całkowicie dobre i poprawne przypadki użycia umożliwiające włączenie funkcji UID w katalogach w celu dopasowania bitu GID.
Steven Mercurio
źródło
<nonexistent feature X>
?”). Jednakże, nie odnoszą się do mojego pytania, a ja, jako pytającego, że okaże się przydatny.Trochę późno na imprezę, ale na wypadek, gdyby przyszli czytelnicy natknęli się na to;) Jak stwierdzili inni, w standardowym systemie plików OS-X setUID dla katalogów jest ignorowany - i wydaje się, że nie ma łatwego sposobu na obejście tego (
mount -o
.... czy co nie). Jak często strona man nie jest zgodna z zachowaniem OS-X, które dosłownie stwierdza:ale zawiera także listę możliwości osiągnięcia tego samego efektu bez rezygnacji z pierwotnej własności. Linux używa „[g /] setfacls” do podobnych efektów (uprawnienia te nie są tak naprawdę widoczne na pierwszy rzut oka, więc może być czasem uciążliwe).
Jeśli chodzi o „jak mogę osiągnąć podobne efekty”, przeczytaj całą stronę podręcznika i majstruj przy:
możesz to sprawdzić za pośrednictwem
jeśli wszystko wygląda dobrze. Dalsze opcje obejmują wstawianie reguł w określonych pozycjach, usuwanie lub zastępowanie określonych reguł. Dwie warte uwagi opcje to „
file_inherit
idirectory_inherit
” pozwalające na dołączenie reguł do nowego katalogu / pliku.Nie przepadam za używaniem setUID, ale setGID jest bardzo przydatny na serwerach plików, gdzie po prostu ustawienie „głównej” grupy nie działa lub klienci mają maski plików uniemożliwiające zapis grupy. Rozwiązałoby to:
źródło
chown
wydaje się naprawdę ważny! „[…] Jeśli podstawowy system plików obsługuje tę funkcję: zobacz chmod (2) i opcję suiddir montowania (8).” Tak naprawdę nigdy wcześniej tego nie zauważyłem. Jeśli implementuje się HFSsuiddir
, można to zrobić na wspólnym systemie OS X.Cóż, powinien przestrzegać standardu. Mogę myśleć w kilku scenariuszach z sftp-only, że zaoszczędziłoby mi to wiele kłopotów, zarówno z acl, jak i zestawem acl-mask, które robi sshd, i resetem, który muszę zrobić dla tej maski.
Domyślnie bezpieczeństwo jest dość przydatne, ale jeśli nie wybierzesz tej opcji, po prostu tworzysz winghtmare.
https://www.gnu.org/software/coreutils/manual/html_node/Directory-Setuid-and-Setgid.html
Tak czy inaczej, jest tak, jak teraz Linux, więc po prostu użyj acl's do obejścia tych.
źródło
Według http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories bit setuid jest ignorowany dla katalogów w systemach UNIX i Linux. Możliwe jest jednak, aby działał zgodnie z oczekiwaniami na FreeBSD.
źródło
setuid
został zignorowany dla katalogów i czy można go rozpoznać w systemie Linux.linux
, tak, ale to nie znaczy, że wolę niejasne „To zrobiono w ten sposób, ponieważ inne systemy robią to w ten sposób” odpowiedź na odpowiedź, która wyjaśnia, dlaczego tak się dzieje w innych systemach. (Możelinux
tag powinien zostać po prostu usunięty?)