Czy w Linuksie jest sposób na aktualizację właściwości użytkownika / grupy bez konieczności ponownego logowania?

24

Po edycji / etc / group i dodaniu użytkownika do grup, do których on nie należał, użytkownik nie będzie mógł korzystać ze swoich nowo nabytych uprawnień, chyba że rozpocznie nową sesję.

Czy istnieje komenda odświeżenia właściwości użytkownika / grupy w trwającej sesji?

wonea
źródło
1
Czy istnieje powód, dla którego edytujesz plik ręcznie zamiast go używać useradd -G groupname username?
Bobby
4
@Bobby: nie miałoby to znaczenia.
niXar
Możesz spojrzeć na tę odpowiedź .
Pablo A

Odpowiedzi:

16

Na poziomie jądra członkostwo w grupach jest własnością każdego procesu. Jeśli nie ma odpowiedniej zdolności (CAP_SETGID, jeśli się nie mylę), tj. Uprawnień roota do wszystkich celów i celów, proces nie może należeć do nowej grupy.

Użytkownik nie istnieje jako obiekt na poziomie jądra; robią tylko procesy (i pliki). Proces ma identyfikator użytkownika (efektywny i inny) oraz listę identyfikatorów grup.

Kiedy dodajesz użytkownika do grupy, jądro nie ma pojęcia, co to znaczy. Pośrednio wie tylko, że przy następnym uruchomieniu / bin / login lub / usr / bin / newgrp proces z tym identyfikatorem użytkownika będzie miał na liście nowy identyfikator grupy.

Tak więc, aby odpowiedzieć na twoje pytanie, jeśli mówisz o sesji Gnome lub KDE, musisz ją zrestartować. Lub jeśli zależy ci tylko na wyniku jednego polecenia, jeśli chodzi o nową grupę, możesz użyć newgrp, o którym właśnie wspomniałem. Rozpocznie nową powłokę z nowo dodaną grupą.

niXar
źródło
5

Przeczytałem wcześniej, że polecenie newgrp robi to, ale tylko dla bieżącej powłoki. Wydaje się, że nie ma lepszej alternatywy niż wylogowanie się i ponowne zalogowanie.

Andy Shellam
źródło
3
Newgrp faktycznie uruchamia nową powłokę. Więc jeśli ^ D z niego powrócisz do swojej starej powłoki. Zwykle robię po prostu „exec
newgrp