GID, текущий, основной, дополнительный, эффективный и реальный идентификаторы группы?

Его возможное, но очень вряд ли.

В основном способ, которым работает символьная ссылка, состоит в том, что во время разрешения пути, ядро читает символьную ссылку и использует ее для перезаписи пути. Так каждый раз, когда ядро разрешает путь через него, оно теоретически читает символьную ссылку. И также все каталоги до него. Но на практике, всегда в кэше, таким образом, ни одно из тех чтений не поразило диск.

Его возможное — я не уверен, действительно — если это вызывает обновление atime. Если это делает, и Вы не работаете с relatime или noatime, затем те записи могли добавить маленькую загрузку. Если Вы работаете с полными обновлениями atime, я рекомендую, по крайней мере, переключиться на relatime если вообще возможный. Это, вероятно, поможет Вашему вводу-выводу загрузиться. Посмотрите mount(8) страница справочника для деталей.

22
23.09.2018, 11:24
2 ответа

Вы смешиваете два различных различия здесь:

  1. Между реальными и эффективными идентификаторами группы
  2. Между группами основных и дополнительных пользователей

Первое различие относится к тому, как выполняются процессы. Обычно при выполнении команды/программы она выполняется с полномочиями пользователя. Это имеет реальный идентификатор группы то же как основная группа Вашего пользователя. Это может быть изменено процессом для выполнения некоторых задач как член другой специальной группы. Чтобы сделать это, программы используют setgid функция, которая изменяет их эффективный идентификатор группы.

Второе различие относится к пользователям. У каждого пользователя есть его основная группа. Существует только один на пользователя и упоминается как ценуроз в выводе id команда. Кроме этого, каждый пользователь может принадлежать многим дополнительным группам - и они перечислены в конце id вывод.

[Редактирование]:

Я соглашаюсь что страница справочника для id является несколько вводящим в заблуждение здесь. Это, вероятно, потому что это - упрощенная версия описания, предоставленного информационным документом. Для наблюдения его более ясно работать info coreutils "id invocation" (как предложено в конце id руководство).

25
27.01.2020, 19:42

Представление ядра

Концептуально, существует три набора групп, которых процесс является членом. Каждый набор является подмножеством следующего.

  1. Единственная группа, которая является группой процесса по умолчанию, которой будут принадлежать файлы, созданные этим процессом.
  2. Набор групп, которые проверяются, когда группа требует разрешения открыть файл.
  3. Набор групп, которые может догнать процесс, работающий с дополнительным процессом полномочий.

По историческим причинам эти наборы соответственно:

  1. эффективный идентификатор группы (egid);
  2. эффективный идентификатор группы плюс дополнительные идентификаторы группы;
  3. все вышеупомянутое плюс реальный идентификатор группы и сохраненный идентификатор группы набора.

Обычно, программа имеет идентификатор отдельного пользователя. Если исполняемый файл имеет setuid набор битов режима, то программа имеет два идентификаторов пользователей: его эффективный идентификатор пользователя является тем, который имеет значение для полномочий файла, пределов в расчете на пользователя, определяя, работает ли процесс как корень и так далее. Процесс может переключиться между эффективным и идентификаторами реального пользователя, если ему не нужны его дополнительные полномочия все время, или если он должен переключиться между двумя некорневыми пользователями.

Тот же механизм существует для группы. Для групп существует дополнительная функция, которая не существовала, когда система была разработана: процесс может быть членом любого количества групп; это дополнительные идентификаторы группы.

Пользовательское представление базы данных

После того как пользователь аутентифицируется, процесс входа в систему переключается на того пользователя, прежде, чем запустить оболочку пользователя (или независимо от того, что программируют пользователя, которого требуют). Прежде, чем переключиться на требуемого пользователя (и потерять полномочия пользователя root), процесс входа в систему переключается на желаемые группы.

В ранних версиях Unix процесс мог только быть в единственной группе. Эта группа является идентификатором основной группы пользователя, сохраненным в пользовательской базе данных (обычно /etc/passwd). Эта группа становится реальным и эффективным идентификатором группы оболочки или другой программой, запущенной процессом входа в систему.

В наше время процесс может быть в нескольких группах, таким образом, пользователи могут быть в нескольких группах, также. База данных группы (обычно /etc/group) содержит список пользователей для каждой группы. Эти группы становятся дополнительными идентификаторами группы для программы, запущенной процессом входа в систему.

18
27.01.2020, 19:42

Теги

Похожие вопросы