table of contents
- bookworm 4.18.1-1
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.24.0-2
seteuid(2) | System Calls Manual | seteuid(2) |
ИМЯ¶
seteuid, setegid - устанавливает эффективный идентификатор пользователя или группы
БИБЛИОТЕКА¶
Стандартная библиотека языка C (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() с «групповым» идентификатором, а не «пользовательским».
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
Замечание: есть случаи, когда seteuid() может завершиться с ошибкой даже когда UID вызывающего равен 0; это серьёзная ошибка безопасности — не проверять возвращаемое значение seteuid().
ОШИБКИ¶
- EINVAL
- Целевой идентификатор пользователя или группы некорректен в этом пользовательском пространстве имён.
- EPERM
- Для seteuid(): вызывающий процесс не имеет прав (не имеет мандата CAP_SETUID в своём пространстве имён пользователя) и euid не совпадает с текущим действительным, эффективным или сохранённым идентификатором пользователя.
- Для setegid(): вызывающий процесс не имеет прав (не имеет мандата CAP_SETGID в своём пространстве имён пользователя) и egid не совпадает с текущим действительным, эффективным или сохранённым идентификатором группы.
СТАНДАРТЫ¶
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) равный текущему эффективному идентификатору пользователя (группе), и некоторые реализации не позволяют этого.
Отличия между библиотекой C и ядром¶
В 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 (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.
5 февраля 2023 г. | Справочные страницы Linux 6.03 |