НАЗВАНИЕ
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 [AT] hsys.ru> 2000