setuid - устанавливает идентификатор пользователя
НАЗВАНИЕsetuid - устанавливает идентификатор пользователя
СИНТАКСИС
#include
#include
int setuid(uid_t uid);
ОПИСАНИЕ
setuid устанавливает фактический идентификатор владельца
текущего процесса. Если фактический пользователь,
вызвавший эту функцию является суперпользователем, то
также устанавливаются действительный и сохраненный
идентификаторы.
В 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-файлы.