ОБЗОР
#include <sys/fsuid.h>
int setfsgid(uid_t fsgid);
ОПИСАНИЕ
Системный вызов setfsgid() изменяет значение идентификатора группы
файловой системы вызывающего — идентификатор группы, который ядро Linux
использует для проверки при любом доступе к файловой системе. Обычно,
значение идентификатора группы файловой системы равно теневому значению
идентификатора эффективной группы. Более того, при изменении идентификатора
эффективной группы также изменяется и идентификатор группы файловой системы
на новое значение идентификатора эффективной группы.
Вызовы setfsuid(2) и setfsgid() обычно используются только в программах Linux типа NFS-сервера, которым требуется изменить идентификатор пользователя и группы для доступа к файлам без изменения действительного и эффективного идентификаторов пользователя и группы. Изменение обычного идентификатора пользователя для программы типа NFS-сервера --- это нарушение безопасности, приводящее к возможному получению нежелательных сигналов от других групп (но читайте далее).
Вызов setfsgid() выполняется корректно, только если он был вызван суперпользователем или, если fsgid совпадает с идентификатором действительной, эффективной и сохранённой группы или равен текущему значению идентификатора пользователя файловой системы вызывающего.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении или при ошибке данный вызов возвращает предыдущий
идентификатор группы файловой системы вызвавшего.
ВЕРСИИ
Данный системный вызов доступен в Linux начиная с версии 1.2.
СООТВЕТСТВИЕ СТАНДАРТАМ
Вызов setfsgid() есть только в Linux и не должен использоваться в
переносимых программах.
ЗАМЕЧАНИЯ
Если в glibc определяется, что в аргументе указан неправильный идентификатор
группы, то возвращается -1, errno присваивается значение EINVAL, а
системный вызов не выполняется.
Заметим, что до появления данного системного вызова, процесс мог отправить сигнал процессу с таким же действующим идентификатором пользователя. Сейчас обработка прав отправки сигнала происходит немного иначе. Смотрите в setfsuid(2) описание почему использование setfsuid(2) и setfsgid() в настоящее время больше не требуется.
Первоначальная версия системного вызова Linux setfsgid() поддерживала только 16-битные идентификаторы групп. Позднее в Linux 2.4 был добавлен setfsgid32(), поддерживающий 32-битные идентификаторы. Обёрточная функция glibc setfsgid() скрывает это различие в версиях ядер.