Реальный UID, эффективный UID и некоторые системы даже имеют "сохраненный UID". Какова цель всех этих, особенно последних?
Какая сделка со всеми различными UID может иметь процесс?
Ответ 1
Каждый процесс UNIX имеет 3 UID, связанных с ним. Привилегия суперпользователя - UID = 0.
Реальный UID
Это UID пользователя/процесса, который создал этот процесс. Его можно изменить только в том случае, если работающий процесс имеет EUID = 0.
Эффективный UID
Этот UID используется для оценки привилегий процесса для выполнения определенного действия. EUID можно изменить либо на RUID, либо SUID, если EUID!= 0. Если EUID = 0, его можно изменить на что угодно.
Сохраненный UID
Если вы запустите исполняемый файл с установленным битом set-UID, то итоговый процесс запуска начнется с реального UID реального пользователя, запускающего его, и эффективного и сохраненного UID владельца исполняемого файла. Если процесс затем вызывает setuid() или seteuid(), чтобы изменить их эффективный UID, они снова могут вернуть свои первоначальные привилегии за счет сохраненного UID. Если бит set-UID не установлен, SUID будет RUID.
Ответ 2
Реальный uid - это идентификатор пользователя, который запустил процесс.
Эффективный uid обычно совпадает с реальным uid. Это другое, только если:
-
для исполняемого файла был установлен бит set-uid, а исполняемый владелец отличается от пользователя, вызывающего его
-
или если процесс set-uid вызывает setuid (2). Если у процесса есть привилегии суперпользователя, допускается любой аргумент setuid (2) (но тогда все * -уиды получают одинаковое значение); в противном случае setuid (2) можно вызвать с помощью real-uid или эффективного uid или сохраненного uid.
Сохраненный-uid - это эффективный процесс, который был запущен при его запуске, и он сохранялся для того, чтобы быть разрешенным в качестве аргумента для различных системных вызовов набора * uid.
Обратите внимание, что процесс с привилегией суперпользователя, вызывающий setuid (2), чтобы изменить его эффективный uid, также будет иметь реальный uid и сохраненный uid, измененный на одно и то же значение, поэтому вместо него следует использовать не-POSIX seteuid (2).
Все вышеперечисленное относится также к (реальным | эффективным | сохраненным) идентификаторам групп.
Ответ 3
В дополнение к реальным, эффективным и сохраненным UID, Unix-системы с включенным аудитом также имеют UID аудита. Процесс AUID идентифицирует пользователя, который начал процесс; он не изменяется с помощью setuid (2) или seteuid (2). Цель состоит в том, что он остается постоянным в процессе и используется только для пометки записей аудита. Таким образом, если пользователь выполняет привилегированную оболочку (даже авторизованный пользователь через su или sudo), записи аудита этого процесса помечены от этого пользователя.
Ответ 4
Каждый Linux-процесс имеет 3 UID, связанных с ним.
- Реальный UID: UID процесса, который создал этот процесс.
- Эффективный UID: используется для оценки привилегий процесса для выполнения определенного действия.
- Сохраненный UID. Для файла двоичного изображения с битом
setuid
.
Ответ 5
Принятый ответ неверен относительно того, что реальный UD не может быть изменен кем угодно, кроме root. На странице man для setuid: (Я не могу сделать комментарий)
Функция setuid() устанавливает реальные и эффективные идентификаторы пользователей и сохраненный set-user-ID текущий процесс до указанного значения. Функция setuid() разрешена, если эффективный идентификатор пользователя - это имя суперпользователя или если указанный идентификатор пользователя совпадает с эффективный идентификатор пользователя. Если нет, но указанный идентификатор пользователя такой же, как у реального пользователя ID, setuid() установит эффективный идентификатор пользователя в настоящий идентификатор пользователя.
Ответ 6
Используя сохраненный set-user-ID, мы можем использовать дополнительные привилегии, предоставленные нам set-user-ID программного файла, только когда нам нужны повышенные привилегии. Вам поможет пример "Расширенное программирование в среде UNIX 3rd Edition Раздел 8.11".