Главная » 2017 » Ноябрь » 24 » man 2 setgid
05:07
man 2 setgid

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


setgid - устанавливает идентификатор группы процесса



ОБЗОР


#include <sys/types.h>
#include <unistd.h>

int setgid(gid_t gid);



ОПИСАНИЕ


Вызов setgid() устанавливает эффективный идентификатор группы вызвавшего процесса. Если
вызывающий процесс имеет права (мандат CAP_SETGID в своём пространстве имён пользователя),
то также устанавливаются действительный и сохраненный идентификаторы группы.

В Linux setgid() реализован так же, как в версии POSIX где есть возможность
_POSIX_SAVED_IDS. Это позволяет set-group-ID-программам (не являющимся программами
суперпользователя) сбросить привилегии группы, проделать непривилегированную работу и
безопасно вернуть исходный эффективный идентификатор группы.



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


При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno
устанавливается в соответствующее значение.



ОШИБКИ


EINVAL Идентификатор группы, заданный в gid, некорректен в этом пользовательском
пространстве имён.

EPERM У вызвавшего процесса нет прав (не имеет мандата CAP_SETGID) и gid не совпадает с
эффективным идентификатором группы или сохраненным идентификатором группы.



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


POSIX.1-2001, POSIX.1-2008, SVr4.



ЗАМЕЧАНИЯ


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

Отличия между библиотекой C и ядром
На уровне ядра ID пользователя и группы являются атрибутами нити. Однако в POSIX требуется,
чтобы все нити в процессе имели одинаковые права. В реализации нитей NPTL требования POSIX
реализованы через обёрточные функции для различных системных вызовов, которые изменяют UID и
GID процесса. В этих функциях (включая и для setgid()) используется алгоритмы на основе
сигналов, которые следят за тем, что когда у одной нити изменяются права, эти изменения
выполняются и для остальных нитей процесса. Подробное описание смотрите в nptl(7).



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


getgid(2), setegid(2), setregid(2), capabilities(7), credentials(7), user_namespaces(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 25 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar