НАЗВАНИЕ¶
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/