При назначении списка вторичных групп пользователя с помощью:
# usermod -G <grouplist> <user>
Можно ли заставить это групповое назначение вступить в силу без выхода из всех запущенных сеансов?
Это было бы очень полезно в ситуации, когда существует сеанс Screen со многими запущенными оболочками, поскольку весь сеанс необходимо уничтожить, чтобы назначение группы вступило в силу.
Я думаю, что я могу изменить основную группу пользователя в работающей оболочке с помощью newgrp
команды - есть ли альтернатива, которая будет работать для вторичных групп?
В идеале, я хотел бы, чтобы что-то действовало в каждой оболочке без ручного запуска в каждой, но без этого, может быть, каким-то способом заставить Screen выполнять одну и ту же команду в каждой.
linux
shell
debian
permissions
gnu-screen
Саймон
источник
источник
Ответы:
Ужасно хакерский, но вы можете использовать два слоя
newgrp
для достижения этой цели для определенной группы:... даст вам текущий идентификатор основной группы. Мы будем называть это
orig_group
для целей этого примера. Затем:... переключит вас на эту группу в качестве основной и добавит ее в список групп, возвращаемых
groups
илиid -G
. А теперь еще:... достанет вам оболочку, в которой вы сможете увидеть новую группу, а основная - оригинальная.
Это ужасно и приведет к добавлению только одной группы за один раз, но это помогло мне пару раз добавлять группы без выхода из системы / во время всего сеанса X (например, для добавления предохранителя как группы для пользователя так что sshfs будет работать).
Редактировать: Это не требует от вас ввести пароль, что
su
будет.источник
newgrp $USER
вместоnewgrp <orig_group>
. Это означает, что мне не нужно было искать свой исходный идентификатор основной группы, так что это даже проще, чем это решение.newgrp <new group name>
. Это была Ubuntu 14.04newgrp
создает новую оболочку, поэтому, когда вам нужно полностью выйти из сеанса, вам нужно выполнить «exit exit exit», чтобы пройти весь путь (:Внутри оболочки вы можете выполнить следующую команду
id теперь перечислит новую группу:
источник
Этот отличный трюк по этой ссылке прекрасно работает!
Я решил опубликовать это здесь, так как каждый раз, когда я забываю, как это сделать, это первая ссылка, которая появляется в Google.
источник
exec sudo su -l $USER
чтобы избежать запроса пароля.NOPASSWD:
1. Получение оболочки с новой группой без выхода и повторного входа
Если вы добавляете только одну группу, я использовал следующее:
Это разновидность двухслойного трюка Легуоласа с newgrp, но он в одну строку и не требует ручного входа в основную группу.
sg
является newgrp, но принимает команду для выполнения с новым идентификатором группы. Этоexec
означает, что новая оболочка заменяет существующую, поэтому вам не нужно дважды выходить из системы.В отличие от использования su, вам не нужно вводить пароль. Он также не обновляет вашу среду (кроме добавления группы), поэтому вы сохраняете текущий рабочий каталог и т. Д.
2. Выполнение команды во всех окнах экрана в сеансе
Команда
at
в Screen запускает команду в любых окнах, которые вы укажете (обратите внимание, что это команда Screen, а не команда оболочки).Вы можете использовать следующую команду, чтобы отправить команду всем существующим сеансам экрана:
Обратите внимание на необходимость избегать обратных галочек, чтобы
id
запустить в сеансе Screen, и ^ M, чтобы заставить Screen нажать «enter» в конце вашей команды.Также обратите внимание, что
stuff
команда screen просто вводит текст команды от вашего имени. Поэтому может произойти что-то странное, если одно из окон экрана имеет наполовину написанную команду в командной строке или запускает приложение, отличное от оболочки (например, emacs, top). Если это проблема, у меня есть несколько идей:Чтобы запустить команду в определенном окне (определяется номером окна), используйте следующее:
источник
Использование
newgrp
команды решило проблему для меня:Этот пост имеет подробное объяснение.
источник
Группы обычно перечисляются при входе в систему, и я не знаю, как заставить его заново выполнить перечисление групп без выхода из системы и повторного входа.
Многие ответы, отобранные здесь, похоже, используют обходной путь, который вызывает новую оболочку со свежей средой (аналогично повторному входу в систему). родительская оболочка и все другие постоянно работающие программы, как правило, не получат членство в новой группе, пока их не вызовут из новой оболочки, обычно после чистого выхода из системы и входа в систему.
источник
Ты можешь сделать это.
Добавьте столько групп, сколько вы хотите использовать
usermod -G
. Затем, как пользователь с запущенным сеансом, запуститеnewgrp -
только с аргументом «-».Это приводит к повторной инициализации идентификатора группы по умолчанию, но также устанавливает и вторичные группы. Вы можете проверить это, запустив
groups
текущий сеанс, до и послеusermod
иnewgrp
.Это должно выполняться из каждого открытого сеанса - я не знаю много о экране. Однако, если есть возможность перебрать все открытые сеансы и запустить их
newgrp
, у вас все получится. Вам не нужно беспокоиться о знании групп или идентификаторов групп.Удачи вам.
источник
newgrp -
запускает новый процесс оболочкиОбобщить:
Использование «exec» означает заменить существующую оболочку новой оболочкой, запущенной командой newgrp (поэтому выход из новой оболочки завершит работу).
Финал
newgrp -
необходим для восстановления обычной основной группы, поэтому файлы, которые вы позже создадите, будут иметь их в качестве владельца группы.Примечание. Первоначальный вопрос автора заключался в том, как сделать добавленные группы видимыми в существующих процессах.
gpasswd
Иusermod
команды не влияют на существующие процессы; вновь добавленные (или удаленные!) группы появляются в вашей учетной записи (исчезают из нее), то есть в файлах / etc / group и / etc / gshadow, но разрешения для существующих процессов не изменяются. Чтобы удалить разрешения, вы должны убить все запущенные процессы;newgrp -
не будет перечитывать / etc / group и сбрасывать список групп; вместо этого он, кажется, просто использует группы, ранее связанные с процессом.источник
exec su - <username>
может использоваться для получения новой оболочки входа в систему с установленными группами, но это не будет работать в сценариях, потому что новая оболочка будет считывать команды из терминала. Вы можете использовать егоsu -c "command ..." <myusername>
для перезапуска сценария, но в результате в результате процесса не будет управляющего терминала, поэтому при попытке создания экранного редактора или другой интерактивной команды произойдет ошибка.newgrp -
никак не заменит «основную группу». Ответ Патрика Конхеди здесь лучший, так как он не разветвляет и не меняет основную группу.У меня была похожая проблема, но также и для не авторизованных пользователей. Перезагрузка ДКНБ не помогло, но выполнение этой команды сделал:
nscd -i group
. Это должно дать команду nscd (демону кэширования) перезагрузить файл groups.источник
Я не мог заставить команду newgrp работать. Я не уверен, зависит ли это от / etc / sudoers, но мне обычно приходится вводить пароль для sudo, и это сработало, не требуя мой пароль:
источник
Это делает свое
sudo
дело, если у вас есть, и это может спасти вас от ввода пароля еще раз в некоторых случаях:источник