Provided by: manpages-ru-dev_4.27.0-1_all bug

НАИМЕНОВАНИЕ

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

БИБЛИОТЕКА

       Стандартная библиотека языка C (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) с теми же ограничениями
       для непривилегированных процессов.

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

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

       Замечание: есть случаи, когда 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.

ВЕРСИИ

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

СТАНДАРТЫ

       Отсутствуют.

ИСТОРИЯ

       Linux 2.1.44, glibc 2.3.2. HP-UX, FreeBSD.

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

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

       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> и Kirill Rekhov <krekhov.dev@gmail.com>

       Этот перевод является свободной программной документацией; он распространяется на условиях  общедоступной
       лицензии  GNU  (GNU  General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите  об  этом
       разработчику(ам)   по   его(их)  адресу(ам)  электронной  почты  или  по  адресу  списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                     setresuid(2)