Почему «выключение» сеанса активирует новую добавленную группу?

Я задал следующий вопрос: добавлена ​​дополнительная группа пользователей, но «группы (1)» пока не показывают изменения ранее. Теперь я хотел бы знать, почему ответ работает. После запуска

adduser user group 

Почему пользователю нужно выйти из системы (я даже не уверен, что это означает в контексте без диспетчера окон), или почему нужно активировать newgrp (1) ?

2 Solutions collect form web for “Почему «выключение» сеанса активирует новую добавленную группу?”

Если вы посмотрите на страницу руководства, учетные данные, вы увидите, почему дочерние процессы не могут иметь изменений, внесенных через adduser немедленно отражаются в режиме реального времени:

выдержка

Детский процесс, созданный fork (2), наследует копии идентификаторов пользователей и групп его родителя. Во время execve (2) сохраняется реальный идентификатор пользователя и группы, а также идентификаторы дополнительных групп; эффективные и сохраненные идентификаторы набора могут быть изменены, как описано в execve (2).

Так что это значит?

Выход из системы завершает родительский процесс, из которого все ваши последующие процессы были разветвлены. Все на вашем рабочем столе и т. Д. В этом исходном процессе были данные вашей группы, которые он заполнял чтением /etc/passwd & /etc/group .

Другим файлом, который играет роль в том, как ваша среда получает информацию о ваших группах, является /etc/nsswitch.conf . Этот файл содержит следующие строки:

 passwd: files shadow: files group: files 

Это дает указание вашей системе читать эту информацию только в отношении паспортов, групп и т. Д. Из файлов, которые я только что упомянул.

Эти строки могут так же легко проинструктировать систему использовать другие источники, такие как NIS, LDAP и т. Д., Чтобы получить эту информацию.

nsswitch.conf

Если вы посмотрите на man-страницу nsswitch.conf вы узнаете, как система может nsswitch.conf содержимое различных «баз данных» имен пользователей, групп и паролей.

выдержка

 FILES A service named SERVICE is implemented by a shared object library named libnss_SERVICE.so.X that resides in /lib. /etc/nsswitch.conf configuration file /lib/libnss_compat.so.X implements `compat' source for glibc2 /lib/libnss_db.so.X implements `db' source for glibc2 /lib/libnss_dns.so.X implements `dns' source for glibc2 /lib/libnss_files.so.X implements `files' source for glibc2 /lib/libnss_hesiod.so.X implements `hesiod' source for glibc2 /lib/libnss_nis.so.X implements `nis' source for glibc2 /lib/libnss_nisplus.so.2 implements `nisplus' source for glibc 2.1 NOTES Within each process that uses nsswitch.conf, the entire file is read only once; if the file is later changed, the process will continue using the old configuration. 

Если вы заметили эту заметку, она отражает аналогичную ситуацию с этим файлом, где изменения в nsswitch.conf не могут быть выполнены в режиме реального времени.

Он требует этого, потому что членство в группе читается при входе в систему. Вся эта информация хранится с этим сеансом и не перечитывается.

Linux и Unix - лучшая ОС в мире.