Provided by: manpages-ru-dev_4.19.0-7_all bug

ИМЯ

       setresuid, setresgid - устанавливает  реальный, эффективный и сохранённый пользовательский
       идентификатор или идентификатор группы

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #define _GNU_SOURCE         /* см. feature_test_macros(7) */
       #include <unistd.h>

       int setresuid(uid_t ruid, uid_t euid, uid_t suid);
       int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

ОПИСАНИЕ

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

       Непривилегированный  процесс  может  изменять  реальный UID, эффективный UID и сохранённый
       set-user-ID на соответственно текущий реальный UID, текущий   UID  и  текущий  сохранённый
       set-user-ID.

       Привилегированный  процесс  (в  Linux:  имеющие  мандат  CAP_SETUID)  могут  устанавливать
       произвольные значения для реального, эффективного UID и сохранённого set-user-UID .

       Если один из параметров равен -1, то соответствующее ему значение не изменяется.

       Независимо от того, как  изменились  реальный  UID,  эффективный  UID  и  сохранённый  UID
       идентификатор  в файловой системе всегда устанавливается равным значению (возможно новому)
       эффективного UID.

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

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

       On success, zero is returned.  On error, -1 is returned, and errno is set to indicate  the
       error.

       Замечание:  есть  случаи,  когда  setresuid()  может  завершиться с ошибкой даже когда UID
       вызывающего равен 0;  это  серьёзная  ошибка  безопасности  —  не  проверять  возвращаемое
       значение setresuid().

ОШИБКИ

       EAGAIN Вызов  изменил  бы  настоящего  реальный UID вызывающего (т. е. ruid не совпадает с
              реальным UID вызывающего), но возникла временная ошибка при  выделении  памяти  под
              необходимые структуры ядра.

       EAGAIN Значение  ruid  не  совпадает  с  реальным  UID вызывающего и этот вызов создал был
              превышение количества процессов, принадлежащих  пользователю  с  реальным  ID  ruid
              сверх ограничителя ресурсы RLIMIT_NPROC вызывающего. Начиная с Linux 3.1 эта ошибка
              больше не  возникает  (но  корректное  приложение  должно  проверять  эту  ошибку);
              смотрите описание EAGAIN в execve(2).

       EINVAL Один  или  более целевых идентификаторов пользователя или группы некорректны в этом
              пользовательском пространстве имён.

       EPERM  Вызывающий процесс не является привилегированным (не имеет необходимого  мандата  в
              своём пространстве имён пользователя) и пытается изменить значения идентификаторов,
              что запрещено. Для setresuid()  необходим  мандат  CAP_SETUID;  для  setresgid()  —
              CAP_SETGID.

ВЕРСИИ

       Данные вызовы доступны в Linux начиная с версии 2.1.44.

СТАНДАРТЫ

       Это нестандартные вызовы; также они есть в HP-UX и некоторых BSD.

ЗАМЕЧАНИЯ

       Under HP-UX and FreeBSD, the prototype is found in <unistd.h>.  Under Linux, the prototype
       is provided since glibc 2.3.2.

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

   Отличия между библиотекой C и ядром
       На уровне ядра  ID  пользователя  и  группы  являются  атрибутами  нити.  Однако  в  POSIX
       требуется,  чтобы  все  нити  в  процессе  имели одинаковые права. В реализации нитей NPTL
       требования POSIX реализованы через обёрточные функции  для  различных  системных  вызовов,
       которые  изменяют  UID  и  GID  процесса.  В  этих  функциях  (включая  и  setresuid() and
       setresgid()) используется алгоритмы на основе сигналов, которые следят за тем, что когда у
       одной  нити  изменяются  права,  эти изменения выполняются и для остальных нитей процесса.
       Подробное описание смотрите в nptl(7).

СМ. ТАКЖЕ

       getresuid(2),    getuid(2),    setfsgid(2),    setfsuid(2),    setreuid(2),     setuid(2),
       capabilities(7), credentials(7), user_namespaces(7)

ПЕРЕВОД

       Русский    перевод    этой    страницы    руководства   был   сделан   Alexander   Golubev
       <fatzer2@gmail.com>,  Azamat  Hackimov  <azamat.hackimov@gmail.com>,   Hotellook,   Nikita
       <zxcvbnm3230@mail.ru>,       Spiros       Georgaras       <sng@hellug.gr>,       Vladislav
       <ivladislavefimov@gmail.com>,   Yuri   Kozlov   <yuray@komyakino.ru>   и    Иван    Павлов
       <pavia00@gmail.com>

       Этот  перевод  является  бесплатной  документацией;  прочитайте  Стандартную  общественную
       лицензию GNU версии 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если  вы  обнаружите  ошибки  в  переводе этой страницы руководства, пожалуйста, отправьте
       электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.