Scroll to navigation

SETREUID(2) Руководство программиста Linux SETREUID(2)

ИМЯ

setreuid, setregid - устанавливает действительный и/или эффективный идентификатор пользователя или группы

ОБЗОР

#include <sys/types.h>
#include <unistd.h>

int setreuid(uid_t ruid, uid_t euid);
int setregid(gid_t rgid, gid_t egid);


Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

setreuid(), setregid():

_BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

ОПИСАНИЕ

Вызов setreuid() устанавливает действительный и эффективный идентификатор пользователя вызывающего процесса.

Если указываемое значение действительного или эффективного идентификатора пользователя равно -1, то система не изменяет его.

Непривилегированные процессы могут изменять эффективный идентификатор пользователя на действующий, эффективный или сохранённый идентификатор пользователя.

Непривилегированные пользователи могут изменять действительный идентификатор пользователя на эффективный или действительный идентификатор пользователя.

Если установлен действительный идентификатор пользователя или установлено значение эффективного идентификатора пользователя в отличное от предыдущего значения действительного идентификатора пользователя, то значение сохранённого идентификатора пользователя будет установлено в новое значение эффективного идентификатора пользователя.

Аналогично setregid() меняет действующий и эффективный идентификаторы группы вызывающего процесса, и всё описанное выше для пользователя справедливо и для группы.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

Вызывающий процесс запущен без прав суперпользователя (Linux: не имеет мандата CAP_SETUID при вызове setreuid(), или мандата CAP_SETGID при вызове setregid()), а требуемые изменения не относятся к следующим: 1) взаимозамене эффективного идентификатора на действительный идентификатор пользователя (группы); 2) установке значения одного идентификатора в значение другого; 3) замене эффективного идентификатора пользователя (группы) на сохранённый идентификатор пользователя (группы).

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2001, 4.3BSD (вызовы setreuid() и setregid() появились в 4.2BSD).

ЗАМЕЧАНИЯ

Установка эффективного идентификатора пользователя (группы) в значение сохранённого идентификатора возможна с версии Linux 1.1.37 (1.1.38).

В POSIX.1 не определены все возможные варианты изменения идентификаторов, разрешённые в Linux непривилегированным процессам. Вызов setreuid() может изменить значение эффективного пользовательского идентификатора на действительный или сохранённый пользовательский идентификатор и не определено, может ли непривилегированный процесс установить действительный пользовательский идентификатор равным действительному, эффективному или сохранённому пользовательскому идентификатору. Вызов setregid() может изменить действительный идентификатор группы на значение сохранённого идентификатора группы, а эффективный идентификатор группы — на значение действительного или сохранённого идентификатора группы. Действующие правила о разрешённых изменениях идентификаторов отличаются в разных реализациях.

В POSIX.1 ничего не сказано о работе этих вызовов над сохранённым идентификатором пользователя и группы.

Первоначальные версии системных вызовов setreuid() и setregid() в Linux поддерживали только 16-битные идентификаторы пользователей и групп. Позднее в Linux 2.4 были добавлены вызовы setreuid32() и setregid32(), поддерживающие 32-битные идентификаторы. В glibc обёрточные функции setreuid() и setregid() работают одинаково вне зависимости от версий ядра.

СМОТРИТЕ ТАКЖЕ

getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7)

2010-11-22 Linux