НАЗВАНИЕ¶
setgid - установить
группу
процесса
КРАТКАЯ
СВОДКА¶
#include <sys/types.h>
#include <unistd.h>
int setgid(gid_t gid)
ОПИСАНИЕ¶
setgid
устанавливает
фактический
идентификатор
группы
текущего
процесса.
Если функция
вызвана
суперпользователем,
то
устанавливаются
также
действительный
и
сохраненный
идентификаторы
группы.
Под Linux
setgid
реализован
так же, как в
стандарте POSIX с
возможностью
_POSIX_SAVED_IDS. Это
позволяет
setgid-программам
(не от имени
суперпользователя)
сбросить все
свои
групповые
привилегии,
сделать
какую-нибудь
непривилегированную
работу и
безопасно
вернуть
исходный
фактический
идентификатор
группы.
Если
пользователь
является root'ом
или
программа
установлена
как setgid root, то
нужна особая
осторожность.
Функция
setgid
проверяет
фактический
идентификатор
группы
вызвавшего
процесса и,
если это
суперпользователь,
то все
идентификаторы
группы
процесса
устанавливаются
в значение
gid.
После этого
программе
никак не
вернуть
обратно
привилегии
суперпользователя.
Таким
образом, setgid-root
программа,
желающая
временно
сбросить
привилегии
суперпользователя,
попасть в не-root
группу, а
потом
восстановить
привилегии
суперпользователя,
не может
использовать
setgid. Желаемого
результата
можно
добиться с
помощью
системного
вызова
setegid,
которого нет
в стандарте POSIX,
но есть в BSD.
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ¶
В случае
успеха
возвращается
ноль. При
ошибке
возвращается
-1, а
errno
устанавливается
должным
образом.
ОШИБКИ¶
- EPERM
- Пользователь
не является
суперпользователем,
а gid на
совпадает с
фактическим
или
сохраненным
идентификаторами
текущего
процесса.
СООТВЕТСТВИЕ
СТАНДАРТАМ¶
SVr4, SVID.
СМОТРИ
ТАКЖЕ¶
getgid(2),
setregid(2),
setegid(2)
ПЕРЕВОД¶
Перевод Copyright (C) Alexey Mahotkin
<alexm@hsys.msk.ru> 2000
http://alexm.here.ru/manpages-ru/