Я не уверен, почему следующие имеют разные результаты. Насколько я понимаю, группы без указания пользователя дают все группы, членом которых является зарегистрированный в данный момент пользователь.
jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare
jacob@box:~$ groups jacob
jacob : jacob
Кроме того, что означает «группы текущего процесса» (из справочной страницы группы)? Где они установлены?
ПРИМЕЧАНИЕ. Мой дистрибутив - это Ubuntu.
Ответы:
Это может быть одно из следующих:
Группы установлены в
/etc/group
.источник
Так же, как каждый процесс имеет текущий действительный и эффективный идентификатор пользователя, а также действительный и эффективный идентификатор группы, он также имеет список дополнительных групп . Это числа (не имена), все поддерживаемые ядром. Они устанавливаются процессом входа в систему (или менеджером отображения), когда вы регистрируете его, как ваш идентификатор пользователя. Они наследуются подпроцессами, как и ваш идентификатор пользователя.
Когда вы запускаете
groups
без аргументов, он в конечном счете вызывает getgroups () для получения списка дополнительных групп из ядра. (В моей системе Linux / usr / bin / groups - это сценарий оболочки, который запускает «id -Gn», который, в свою очередь, вызывает getgroups ().)Когда вы запускаете
groups username
, команда должна «угадать», какие будут дополнительные группы, когда этот пользователь войдет в систему. Обычно она делает это, читая / etc / group, или разговаривая с NIS, или разговаривая с nscd или ... Ну, есть много способов это может работать.То, что вы наблюдаете, похоже на обнаружение, что ваш текущий реальный идентификатор пользователя и ваша запись в / etc / passwd несовместимы. Это означает, что в конфигурации вашей системы есть что-то немного странное, но трудно сказать, что без дополнительного расследования.
источник
(Примечание:
groups
команда, хотя она все еще полезна, в основном заменяется командой id .)У пользователя есть основная группа, которая традиционно определяется в файле, в
/etc/passwd
который он входит, но сегодня у него могут быть другие источники. Он также может быть членом дополнительных групп, известных как вторичные или дополнительные группы, которые традиционно указываются в файле/etc/groups
, но которые сегодня также могут поступать или подразумеваться из дополнительных источников (таких как NIS, LDAP, SAMBA и т. Д.).Основные и дополнительные группы определяются во время входа в систему и остаются актуальными . Однако пользователь может в любое время изменить свою текущую активную первичную группу с помощью
newgrp
команды.Процесс входа в систему устанавливает основные и дополнительные группы. В последующем он обычно вызывает initgroups функции libc , которая составляет список дополнительных данных группы и передает его в функцию setgroups , которая устанавливает его в контексте процесса.
Источниками информации для
initgroups
являются:Команда
groups
показывает группы, которые в настоящее время применяются к вашему пользователю, и список начнется с текущей основной группы, за которой следуют дополнительные группы с момента входа в систему. Любые изменения в источниках данных после входа в систему не отображаются в отображаемом списке.groups username
Команда просит Linux , чтобы вычислить группы для этого пользователя, что он будет делать , используя главным образом файлы/etc/password
и/etc/groups
затем дополнительные источники. Это будет отражать текущую ситуацию с системными файлами и может не совпадать с текущими группами , действующими со времени входа в систему.Команда
groups username
может дать другой результат, если она не использует все источники, которые использовались процессом входа в систему для расчета ваших дополнительных групп, что, по-видимому, и произошло в вашем случае. Эти источники могут быть недоступны из вашего логина или просто не могут быть просмотрены командой.Использование
id username
команды может дать лучшие результаты, хотя также не гарантируется, что оно будет таким же полным, как и процесс входа в систему. Командаid
более поздняя, чем предыдущая, и должна была быть более точной, чем стараяgroups
.Несмотря на то, что
groups
команда дает точный и правильный результат, вы хорошо продемонстрировали, что отgroups username
команды нельзя полагаться на то же самое.Не изучая исходный код
groups
команды, я бы предположил, что реализацияgroups username
команды в вашем дистрибутиве Linux анализирует/etc/groups
, которая в вашем случае ничего не содержит, но не использует/etc/nsswitch.conf
, из которой пришли все ваши дополнительные группы. Поэтому в списке указано только имя основной группыjacob
.Для получения дополнительной информации см .:
источник