Provided by: manpages-ru-dev_4.21.0-2_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
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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

Linux man-pages 6.03                            4 декабря 2022 г.                                   setresuid(2)