Setuid
![]() | Ten artykuł od 2021-11 wymaga zweryfikowania podanych informacji. Należy podać wiarygodne źródła w formie przypisów bibliograficznych. Część lub nawet wszystkie informacje w artykule mogą być nieprawdziwe. Jako pozbawione źródeł mogą zostać zakwestionowane i usunięte. Sprawdź w źródłach: Encyklopedia PWN • Google Books • Google Scholar • Federacja Bibliotek Cyfrowych • BazHum • BazTech • RCIN • Internet Archive (texts / inlibrary) Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się w dyskusji tego artykułu. Po wyeliminowaniu niedoskonałości należy usunąć szablon {{Dopracować}} z tego artykułu. |
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
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
W przypadku katalogów atrybuty setuid
oraz setgid
mają odmienne znaczenie; w katalogach opatrzonych atrybutem setgid
wszystkie nowo tworzone wpisy (pliki, katalogi itp.) stają się własnością grupy, będącej właścicielem katalogu. Atrybut ten jest zazwyczaj dziedziczony przez nowo tworzone podkatalogi.
Atrybut setuid
na katalogu jest w większości systemów operacyjnych ignorowany.
Zobacz też
- chmod
- eskalacja uprawnień
- sticky bit