Provided by: manpages-ru_0.98-4_all bug

НАЗВАНИЕ

       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/