Следующие ссылки обсуждают эти понятия в разных контекстах. Я прочитал их определения, но я все еще не могу сказать, как они связаны, или некоторые из них точно такие же.
- Текущий идентификатор группы
- ID группы
- Основные и дополнительные идентификаторы групп
- Эффективные и реальные групповые идентификаторы (также в Википедии )
Вот один из примеров источника моей путаницы:
Согласно man id
, если я печатаю id
, я должен получить то , что они называют эффективные и реальные идентификаторы групп.
id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)
Тем не менее, Википедия относится к выводу, id
чтобы различать первичные и дополнительные идентификаторы. Более того, Википедия проводит различие между первичными и дополнительными и эффективными против реальных групповых идентификаторов. Как эти понятия связаны друг с другом?
Кроме того, правда ли, что основной идентификатор группы = идентификатор группы = идентификатор текущей группы?
users
group
privileges
Амелио Васкес-Рейна
источник
источник
Ответы:
Вы смешиваете два разных различия здесь:
Первое различие относится к тому, как выполняются процессы . Обычно, когда вы запускаете команду / программу, она запускается с привилегиями вашего пользователя. Он имеет реальный идентификатор группы такие же , как основная группа вашего пользователя. Это может быть изменено процессом для выполнения некоторых задач в качестве члена другой специальной группы. Для этого программы используют
setgid
функцию, которая изменяет их эффективный идентификатор группы.Второе различие относится к пользователям . У каждого пользователя есть его / ее основная группа . Существует только один на пользователя и называется gid в выходных данных
id
команды. Кроме того, каждый пользователь может принадлежать к ряду дополнительных групп - они перечислены в концеid
выходных данных.[Редактировать] :
Я согласен с тем, что справочная страница
id
здесь несколько вводит в заблуждение. Вероятно, потому, что это урезанная версия описания, предоставленного информационным документом. Чтобы увидеть это более четко, запуститеinfo coreutils "id invocation"
(как предложено в концеid
руководства).источник
newgrp
команды - см. Второй абзац руководства в первой ссылке!Ядро зрения
Концептуально существует три набора групп, членом которых является процесс. Каждый набор является подмножеством следующего.
По историческим причинам эти наборы соответственно:
Обычно программа имеет один идентификатор пользователя. Если исполняемый файл имеет установленный бит режима setuid , то у программы есть два идентификатора пользователя: его эффективный идентификатор пользователя - это тот, который имеет значение для прав доступа к файлу, ограничений для каждого пользователя, определения того, выполняется ли процесс от имени пользователя root и т. Д. Процесс может переключаться между действующим и реальным идентификаторами пользователей, если ему не нужны все время дополнительные привилегии или если ему нужно переключаться между двумя пользователями без полномочий root.
Такой же механизм существует для группы. Для групп существует дополнительная функция, которой не было при проектировании системы: процесс может быть членом любого числа групп; это дополнительные идентификаторы групп.
Представление базы данных пользователей
Как только пользователь проходит аутентификацию, процесс входа в систему переключается на этого пользователя непосредственно перед запуском оболочки пользователя (или любой другой программы, запрошенной пользователем). Непосредственно перед переключением на нужного пользователя (и потерей привилегий root) процесс входа в систему переключается на нужные группы.
В ранних версиях Unix процесс мог быть только в одной группе. Эта группа является идентификатором основной группы пользователя, хранящимся в пользовательской базе данных (обычно
/etc/passwd
). Эта группа становится действительным и эффективным идентификатором группы оболочки или другой программы, запускаемой процессом входа в систему.В настоящее время процесс может быть в нескольких группах, поэтому пользователи также могут быть в нескольких группах. База данных группы (обычно
/etc/group
) содержит список пользователей для каждой группы. Эти группы становятся дополнительными идентификаторами групп для программы, запускаемой процессом входа в систему.источник
Здесь много других отличных ответов, но если вы все еще в замешательстве, как я, вот другой подход. Обратите внимание, что я только изучаю этот материал, а не учусь , поэтому этот ответ находится в стадии разработки и не должен рассматриваться как надежный ответ, по крайней мере, пока. Рассмотрим этот ответ v0.2.
Группы просты и сложны одновременно.
Ключ к идентификаторам, используемым ниже:
Имена пользователей и групп:
Как процессы получают идентификаторы:
1) Логин аутентифицирует имя пользователя и возвращает
LuID
иLgID
от/etc/passwd
.2) Первый процесс устанавливает эффективный = реальный = логин, т.е.
3) раздвоенные дети наследуют
RuID
,EuID
,RgID
иEgID
, (& , возможно , спас и зирр), однако,Если S U битовый идентификатор (ы) устанавливается на файл новой программы для выполнения, а затем установить эффективный из файла:
EUID = FuID
Если s г бит (ы) идентификатор устанавливается на файл новой программы для выполнения, а затем установить эффективный из файла:
EGID = FgID
Примечание: также применяются параметры монтирования suid и nosuid в базовой файловой системе .
4a) Если для установки использовался s u id
EuID
, то онEuID
может быть временно изменен (например, понижен с уровня root), но сначала сохраняется его первоначальное значение,OuID
поэтому при желании его можно восстановить позже.4b) Если для установки использовался s g id
EgID
, то онEgID
может быть временно изменен (например, понижен с уровня root), но сначала сохраняется его первоначальное значение,OgID
поэтому при желании его можно восстановить позже.Когда файл должен быть создан:
Чтобы открыть для чтения:
Чтобы открыть для записи:
Чтобы открыть для исполнения:
Когда необходимо отправить сообщение:
Рекомендации: учетные данные человека
Дополнительно: вот утилита для печати вашего файла / etc / group:
источник