Scroll to navigation

SETFSGID(2) Руководство программиста Linux SETFSGID(2)

ИМЯ

setfsgid - устанавливает идентификатор группы для доступа к файловой системе

ОБЗОР

#include <unistd.h> /* в glibc используется <sys/fsuid.h> */

int setfsgid(uid_t fsgid);

ОПИСАНИЕ

Системный вызов setfsgid() устанавливает идентификатор группы, который используется ядром Linux при проверке доступа к файловой системе. Обычно, значение fsgid совпадает с идентификатором эффективной группы. Действительно, когда изменяется идентификатор эффективной группы, значение fsgid при его установке изменится соответственно.

Вызовы setfsuid(2) и setfsgid() обычно используются только в программах Linux типа NFS-сервера, которым требуется изменить идентификатор пользователя и группы для доступа к файлам без изменения действительного и эффективного идентификаторов пользователя и группы. Изменение обычного идентификатора пользователя для программы типа NFS-сервера — это нарушение безопасности, приводящее к возможному получению нежелательных сигналов от других групп (но читайте далее).

Вызов setfsgid() выполняется корректно, только если он был вызван суперпользователем или если fsgid совпадает с идентификатором действительной, эффективной и сохранённой группы или с текущим значением fsgid.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении возвращается предыдущее значение fsgid. При ошибке возвращается текущее значение fsgid.

ВЕРСИИ

Данный системный вызов доступен в Linux начиная с версии 1.2.

СООТВЕТСТВИЕ СТАНДАРТАМ

Вызов setfsgid() есть только в Linux и не должен использоваться в переносимых программах.

ЗАМЕЧАНИЯ

Если в glibc определяется, что в аргументе указан неправильный идентификатор группы, то возвращается -1, errno присваивается значение EINVAL, а системный вызов не выполняется.

Заметим, что до появления данного системного вызова, процесс мог отправить сигнал процессу с таким же действующим идентификатором пользователя. Сейчас обработка прав отправки сигнала происходит немного иначе.

Первоначальная версия системного вызова Linux setfsgid() поддерживала только 16-битные идентификаторы групп. Позднее в Linux 2.4 был добавлен setfsgid32(), поддерживающий 32-битные идентификаторы. Обёрточная функция glibc setfsgid() скрывает это различие в версиях ядер.

ДЕФЕКТЫ

Вызвавшему процессу не возвращается никаких сообщений об ошибке. По меньшей мере, должно возвращаться хотя бы значение EPERM (если у вызывающего нет мандата CAP_SETGID).

СМОТРИТЕ ТАКЖЕ

kill(2), setfsuid(2), capabilities(7), credentials(7)

2010-11-22 Linux