Setuid: Różnice pomiędzy wersjami

[wersja nieprzejrzana][wersja przejrzana]
Usunięta treść Dodana treść
+skrypty perla
przepisanie; dodatkowo poprzednia edycja wprowadzała błędną informację.
Linia 1:
'''Setuid''' oraz '''setgid''' – atrybuty [[plik]]ów oraz [[katalog (system plików)|katalogów]] w systemach [[Unix|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ótowiec|skrótowce]] powstałe z [[język angielski|ang.angielskich]] zdań: "Set User ID (identity)" (''Ustaw Identyfikatoridentyfikator Użytkownikaużytkownika'') oraz "Set Group ID" (''Ustaw Identyfikatoridentyfikator Grupygrupy''). TerminStosowane '''setuid''' jestdo częstoumożliwienia skracanyużytkownikom uruchamiania programów, które do '''suid'''poprawnej pracy wymagają wyższych uprawnień niż te, zaśktóre termintypowy '''setgid'''użytkownik dosystemu '''sgid'''zazwyczaj posiada, np. zmiana hasła.
 
'''Setuid''' oraz '''setgid''' są atrybutami [[plik]]ów (a także [[katalog (system plików)|katalogów]], plików gniazd, i innych) w [[Unix|uniksowych]] [[system plików|systemach plików]].
 
== Pliki ==
W przypadku plików zawierających programy wykonywalne, atrybuty setuid oraz setgid informują [[system operacyjny]] o konieczności nadania specjalnych uprawnień [[proces (informatyka)|procesom]] powstałym z wykonania tych plików. Nowo powstały proces przejmuje uprawnienia właściciela pliku (często [[superużytkownik]]a systemu), zaś dla atrybutu setgid – [[Grupa (unix)|grupy]] będącej właścicielem pliku.
 
Atrybuty <code>setuid</code> oraz <code>setgid</code> 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 <code>passwd</code>, który w tym celu potrzebuje zmodyfikować chroniony plik <code>/etc/shadow</code>, 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 <code>setuid</code> oraz <code>setgid</code> 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.
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.
 
Użytkownik, który uruchomił proces z nadanymi atrybutami <code>setuid</code> lub <code>setgid</code>, 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 <code>ptrace</code>, manipulować zmienną środowiskową <code>D_LIBRARY_PATH</code> definiującą ścieżki do [[Biblioteka współdzielona|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'').
=== Ograniczenia ===
W związku z [[bezpieczeństwo teleinformatyczne|niebezpieczeństwem]] [[eskalacja uprawnień|eskalacji uprawnień]] w konsekwencji wykorzystania atrybutu setuid w niezamierzony przez programistę lub administratora sposób, w przypadku ustawionych atrybutów setuid lub setgid na proces wykonania pliku nakładane są pewne ograniczenia. Niektóre z nich to:
 
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.
* [[Zmienna środowiskowa|Zmienne środowiskowe]] sterujące [[konsolidator dynamiczny|konsolidatorem dynamicznym]] (zmienne środowiskowe ''LD_'') są ignorowane lub filtrowane z wpisów niezgodnych z polityką bezpieczeństwa systemu
* Niemożliwe jest śledzenie wykonania programu (mechanizm ptrace) przez użytkownika wykonującego plik
* Na użytkownika nakładane są ograniczenia co do możliwości wysyłania [[sygnał (informatyka)|sygnałów]] do nowo powstałego [[proces (informatyka)|procesu]] (akceptowane są sygnały generowane przez terminal)
* Zakazane jest tworzenie plików z obrazem procesu (coredumps)
* W większości [[system operacyjny|systemów operacyjnych]] atrybuty setuid/setgid są ignorowane w przypadku [[skrypt (informatyka)|skryptów]] (wyjątkiem mogą być skrypty [[perl]]a)
 
Obecność atrybutów setuid oraz setgid jest powodem, dla którego [[wywołanie systemowe]] [[chroot]] jest zazwyczaj niedostępne dla użytkowników nie będących [[superużytkownik]]ami systemu. W trakcie większości operacji na plikach z ustawionymi atrybutami setuid/setgid – takimi jak: modyfikacja, przenoszenie, zmiana właściciela pliku – atrybuty te są usuwane.
 
== Katalogi ==
W przypadku [[katalog (system plików)|katalogów]] atrybuty <code>setuid</code> oraz <code>setgid</code> mają odmienne znaczenie; w katalogach opatrzonych atrybutem <code>setgid</code> wszystkie nowo tworzonenowotworzone wpisy (pliki, katalogi itp.) stają się własnością [[Grupa (Unix)|grupy]], będącej właścicielem katalogu. Atrybut ten jest zazwyczaj dziedziczony przez nowo tworzonenowotworzone podkatalogi.
 
Atrybut <code>setuid</code> na katalogu jest w większości systemów operacyjnych ignorowany.
 
== Zobacz też ==
* [[chmod]]
* [[Eskalacja uprawnień]]
 
 
[[Kategoria:Unix]]