table of contents
SETFSUID(2) | Руководство программиста Linux | SETFSUID(2) |
ИМЯ¶
setfsuid - устанавливает идентификатор пользователя для доступа к файловой системе
ОБЗОР¶
#include <unistd.h> /* в glibc используется <sys/fsuid.h> */
int setfsuid(uid_t fsuid);
ОПИСАНИЕ¶
Системный вызов setfsuid() устанавливает идентификатор пользователя, который используется ядром Linux при проверке доступа к файловой системе. Обычно, значение fsuid совпадает с эффективным идентификатором пользователя. Действительно, когда изменяется эффективный идентификатор пользователя, значение fsuid при его установке изменится соответственно.
Вызовы setfsuid() и setfsgid(2) обычно используются только в программах Linux типа NFS-сервера, которым требуется изменить идентификатор пользователя и группы для доступа к файлам без изменения действительного и эффективного идентификаторов пользователя и группы. Изменение обычного идентификатора пользователя для программы типа NFS-сервера — это нарушение безопасности, приводящее к возможному получению нежелательных сигналов от других групп (но читайте далее).
Вызов setfsuid() выполняется корректно, только если он был вызван суперпользователем или если fsuid совпадает с действительным, эффективным и сохранённым идентификатором пользователя или с текущим значением fsuid.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается предыдущее значение fsuid. При ошибке возвращается текущее значение fsuid.
ВЕРСИИ¶
Данный системный вызов доступен в Linux начиная с версии 1.2.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Вызов setfsuid() есть только в Linux и не должен использоваться в переносимых программах.
ЗАМЕЧАНИЯ¶
Если в glibc определяется, что в аргументе указан неправильный идентификатор пользователя, то возвращается -1, errno присваивается значение EINVAL, а системный вызов не выполняется.
Заметим, что до появления данного системного вызова, процесс мог отправить сигнал процессу с таким же действующим идентификатором пользователя. Сейчас обработка прав отправки сигнала происходит немного иначе.
Первоначальная версия системного вызова setfsuid() в Linux поддерживала только 16-битные идентификаторы пользователя. Позднее в Linux 2.4 был добавлен вызов setfsuid32(), поддерживающий 32-битные идентификаторы. В glibc обёрточная функция setfsuid() работает одинаково вне зависимости от версий ядра.
ДЕФЕКТЫ¶
Вызвавшему процессу не возвращается никаких сообщений об ошибке. По меньшей мере, должно возвращаться хотя бы значение EPERM (если у вызывающего нет мандата CAP_SETUID).
СМОТРИТЕ ТАКЖЕ¶
2010-11-22 | Linux |