Setuid

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj

Setuid oraz setgid – atrybuty plików oraz katalogów w systemach uniksopodobnych, które pozwalają na uruchomienie pliku wykonywalnego z prawami właściciela/grupy tego pliku oraz zmieniają działanie niektórych operacji na katalogach. Ich nazwy to skrótowce powstałe z angielskich zdań: "Set User ID (identity)" (Ustaw identyfikator użytkownika) oraz "Set Group ID" (Ustaw identyfikator grupy). Stosowane są do umożliwienia użytkownikom uruchamiania programów, które do poprawnej pracy wymagają wyższych uprawnień niż te, które typowy użytkownik systemu zazwyczaj posiada, np. zmiana hasła.

Pliki[edytuj | edytuj kod]

Atrybuty setuid oraz setgid mają praktyczne znaczenie jedynie w odniesieniu do plików wykonywalnych. Typowy proces w systemach uniksowych uruchamia się z prawami wywołującego go użytkownika, jednak uniemożliwia to mu dostęp do pewnych operacji, które powinny z punktu widzenia używalności systemu być jednak dla niego dostępne. Przykładem takiej operacji jest zmiana hasła realizowana przez program passwd, który w tym celu potrzebuje zmodyfikować chroniony plik /etc/shadow, do którego dostęp ma tylko superużytkownik. Ustawienie jednego z tych atrybutów powoduje, że proces uruchamiany jest odpowiednio na prawach właściciela bądź grupowego właściciela pliku, umożliwiając obejście tego ograniczenia. Ma to daleko idące konsekwencje związane z bezpieczeństwem, gdyż w ten sposób dajemy użytkownikom możliwość wykonywania zadań z prawami kogoś innego, a w szczególności - roota. W typowym systemie uniksowym atrybuty setuid oraz setgid nadane są jedynie krytycznym aplikacjom, które zostały szczególnie uważnie zweryfikowane pod kątem odporności na różne ataki, np. poprzez przepełnienie bufora, aby mieć pewność, że wykonujący je użytkownik nie będzie w stanie wykorzystać ich do nieupoważnionego zdobycia jeszcze szerszych uprawnień. Dodatkowo, atrybuty te są ignorowane w odniesieniu do wykonywalnych skryptów powłoki.

Użytkownik, który uruchomił proces z nadanymi atrybutami setuid lub setgid, pozbawiony jest dostępu do prawie wszystkich operacji mogących w jakikolwiek sposób wpłynąć na jego pracę lub odczytać jego wewnętrzny stan. Nie może on stosować mechanizmu ptrace, manipulować zmienną środowiskową LD_LIBRARY_PATH definiującą ścieżki do bibliotek współdzielonych, ani wysyłać sygnałów do takiego procesu (wyjątkiem są tu sygnały emitowane przez terminal). Nie można także tworzyć obrazów pamięci takiego procesu (core dumps).

Powstały proces posiada zmodyfikowane identyfikatory użytkownika (grupy). Identyfikator użytkownika UID (User ID) odpowiada identyfikatorowi użytkownika wykonującego plik, zaś identyfikatory EUID (Effective User ID) oraz SUID (Saved User ID) otrzymują wartość równą UID właściciela wykonywanego pliku.

Katalogi[edytuj | edytuj kod]

W przypadku katalogów atrybuty setuid oraz setgid mają odmienne znaczenie; w katalogach opatrzonych atrybutem setgid wszystkie nowotworzone wpisy (pliki, katalogi itp.) stają się własnością grupy, będącej właścicielem katalogu. Atrybut ten jest zazwyczaj dziedziczony przez nowotworzone podkatalogi.

Atrybut setuid na katalogu jest w większości systemów operacyjnych ignorowany.

Zobacz też[edytuj | edytuj kod]