Nie jestem pewien, dlaczego poniższe mają różne wyniki. Rozumiem, że grupy bez określenia użytkownika podają wszystkie grupy, których członkiem jest aktualnie zalogowany użytkownik.
jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare
jacob@box:~$ groups jacob
jacob : jacob
Co to znaczy „grupy bieżącego procesu” (ze strony podręcznika grup)? Gdzie oni są założeni?
UWAGA: Moja dystrybucja to Ubuntu.
Odpowiedzi:
Może to być jedna z następujących czynności:
Grupy są ustawione w
/etc/group
.źródło
Tak jak każdy proces ma aktualny rzeczywisty i skuteczny identyfikator użytkownika oraz rzeczywisty i skuteczny identyfikator grupy, ma także listę grup dodatkowych . Są to liczby (nie nazwy) obsługiwane przez jądro. Są one ustawiane przez proces logowania (lub menedżera wyświetlania) podczas logowania, podobnie jak identyfikator użytkownika. Są dziedziczone przez podprocesy, podobnie jak identyfikator użytkownika.
Kiedy uruchomisz
groups
bez argumentów, ostatecznie wywołuje getgroups () w celu uzyskania dodatkowej listy grup z jądra. (W moim systemie Linux / usr / bin / groups to skrypt powłoki, który uruchamia „id -Gn”, który z kolei wywołuje getgroups ().)Po uruchomieniu
groups username
polecenie musi „odgadnąć”, jakie będą dodatkowe grupy, gdy ten użytkownik się zaloguje. Zazwyczaj robi to, czytając / etc / group lub rozmawiając z NIS lub rozmawiając z nscd lub ... Cóż, istnieje na wiele sposobów może to działać.To, co obserwujesz, przypomina odkrycie, że twój obecny rzeczywisty identyfikator użytkownika i twój wpis w / etc / passwd są niespójne. Oznacza to, że jest coś dziwnego w konfiguracji twojego systemu, ale trudno powiedzieć to bez dalszych badań.
źródło
(Uwaga:
groups
polecenie, choć nadal przydatne, jest w większości zastępowane przez polecenie id .)Użytkownik ma podstawową grupę, która jest tradycyjnie zdefiniowana w pliku
/etc/passwd
pliku, z którego się loguje, ale która dziś może mieć inne źródła. Może być również członkiem dodatkowych grup, znanych jako grupy drugorzędne lub uzupełniające, tradycyjnie określone w pliku/etc/groups
, ale które dziś mogą również pochodzić lub być implikowane z dodatkowych źródeł (takich jak NIS, LDAP, SAMBA itp.).Grupy podstawowe i dodatkowe są definiowane w momencie logowania i pozostają aktualne . Jednak użytkownik może w dowolnym momencie zmienić swoją bieżącą aktywną grupę podstawową za pomocą
newgrp
polecenia.Proces logowania ustawia grupy podstawowe i dodatkowe. W późniejszym przypadku zazwyczaj wywołuje funkcję initcroups libc , która kompiluje listę dodatkowych danych grupowych i przekazuje ją do funkcji setgroups , która ustala ją w kontekście procesu.
Źródłem informacji
initgroups
są:Te
groups
pokazy dowodzenia grupy tak obecnie stosowane do użytkownika, a lista rozpocznie z bieżącej grupy podstawowej , a następnie przez grupy uzupełniających od czasu logowania. Wszelkie zmiany źródeł danych po czasie logowania nie są odzwierciedlane na wyświetlanej liście.groups username
Komenda prosi Linuksa do obliczenia grupy dla tego użytkownika, który będzie to zrobić przy użyciu głównie pliki/etc/password
i/etc/groups
, a następnie dodatkowych źródeł. Odzwierciedla to obecną sytuację plików systemowych i może nie być równa bieżącym grupom , które nadal obowiązują od momentu zalogowania.groups username
Komenda może dać inny wynik, jeśli nie korzystać ze wszystkich źródeł, że proces logowania używane do obliczania swoich dodatkowych grup, do czego najwyraźniej stało się w Twoim przypadku. Źródła te mogą być niedostępne z twojego loginu lub po prostu nie mogą być przeglądane przez polecenie.Użycie
id username
polecenia może dać lepsze wyniki, chociaż nie gwarantuje się, że będzie tak kompletne jak w procesie logowania.id
Komenda jest nowsza niż, a miała być bardziej precyzyjny niż starejgroups
komendy.Chociaż
groups
polecenie daje dokładny i poprawny wynik, dobrze pokazałeś, żegroups username
nie można na nim polegać.Nie badając kodu źródłowego
groups
polecenia, zgaduję, że implementacjagroups username
polecenia w analizie dystrybucji Linuksa/etc/groups
, która w twoim przypadku nie zawierała niczego, ale nie używa/etc/nsswitch.conf
, z której pochodziły wszystkie twoje dodatkowe grupy. W związku z tym są wymienione jedynie podstawowej nazwy grupowegojacob
.Aby uzyskać więcej informacji zobacz:
źródło