Я хочу убедиться, что учетная запись пользователя filesender_1 является членом группы valid_senders.
Когда я смотрю на / etc / group, filesender_1 не там:
valid_senders:x:12345:production_1
Я прочитал это как «production_1 - единственный член группы valid_senders, чей идентификатор группы - 12345».
Тем не мение:
Когда я смотрю на / etc / passwd, я вижу идентификатор группы для valid_senders указан для filesender_1 ...
filesender_1:x:1515:12345:filesender_1:/local/home/filesender_1:/bin/sh
... так что я знаю valid_senders это основная группа для filesender_1.
Это неожиданное несоответствие, или для / etc / group нормально перечислять только тех участников, у которых группа является вторичной?
Да, есть разница между основной и дополнительной группами. Первичная группа - это основная, показанная на /etc/passwd
, что пользователь входит в систему. Чтобы пользователь мог быть в дополнительной группе, его имя пользователя добавляется в запись группы в /etc/group
. Если вы используете id -a <user>
, он покажет основную и дополнительную группы. Дополнительные группы предоставляют доступ к ресурсам, но любые новые файлы создаются с помощью основной группы.
Вы можете изменить текущую активную основную группу пользователей, используя newgrp
команда.
Для пользователя необязательно, чтобы основная группа была также вторичной группой. Все, что это сделает, это уменьшит количество вторичных групп, в которые может входить пользователь. Традиционно пользователь был ограничен 32 вторичными группами, но это могло измениться в последние годы.
usermod
Можно одной командой установить основные и дополнительные группы пользователей. Использование инструмента управления конфигурацией, такого как puppet, также может сделать это, не беспокоясь о том, какая конкретная команда необходима для разных типов unix.
Да, это несоответствие нормальное явление. Я видел это так много раз, что перестал смотреть на /etc/passwd
и /etc/group
файлы и вместо этого начали смотреть на членство в группах так, как на него следует смотреть: getent group <groupname>
и groups <username>
.
Существует программа под названием члены вы можете установить на большинстве дистрибутивов Linux, в которых перечислены фактические члены группы, будь то их основная группа или дополнительная группа.
Обычно, когда пользователь создается без указания группы с помощью -g или --gid, поведение по умолчанию заключается в установке его основной группы в качестве имени пользователя, и этот gid не помещается в файл / etc / group. Следовательно, файлы и каталоги, созданные пользователем joe, будут владеть joe: joe. Но вы не найдете группу «joe» в файле / etc / group.
Если вы добавите пользователя joe в группу «студенты», то запустите
getent group students
покажет Джо в списке пользователей в группе ученики.
Запуск программы
members <groupname>
в группе будут показаны пользователи, которые являются членами, основными или дополнительными, Название группы.
Вообще говоря, системные администраторы должны добавить пользователя в список членов своей основной группы в / etc / group, потому что семейство системных вызовов getpwent () будет удалять дубликаты при вызове. Программы не должны напрямую читать / etc / group или / etc / passwd, они должны использовать системные вызовы. Все это верно уже как минимум 20 лет, а, возможно, и намного дольше.
Вы должны использовать lid -g <group>'