.\" -*- coding: UTF-8 -*- .\" Copyright (C) 1997 Andries Brouwer (aeb@cwi.nl) .\" and Copyright (C) 2005, 2010, 2014, 2015, Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified, 2003-05-26, Michael Kerrisk, .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH setresuid 2 "30 марта 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ setresuid, setresgid \- устанавливает реальный, эффективный и сохранённый пользовательский идентификатор или идентификатор группы .SH LIBRARY Standard C library (\fIlibc\fP, \fI\-lc\fP) .SH СИНТАКСИС .nf \fB#define _GNU_SOURCE\fP /* см. feature_test_macros(7) */ \fB#include \fP .PP \fBint setresuid(uid_t \fP\fIruid\fP\fB, uid_t \fP\fIeuid\fP\fB, uid_t \fP\fIsuid\fP\fB);\fP \fBint setresgid(gid_t \fP\fIrgid\fP\fB, gid_t \fP\fIegid\fP\fB, gid_t \fP\fIsgid\fP\fB);\fP .fi .SH ОПИСАНИЕ Вызов \fBsetresuid\fP() устанавливает реальный идентификатор пользователя, эффективный идентификатор пользователя и сохранённый идентификатор пользователя вызывающего процесса. .PP Непривилегированный процесс может изменять реальный UID, эффективный UID и сохранённый set\-user\-ID на соответственно текущий реальный UID, текущий UID и текущий сохранённый set\-user\-ID. .PP Привилегированный процесс (в Linux: имеющие мандат \fBCAP_SETUID\fP) могут устанавливать произвольные значения для реального, эффективного UID и сохранённого set\-user\-UID . .PP Если один из параметров равен \-1, то соответствующее ему значение не изменяется. .PP Независимо от того, как изменились реальный UID, эффективный UID и сохранённый UID идентификатор в файловой системе всегда устанавливается равным значению (возможно новому) эффективного UID. .PP Аналогично, \fBsetresgid\fP() устанавливает реальный GID, эффективный GID, и сохранённый GID вызывающего процесса (и всегда изменяет GID в файловой системе на значение эффективного GID) с теми же ограничениями для непривилегированных процессов. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" On success, zero is returned. On error, \-1 is returned, and \fIerrno\fP is set to indicate the error. .PP \fIЗамечание\fP: есть случаи, когда \fBsetresuid\fP() может завершиться с ошибкой даже когда UID вызывающего равен 0; это серьёзная ошибка безопасности — не проверять возвращаемое значение \fBsetresuid\fP(). .SH ОШИБКИ .TP \fBEAGAIN\fP Вызов изменил бы настоящего реальный UID вызывающего (т. е. \fIruid\fP не совпадает с реальным UID вызывающего), но возникла временная ошибка при выделении памяти под необходимые структуры ядра. .TP \fBEAGAIN\fP Значение \fIruid\fP не совпадает с реальным UID вызывающего и этот вызов создал был превышение количества процессов, принадлежащих пользователю с реальным ID \fIruid\fP сверх ограничителя ресурсы \fBRLIMIT_NPROC\fP вызывающего. Начиная с Linux 3.1 эта ошибка больше не возникает (но корректное приложение должно проверять эту ошибку); смотрите описание \fBEAGAIN\fP в \fBexecve\fP(2). .TP \fBEINVAL\fP Один или более целевых идентификаторов пользователя или группы некорректны в этом пользовательском пространстве имён. .TP \fBEPERM\fP Вызывающий процесс не является привилегированным (не имеет необходимого мандата в своём пространстве имён пользователя) и пытается изменить значения идентификаторов, что запрещено. Для \fBsetresuid\fP() необходим мандат \fBCAP_SETUID\fP; для \fBsetresgid\fP() — \fBCAP_SETGID\fP. .SH ВЕРСИИ .SS "Отличия между библиотекой C и ядром" На уровне ядра ID пользователя и группы являются атрибутами нити. Однако в POSIX требуется, чтобы все нити в процессе имели одинаковые права. В реализации нитей NPTL требования POSIX реализованы через обёрточные функции для различных системных вызовов, которые изменяют UID и GID процесса. В этих функциях (включая и \fBsetresuid\fP() and \fBsetresgid\fP()) используется алгоритмы на основе сигналов, которые следят за тем, что когда у одной нити изменяются права, эти изменения выполняются и для остальных нитей процесса. Подробное описание смотрите в \fBnptl\fP(7). .SH СТАНДАРТЫ None. .SH ИСТОРИЯ Linux 2.1.44, glibc 2.3.2. HP\-UX, FreeBSD. .PP Первоначальные версии системных вызовов \fBsetresuid\fP() и \fBsetresgid\fP() в Linux поддерживали только 16\-битные идентификаторы пользователей и групп. Позднее в Linux 2.4 были добавлены вызовы \fBsetresuid32\fP() и \fBsetresgid32\fP(), поддерживающие 32\-битные идентификаторы. В glibc обёрточные функции \fBsetresuid\fP() и \fBsetresgid\fP() работают одинаково вне зависимости от версий ядра. .SH "СМ. ТАКЖЕ" \fBgetresuid\fP(2), \fBgetuid\fP(2), \fBsetfsgid\fP(2), \fBsetfsuid\fP(2), \fBsetreuid\fP(2), \fBsetuid\fP(2), \fBcapabilities\fP(7), \fBcredentials\fP(7), \fBuser_namespaces\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .