Poniższe linki omawiają te pojęcia w różnych kontekstach. Przeczytałem ich definicje, ale nadal nie mogę powiedzieć, w jaki sposób są ze sobą powiązane lub czy niektóre z nich są takie same.
- Aktualny identyfikator grupy
- Identyfikator grupy
- Główne i dodatkowe identyfikatory grup
- Rzeczywiste i rzeczywiste identyfikatory grup (także na Wikipedii )
Oto przykład źródła mojego zamieszania:
Zgodnie z tym man id
, jeśli piszę id
, powinienem dostać to, co nazywają skutecznym i rzeczywistym identyfikatorem grupy.
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
Jednakże, Wikipedia odnosi się do mocy id
odróżnić podstawowych i dodatkowych identyfikatorów. Ponadto Wikipedia rozróżnia identyfikatory grup pierwotnych i uzupełniających oraz skuteczne i rzeczywiste grupy. Jak te pojęcia się ze sobą wiążą?
Czy to prawda, że identyfikator grupy podstawowej = identyfikator grupy = bieżący identyfikator grupy?
users
group
privileges
Amelio Vazquez-Reina
źródło
źródło
Odpowiedzi:
Mieszasz tutaj dwa różne wyróżnienia:
Pierwsze rozróżnienie dotyczy sposobu uruchamiania procesów . Zwykle po uruchomieniu polecenia / programu jest on uruchamiany z uprawnieniami użytkownika. Ma rzeczywisty identyfikator grupy taki sam jak grupa podstawowa użytkownika. Można to zmienić w procesie, aby wykonać niektóre zadania jako członek innej specjalnej grupy. Aby to zrobić, programy używają
setgid
funkcji, która zmienia ich efektywny identyfikator grupy.Drugie rozróżnienie dotyczy użytkowników . Każdy użytkownik ma swoją podstawową grupę . Jest tylko jeden na użytkownika i na wyjściu polecenia jest określany jako gid
id
. Oprócz tego każdy użytkownik może należeć do szeregu dodatkowych grup - i są one wymienione na końcu danychid
wyjściowych.[Edytować] :
Zgadzam się, że strona man
id
nieco tutaj wprowadza w błąd. Jest tak prawdopodobnie dlatego, że jest to uproszczona wersja opisu podanego w dokumencie informacyjnym. Aby zobaczyć to wyraźniej, uruchominfo coreutils "id invocation"
(zgodnie z sugestią na końcuid
instrukcji).źródło
newgrp
polecenia - patrz drugi akapit instrukcji w pierwszym linku!Widok jądra
Koncepcyjnie istnieją trzy zestawy grup, których członkiem jest proces. Każdy zestaw jest podzbiorem następnego.
Ze względów historycznych zestawami tymi są odpowiednio:
Zwykle program ma jeden identyfikator użytkownika. Jeśli plik wykonywalny ma ustawiony bit trybu setuid , wówczas program ma dwa identyfikatory użytkownika: jego efektywny identyfikator użytkownika jest tym, który ma znaczenie dla uprawnień do plików, limitów na użytkownika, określających, czy proces działa jako root i tak dalej. Proces może przełączać między efektywnym a rzeczywistym identyfikatorem użytkownika, jeśli nie potrzebuje on przez cały czas swoich dodatkowych uprawnień lub jeśli musi przełączać się między dwoma użytkownikami innymi niż root.
Ten sam mechanizm istnieje dla grupy. W przypadku grup istnieje dodatkowa funkcja, która nie istniała podczas projektowania systemu: proces może być członkiem dowolnej liczby grup; są to dodatkowe identyfikatory grup.
Widok bazy danych użytkowników
Po uwierzytelnieniu użytkownika proces logowania przełącza się na tego użytkownika, tuż przed uruchomieniem powłoki użytkownika (lub innego programu, którego zażądał użytkownik). Tuż przed przejściem do żądanego użytkownika (i utratą uprawnień roota) proces logowania przełącza się na pożądane grupy.
We wczesnych wersjach unixa proces mógł być tylko w jednej grupie. Ta grupa jest identyfikatorem grupy podstawowej użytkownika, przechowywanym w bazie danych użytkowników (zazwyczaj
/etc/passwd
). Ta grupa staje się rzeczywistym i skutecznym identyfikatorem grupy powłoki lub innego programu uruchomionego przez proces logowania.W dzisiejszych czasach proces może być w wielu grupach, więc użytkownicy mogą być również w wielu grupach. Baza danych grupy (zazwyczaj
/etc/group
) zawiera listę użytkowników dla każdej grupy. Grupy te stają się dodatkowymi identyfikatorami grup dla programu uruchomionego przez proces logowania.źródło
Wiele innych doskonałych odpowiedzi tutaj, ale jeśli nadal jesteś zdezorientowany tak jak ja, oto inne podejście. Pamiętaj, że jestem tylko uczniem tego, a nie mistrzem , więc ta odpowiedź jest w toku, i nie powinna być uważana za solidną odpowiedź, przynajmniej jeszcze nie. Rozważ tę odpowiedź v0.2.
Grupy są proste i złożone jednocześnie.
Klucz do identyfikatorów używanych poniżej:
Nazwy identyfikatorów użytkowników i grup:
Jak procesy uzyskują identyfikatory:
1) Login uwierzytelnia nazwę użytkownika i zwraca
LuID
orazLgID
z/etc/passwd
.2) Pierwszy proces konfiguruje efektywne = rzeczywiste = logowanie, tj
3) Rozwidlonych dzieci dziedziczą
RuID
,EuID
,RgID
, iEgID
, (i ewentualnie zapisane i czopek), jednakJeśli s u trochę id (S) jest ustawiona na plik z nowym programem do wykonania, a następnie ustawić skuteczny z pliku:
EuID = FuID
Jeśli bit (y) s g id jest ustawiony w pliku nowego programu do uruchomienia, ustaw efektywne z pliku:
EgID = FgID
Uwaga: suid i nosuid systemu plików obowiązują również opcje instalacji .
4a) jeśli s U id użyto do zestawu
EuID
, a następnieEuID
może być tymczasowo zmienione (np obniżony z korzeni), ale najpierw jest oryginalna wartość jest zapisana wOuID
tak, że można przywrócić później, jeśli to pożądane.4b) Jeśli do ustawienia użyto s g id
EgID
,EgID
można go tymczasowo zmienić (np. Obniżyć z katalogu głównego), ale najpierw zapisywana jest jego pierwotna wartość,OgID
aby w razie potrzeby można go było później przywrócić.Kiedy plik ma zostać utworzony:
Aby otworzyć do czytania:
Aby otworzyć do pisania:
Aby otworzyć do wykonania:
Kiedy wiadomość musi zostać wysłana:
Referencje: referencje człowieka
Dodatkowo: Oto narzędzie do wydrukowania pliku / etc / group:
źródło