Jak działa mechanizm set-user-ID w Uniksie?


12

Czy ktoś może wyjaśnić mechanizm ustawiania identyfikatora użytkownika w systemie Unix? Jakie było uzasadnienie tej decyzji projektowej? Czym różni się od skutecznego mechanizmu identyfikatora użytkownika?

Odpowiedzi:


10

Możesz znać normalne uprawnienia do odczytu, zapisu i wykonywania dla plików w Uniksie.

Jednak w wielu aplikacjach ten typ struktury uprawnień - np. Udzielanie użytkownikowi pełnego uprawnienia do odczytu danego pliku lub braku uprawnień do odczytu pliku - jest zbyt gruby. Z tego powodu Unix zawiera inny bit uprawnień, set-user-IDbit. Jeśli ten bit jest ustawiony dla pliku wykonywalnego, to za każdym razem, gdy użytkownik inny niż właściciel wykonuje plik, ten użytkownik nabywa wszystkie uprawnienia właściciela do odczytu / zapisu / wykonania pliku w dostępie do innych plików właściciela!

Aby ustawić bit set-user-ID dla pliku, wpisz

 chmod u+s filename

Upewnij się, że masz również uprawnienia do wykonywania dla innych grup; byłoby miło mieć również uprawnienia do odczytu dla innych grup. Wszystko to można zrobić za pomocą pojedynczej instrukcji

 chmod 4755 filename

Jest również nazywany zapisanym UID. Uruchamiany plik z bitem Set-UID, zapisany UID będzie identyfikatorem UID właściciela pliku. W przeciwnym razie zapisany UID będzie prawdziwym UID.

Co to jest skuteczny UID?

Ten identyfikator UID służy do oceny uprawnień procesu do wykonania określonej akcji. EUID można zmienić na Real UID lub Superuser UID, jeśli EUID! = 0. Jeśli EUID = 0, można go zmienić na dowolny.

Przykład

Przykładem takiego programu jest passwd. Jeśli podasz go w całości, zobaczysz, że ma on bit Set-UID, a właścicielem jest „root”. Gdy normalny użytkownik, powiedz „mtk”, uruchomi się passwd, zaczyna się od:

Real-UID = mtk  
Effective-UID = mtk  
Saved-UID = root

Link referencyjny 1
Link referencyjny 2


5

man credentialsjest dobrym źródłem informacji w tym przypadku. Zobacz także tę misję na SO . Wyjaśnienie historyczne znajduje się w tym zarchiwizowanym poście .

Zamiast nazywać „ustaw UID” i „efektywny UID” mechanizmem, należy nazywać to całą koncepcją UID. Uzasadnieniem istnienia różnych identyfikatorów UID są różne problemy związane z separacją uprawnień. Nawet zwykli (nieuprzywilejowani) użytkownicy czasami muszą robić rzeczy (dostęp do zasobów), które mogą wykonywać tylko uprzywilejowani użytkownicy. Aby to łatwo osiągnąć, programy mogą zmieniać swoje identyfikatory UID. Istnieją 3 rodzaje tych:

  • real UID - UID będący właścicielem procesu

  • efektywny UID - identyfikator UID, w którym aktualnie działa proces - określa rzeczywiste możliwości procesu w dowolnym momencie. To również pspokazuje ci w polu USER.

  • zapisany zestaw UID - symbol zastępczy służący do przełączania pomiędzy rzeczywistymi i efektywnymi UID

Potrzeba ostatniego wynika z faktu, że regularne użytkownicy mogą tylko przełączać się między tymi trzema i nic innego i programem setuid zwykle musi wiedzieć, jakoś, który był użytkownik, który ładowany jest (plus rzeczywisty UID nie powinny być zmieniane, ponieważ to stworzyłoby jeszcze większy bałagan).


1

Wyjaśnienie MTK jest dobre.

passwdPrzykładem jest jeden z przekroczenia uprawnień - passwd zawsze działa jako root ponieważ musi zmieniać pliki tylko korzeń jest możliwość zmiany. To sprawia, że ​​ważne jest, aby plik wykonywalny passwd nie był podatny na przepełnienia bufora itp., Tak, że bystry, normalny użytkownik może go wykorzystać do zastosowań, do których nie jest przeznaczony.

Kolejnym uzasadnieniem jest ochrona użytkownika w taki sam sposób, w jaki możesz korzystać, sujeśli jesteś zalogowany jako root - w celu zmniejszenia lub ograniczenia swoich uprawnień do określonych zadań, a nie eskalacji. Na przykład, jeśli mam uprawnienia do uruchomienia usługi demona, która nie wymaga dostępu do moich rzeczy i ma własne rzeczy, które są wszystkim, czego potrzebuje (np. Logger), uruchomienie suid oznacza, że ​​ma dostęp tylko do tych rzeczy a nie moje czy ktokolwiek inny.

Zauważ, że możliwe jest programowe ustawienie UID, nawet jeśli bit suid nie jest ustawiony w pliku wykonywalnym , jednak nie będzie to działać w przypadku eskalacji. To znaczy, jeśli jesteś normalnym użytkownikiem i piszesz program, który w pewnym momencie sam ustawia UID, program ten nie może przełączyć się na root. Uważam, że Apache działa w ten sposób. Zwykle jest uruchamiany przez root i ma jeden proces, który następnie przeprasza dzieci, które przełączają identyfikator użytkownika do użytkownika nieuprzywilejowanego (np. „Httpd”). Te procesy potomne są tym, co faktycznie działa serwer WWW.

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.