Z APUE
Rzeczywisty identyfikator użytkownika i rzeczywisty identyfikator grupy procesu określają, kim naprawdę jesteśmy. Te dwa pola są pobierane z naszego wpisu w pliku haseł, gdy się logujemy. Zwykle wartości te nie zmieniają się podczas sesji logowania, chociaż istnieją sposoby na ich zmianę przez administratora.
Czy proces administratora może zmienić rzeczywisty identyfikator użytkownika i rzeczywisty identyfikator grupy procesu, tak aby relacja między rzeczywistym identyfikatorem użytkownika a rzeczywistym identyfikatorem grupy nie zgadzała się z tymi w pliku haseł? Na przykład, jeśli użytkownik Tim
nie jest członkiem grupy ocean
na pliku haseł, można proces superuser zmienić rzeczywisty identyfikator użytkownika oraz identyfikator grupy rzeczywistego procesu bycia Tim
i ocean
odpowiednio?
Odpowiedzi:
Tak, proces superużytkownika może zmienić swój rzeczywisty identyfikator użytkownika i rzeczywisty identyfikator grupy na dowolną żądaną wartość. Wartości w
/etc/passwd
i/etc/shadow
są konfiguracji jakie wartości powinny być ustawione, ale nie ograniczenie możliwych wartości.Edytuj nr 1
Oznacza to, że programy takie jak
login
odczytują wartości z plików, więc pliki są plikami konfiguracyjnymi lub wejściowymi. Nie są ograniczeniami tego, co program może zrobić. Proces administratora może przekazać dowolną wartość do jądra, a jądro nie sprawdzi żadnych plików.Program może zadzwonić
i to zadziałałoby, nawet jeśli żaden z identyfikatorów nie jest wymieniony w żadnym pliku.
źródło
Plik haseł i plik grupy nie są odczytywane, są one odczytywane tylko przez proces logowania, aby ustawić prawdziwy identyfikator użytkownika i prawdziwy identyfikator grupy.
Jądro nie wspomina o tych plikach. Login musi otworzyć pliki, przetworzyć je i ustawić dwa identyfikatory. Można je zapisać inaczej, aby uzyskać te identyfikatory skądinąd. Np. Z sieciowej bazy danych.
Każdy proces z funkcją CAP_SETUID może ustawić te identyfikatory, root ma tę możliwość.
Model bezpieczeństwa w Uniksie jest częściowo zaimplementowany w jądrze, a część zaimplementowany w procesie działającym z podwyższonymi możliwościami (np. Jako root).
Należy pamiętać, że
/etc/passwd
i/etc/group
są czytane przezls
,ps
i każdy inny program, który musi tłumaczyć nazwy użytkownika / grupy do / z identyfikatorów użytkownika / grupy. (Mogą to zrobić za pośrednictwem biblioteki, niż wie o alternatywnych metodach przechowywania tych szczegółów).źródło
/etc/passwd
,/etc/groups
) są odczytywane przez procesy, które chcą pokazać lub nazwy użytkowników proces zamiast wewnętrznych identyfikatorów numerycznych, npps
ils
.Między innymi celem
/etc/passwd
jest przetłumaczenie nazwy użytkownika na identyfikator użytkownika . Jeśli nie obchodzi Cię identyfikator UID boba, nie potrzebujesz tego pliku. Jeśli chcesz zmienić na dowolny identyfikator UID / GID, użyj odpowiednich wywołań systemowych:Zauważ, że uprzywilejowany proces z funkcjami
CAP_SETUID
i (który zwykle ma proces root) może zmieniać tylko swój własny identyfikator UID i GID, a nie inny uruchomiony proces.CAP_SETGID
źródło