Насколько я понимаю, сеанс Linux кэширует свое членство в группах при входе в систему. Затем, если добавлено новое членство в группе (например, с adduser someuser somegroup
), пользователь должен выйти и снова войти в систему, чтобы воспользоваться преимуществами нового членства.
Мой вопрос: есть ли любой способ обновить членство в группах в процессе, без повторного входа в систему, выхода из текущего процесса или запуска нового процесса?
Вы можете начать новый вход из вашей сессии
$ su - your_login
Это не влияет на ваш рабочий процесс. Если вы используете Xserver, вы можете запустить xterm и ввести эту команду (влияет только на этот сеанс терминала). Единственный способ сделать его устойчивым - завершить сеанс и запустить его снова.
Я так не думаю. Но вы можете использовать newgrp
команда чтобы создать новую оболочку с новой группой. Это не навсегда.
newgrp superawesomegroupname
Вам нужно будет снова регистрировать своих пользователей.
Ты можешь сделать:
exec su -l $USER
Это неявно обновляет список групп без необходимости выхода из терминала.
Другие отметили "su - $USER
" и "newgrp
", и я подумал, что стоит упомянуть, что вам также следует взглянуть на"sg
".
Ты можешь использовать gpasswd
для немедленного изменения:
gpasswd -a someuser somegroup
Нет необходимости создавать новую оболочку или повторно входить в систему. После этого проверьте членство в группе, используя getent
:
getent group somegroup
Как насчет этого (хотя это отвечает только требованию, что вам не придется повторно входить в систему)
exec /bin/bash -l
Флаг -l действительно предполагает новую оболочку входа в систему, и exec заменит текущую оболочку этой новой. Кстати, не опечатайте имя оболочки :-)
Одна из проблем с использованием newgrp и su, как предлагалось ранее, заключается в том, что будет создана новая суб-оболочка. Да, вы также можете предварять их командой exec.