MAN setuid 2
Материал из Gentoo Linux Wiki
- Вернуться в раздел мануалов
Содержание |
[править] Название
setuid - установить идентификатор пользователя
[править] Краткая сводка
#include <sys/types.h>
#include <unistd.h>
int setuid(uid_t uid )
[править] Описание
setuid устанавливает фактический идентификатор владельца текущего процесса. Если фактический пользователь, вызвавший эту функцию -- root, то действительный и сохраненный идентификаторы также устанавливаются.
Под Linux setuid реализован как в стандарте POSIX с возможностью _POSIX_SAVED_IDS. Это позволяет setuid-программам (не setuid-root) сбрасывать все привилегии, делать непривилегированную работу, а затем безопасно возвращать себе исходный фактический идентификатор пользователя.
Если пользователь -- root, или программа установлена как setuid root, нужна особенная осторожность. Функция setuid проверяет фактический идентификатор вызвавшего пользователя и, если это суперпользователь, то все идентификаторы устанавливаются в uid . После этого программа уже никак не сможет вернуть обратно права пользователя root.
Таким образом, setuid-root программа, желающая временно сбросить права root, на время сделаться другим пользователем, а затем восстановить права root, не может пользоваться setuid . Требуемого результата можно достичь с помощью вызова seteuid , которого нет в POSIX, но есть в BSD.
[править] Возвращаемое значение
В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается должным образом.
[править] Ошибки
EPERM Пользователь не является суперпользователем, а uid не совпадает с фактическим или сохраненным идентификатором владельца текущего процесса.
[править] Соответствие стандартам
SVr4, SVID, POSIX.1. Этот системный вызов не совсем совместим с 4.4BSD, который устанавливает действительный, сохраненный и фактический идентификаторы пользователя. SVr4 документирует дополнительный код ошибки EINVAL.
[править] Замечания по специфике linux
Linux поддерживает концепция идентификатора пользователя файловой системы, обычно совпадающего с фактическим идентификатором. Системный вызов setuid также устанавливает идентификатор пользователя файловой системы. Смотри setfsuid (2). Если uid отличается от старого фактического идентификатора, то процессу нельзя будет создавать файлы дампа памяти (core).
[править] Смотри также
getuid (2), setreuid (2), seteuid (2), setfsuid (2)
[править] Перевод
Перевод Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 2000
http://alexm.here.ru/manpages-ru/
[править] Комментарии к man файлу
-*- nroff -*-
Copyright (C), 1994, Graeme W. Wilford (Wilf).
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one
Since the Linux kernel and libraries are constantly changing, this
manual page may be incorrect or out-of-date. The author(s) assume no
responsibility for errors or omissions, or for damages resulting from
the use of the information contained herein. The author(s) may not
have taken the same level of care in the production of this manual,
which is licensed free of charge, as they might when working
professionally.
Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.
Fri Jul 29th 12:56:44 BST 1994 Wilf. <G.Wilford@ee.surrey.ac.uk>
Changes inspired by patch from Richard Kettlewell
<richard@greenend.org.uk>, aeb 970616.
