Linux — почему двоичные файлы su и sudo должны иметь UID root?

Linux — почему двоичные файлы su и sudo должны иметь UID root?

Я пытаюсь найти правильную причину поставленного вопроса. Я понимаю, что:

  • sudoнеобходимо прочитать /etc/sudoersфайл, который доступен для чтения только пользователю root, поэтому ему необходимо задать UID root
  • suсобирается создать новую оболочку с другим реальным и эффективным UID и должен проверить пароль. Чтобы проверить пароль, ему нужно прочитать /etc/shadow, поэтому ему нужно установить UID root. После проверки пароля ему нужно будет вызвать setuid()разветвленный процесс, и чтобы использовать произвольный аргумент UID, его родительский процесс должен иметь root в качестве эффективного UID, так что это также является еще одной причиной.

Верны ли вышеуказанные причины?

решение1

Ваши доводы в основном верны, но в обоих случаях ( suи sudo), основная причина, по которой им нужно работать как root, заключается в том, что им нужно иметь возможность изменять различные идентификаторы пользователей и групп текущего процесса. Это включает вызов таких функций, какsetreuid, которые работают только для произвольных пользователей и групп, если вызывающий процесс запущен от имени пользователя root.

У обеих программ suи sudoесть другие функции, которые также требуют запуска от имени root, но они фактически являются второстепенными деталями по сравнению с вышеизложенным. Как вы упомянули, sudoнеобходимо прочитать /etc/sudoers; но тот факт, что последний доступен для чтения только root, не является жестким требованием. Обе программы могут использовать PAM для выполнения аутентификации, но они обычно также включают резервные варианты, которые требуют возможности прочитать /etc/shadow, что также доступно для чтения только root. Список можно продолжать; но это не имеет особого значения, поскольку неизбежным фактом является то, что возможность изменять пользователей и/или группы предоставляется только root, поэтому suи sudoимеют setuid root.

Как работает внутренняя часть sudo?и связанные с этим вопросы дают дополнительную информацию.

Связанный контент