setfsgid -
устанавливает
идентификатор
группы для
доступа к
файловой
системе
Standard C library (
libc,
-lc)
#include <sys/fsuid.h>
int setfsgid(gid_t fsgid);
В Linux у
процесса
есть
идентификатор
группы
файловой
системы и
эффективный
(effective)
идентификатор
группы.
Идентификатор
группы
файловой
системы
(есть
только в Linux)
используется
при
проверки
прав
доступа к
объектам
файловой
системы, а
эффективный
идентификатор
группы
используется
для
проверки
прав
доступа к
другим
различным
объектам
(смотрите
credentials(7)).
Обычно,
значение
идентификатора
группы
файловой
системы
процесса
совпадает
со
значением
эффективного
идентификатора
группы.
Более того,
при
изменении
идентификатора
эффективного
идентификатора
группы
ядро также
изменяет и
идентификатор
группы
файловой
системы на
новое
значение
идентификатора
эффективного
идентификатора
группы.Процесс
может
изменить
значение
своего
идентификатора
группы
файловой
системы на
отличное
от
эффективного
идентификатора
группы с
помощью
setfsgid()
указав его
в
параметре
fsgid.
Вызов
setfsgid()
выполняется
корректно,
только
если он был
вызван
суперпользователем
или, если
fsgid
совпадает
с
идентификатором
действительной,
эффективной
и
сохранённой
группы или
равен
текущему
значению
идентификатора
пользователя
файловой
системы
вызывающего.
При
успешном
выполнении
или при
ошибке
данный
вызов
возвращает
предыдущий
идентификатор
группы
файловой
системы
вызвавшего.
This system call is present since Linux 1.2.
Вызов
setfsgid()
есть
только в Linux и
не должен
использоваться
в
переносимых
программах.
Понятие
идентификатора
группы
файловой
системы и
системный
вызов
setfsgid()
были
изобретены
по
историческим
причинам,
которые
больше не
применимы
к
современным
ядрам Linux.
Смотрите в
описании
setfsuid(2) почему в
использовании
setfsuid(2) и
setfsgid()
теперь нет
необходимости.
Первоначальная
версия
системного
вызова Linux
setfsgid()
поддерживала
только
16-битные
идентификаторы
групп.
Позднее в Linux 2.4
был
добавлен
setfsgid32(),
поддерживающий
32-битные
идентификаторы.
Обёрточная
функция glibc
setfsgid()
скрывает
это
различие в
версиях
ядер.
В glibc 2.15 и старее,
если
обёрточная
функция
этого
системного
вызова
определяет,
что
аргумент
невозможно
передать
ядру без
обрезания
целого (так
как ядро
старое и не
поддерживает
32-битные ID
группы), то
она
возвращает
-1 и
присваивает
errno значение
EINVAL не
пытаясь
выполнить
системный
вызов.
Вызывающему
не
возвращается
никаких
ошибок, и
факт того,
что
успешном
или не
успешном
выполнении
возвращается
одинаковое
значение,
делает
невозможным
напрямую
определить
как
завершился
вызов.
Вместо
этого,
вызывающий
должен
получить
значение
из ещё
одного
вызова —
setfsgid(-1)
(который
всегда
завершается
с ошибкой),
чтобы
определить,
изменил ли
предыдущий
вызов
setfsgid()
идентификатор
группы
файловой
системы. По
крайней
мере,
должно
быть
получено
значение
EPERM,
если вызов
завершится
с ошибкой
(так как у
вызывающего
нет
мандата
CAP_SETGID).
kill(2),
setfsuid(2),
capabilities(7),
credentials(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]