На сервере ubuntu я уже не раз замечал, что после добавления пользователя в группу этот пользователь не имеет групповых разрешений до тех пор, пока я не перезагружу систему. Например:
Пользователю hudson требуется разрешение на чтение каталога root: shadow / etc / shadow. Поэтому я добавляю hudson в группу shadow. Хадсон все еще не может читать. Итак, я "sudo shutdown -h -r now", и когда система снова заработает, пользователь hudson сможет читать.
Требуется ли перезагрузка или есть лучший способ получить разрешения после добавления пользователя в группу?
Я искал решение, наткнулся на этот пост, а потом нашел его!
Я думал, что предлагаю решение, которое принесет пользу другим. Вход и выход - это 1995 год.
Взято из:
https://arkaitzj.wordpress.com/2010/03/08/linux-add-user-to-a-group-without-logout/
Поэтому, если вам нужно получить разрешения для cdrom
группа, в которую вы только что добавили своего пользователя:
newgrp cdrom
например
Итак, шаги будут такими:
#adduser my_user cdrom
а потом
$newgrp cdrom
Я подтвердил, что это работает.
Простой $groups
проверка из интерфейса командной строки показывает, что пользователь находится в группе. И быстрое выполнение с необходимыми привилегиями из этой группы работает.
Не нужно убивать окна, входить и выходить из системы! Надеюсь, что это поможет другим!
Дополнительная информация (на основе полезного комментария jytou): «[Это] решение будет работать только для текущей открытой оболочки. Если у вас открыта другая оболочка, вам нужно будет использовать ту же команду, чтобы учесть изменения».
При добавлении пользователя в новую группу, пользователь должен выйти и снова войти в систему, чтобы это вступило в силу. Хотя для этого потребуется перезагрузка, она не обязательна.
Добавление пользователя в группу не влияет на пользователей, вошедших в систему.
В случае с демоном вам необходимо перезапустить его для применения новых групп.
Кроме того, перезапуск демона с использованием параметра самого демона не будет работать, поскольку он унаследует текущую среду.
Самый простой способ заставить его работать - полностью остановить демон и запустить его снова, как в ..
/etc/init.d/foo stop ; /etc/init.d/foo start
это намного проще, вы можете проверить свой текущий уровень доступа, набрав:
id
для перезагрузки групп вам просто необходимо:
su - $USER
после этого еще раз проверьте уровень доступа:
id
и вы увидите, что новая группа теперь активна.
Здесь также следует рассмотреть другой режим отказа.
Если админ обновил /etc/group
но не удалось обновить /etc/gshadow
(в системах с такой настройкой) выход из системы и повторный вход фактически не назначит вас в новую группу.
Как ни странно, groups
покажет вам реальную текущую ситуацию, тогда как id
будет неправильно печатать вывод, который указывает, что вы являются собственно член группы.
tripleee@vbvntv$ groups
tripleee
tripleee@vbvntv$ id
uid=1234(tripleee) gid=1234(tripleee) groups=1234(tripleee),4(adm)
tripleee@vbvntv$ ls -l /var/log/mail.log
-rw-r----- 1 root adm 15728 May 26 14:26 /var/log/mail.log
tripleee@vbvntv$ tail /var/log/mail.log
tail: cannot open `/var/log/mail.log' for reading: Permission denied
Я не могу использовать newgrp
потому что он запрашивает пароль, а у меня нет пароля, только аутентификация с открытым ключом SSH.
Решением для администратора было бы отменить ручное редактирование /etc/groups
а затем сделайте это снова с sudo gpasswd -a tripleee adm
; или, альтернативно, использовать grpconv
чтобы объединить изменения (которые я взял из https://serverfault.com/a/389719/98333)