seteuid(2) | System Calls Manual | seteuid(2) |
seteuid, setegid - устанавливает эффективный идентификатор пользователя или группы
Standard C library (libc, -lc)
#include <unistd.h>
int seteuid(uid_t euid); int setegid(gid_t egid);
seteuid(), setegid():
_POSIX_C_SOURCE >= 200112L
|| /* glibc <= 2.19: */ _BSD_SOURCE
Вызов seteuid() устанавливает эффективный идентификатор пользователя вызывающего процесса. Непривилегированные процессы могут менять эффективный идентификатор пользователя только на действительный, эффективный или сохранённый идентификатор пользователя.
Тоже самое справедливо при работе setegid() с «групповым» идентификатором, а не «пользовательским».
On success, zero is returned. On error, -1 is returned, and errno is set to indicate the error.
Замечание: есть случаи, когда seteuid() может завершиться с ошибкой даже когда UID вызывающего равен 0; это серьёзная ошибка безопасности — не проверять возвращаемое значение seteuid().
POSIX.1-2001, POSIX.1-2008, 4.3BSD.
Установка эффективного идентификатора пользователя (группы) в сохранённый идентификатор пользователя (группы) возможна с версии Linux 1.1.37 (1.1.38). В других системах надо проверять _POSIX_SAVED_IDS.
В glibc 2.0 вызов seteuid(euid)эквивалентен setreuid(-1, euid), и поэтому может изменить сохранённый идентификатор пользователя. В glibc 2.1 и новее он эквивалентен setresuid(-1, euid, -1) и поэтому не изменяет сохранённый идентификатор пользователя. Аналогичные замечания относятся и к setegid(), с той разницей, что изменение в реализации из setregid(-1, egid) в setresgid(-1, egid, -1) произошло в glibc 2.2 или 2.3 (зависит от аппаратной архитектуры).
Согласно POSIX.1, seteuid() (setegid()) необходимо запрещать euid (egid) равный текущему эффективному идентификатору пользователя (группе), и некоторые реализации не позволяют этого.
В Linux, seteuid() и setegid() реализованы в виде библиотечных функций, которые вызывают setreuid(2) и setregid(2), соответственно.
geteuid(2), setresuid(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.
5 февраля 2023 г. | Linux man-pages 6.03 |