Установить идентификатор пользователя и идентификатор группы дочернего процесса
#include <posix_spawnattr.h>int posix_spawnattr_setcred( posix_spawnattr_t *attrp,uid_t uid,gid_t gid );
posix_spawnattr_t
(определен в <spawn.h>
) и используется для указания наследования атрибутов процесса в операции порождения. IEEE Std 1003.1-2001 не определяет операторы сравнения или присваивания для типа posix_spawnattr_t
.libc
Функция posix_spawnattr_setcred() установливает учетные данные порожденного процесса, отличные от учетных данных вызывающей стороны. Как правило, учетные данные (то есть идентификатор пользователя и идентификатор группы) для процесса, порожденного с помощью posix_spawn() и posix_spawnp(), наследуются от вызывающей функции. Вызывающая функция должна иметь эффективный uid root на момент выполнения вызова posix_spawn() или posix_spawnp(); в противном случае вызов posix_spawn() возвращает EPERM
. Эффективный uid root не требуется для установки учетных данных в те же значения, что и у вызывающей стороны, что имело бы тот же эффект, что и полное отсутствие вызова этой функции.
Если вызывающая сторона удовлетворяет критериям posix_spawn(), как реальный, так и эффективный uid / gid порожденного процесса устанавливаются на указанные учетные данные; однако режим setuid / setgid порожденного образа имеет приоритет над действующим uid / gid порожденного процесса так же, как описано для POSIX_SPAWN_RESETIDS
(setuid / setgid порожденного образа приводит к тому, что порожденный процесс наследует uid / gid образа как его эффективный uid / gid соответственно. Реальный uid / gid будет таким, как указано в учетных данных).
Учетные данные порожденного процесса вступают в силу до фактического запуска процесса и, следовательно, определяют его доступ к определенным ресурсам. Это может привести к сбою в порожденном процессе, асинхронно успешному вызову posix_spawn() или posix_spawnp(). |
Учетные данные, установленные с помощью функции posix_spawnattr_setcred(), не действуют, если не был установлен флаг POSIX_SPAWNATTR_SETCRED
. Значение EPERM
не будет возвращено posix_spawn() или posix_spawnp(), если не установлен флаг POSIX_SPAWNATTR_SETCRED
. Если установлены оба POSIX_SPAWN_SETCRED
и POSIX_SPAWN_RESETIDS
, POSIX_SPAWN_SETCRED
будет иметь приоритет. Это означает, что когда POSIX_SPAWN_SETCRED
установлен, функция posix_spawnattr_getcred() возвращает uid и gid (где значения больше или равны 0
, а родитель имеет привилегии root); в противном случае, когда POSIX_SPAWN_SETCRED
не установлен, используется поведение наследования по умолчанию.
Флаг POSIX_SPAWN_SETCRED определяется, чтобы установить требуемые учетные данные, указанные в объекте атрибутов posix_spawnattr_t , на который необходимо воздействовать. Без этого флага любые uid и gid, указанные с помощью функции posix_spawnattr_setcred(), будут игнорироваться. Данный флаг можно установить, используя posix_spawnattr_setxflags().
Функция posix_spawnattr_setcred() позволяет вызывающей стороне указать как идентификатор пользователя (uid), так и идентификатор группы (gid) для назначения объекту атрибутов Функция posix_spawnattr_getcred() используется, чтобы позволить вызывающей стороне получить uid и gid объекта атрибутов |
POSIX 1003.1 Realtime Signals Extension
posix_spawn(), posix_spawn_file_actions_addclose(), posix_spawn_file_actions_adddup2(), posix_spawn_file_actions_addopen(), posix_spawn_file_actions_destroy(), posix_spawn_file_actions_init(), posix_spawnattr_addpartid(), posix_spawnattr_addpartition(), posix_spawnattr_destroy(), posix_spawnattr_getcred(), posix_spawnattr_getflags(), posix_spawnattr_getnode(), posix_spawnattr_getpartid(), posix_spawnattr_getpgroup(), posix_spawnattr_getrunmask(), posix_spawnattr_getschedparam(), posix_spawnattr_getschedpolicy(), posix_spawnattr_getsigdefault(), posix_spawnattr_getsigignore(), posix_spawnattr_getsigmask(), posix_spawnattr_getstackmax(), posix_spawnattr_getxflags(), posix_spawnattr_init(), posix_spawnattr_setnode(), posix_spawnattr_setpgroup(), posix_spawnattr_setschedparam(), posix_spawnattr_setrunmask(), posix_spawnattr_setschedpolicy(), posix_spawnattr_setsigdefault(), posix_spawnattr_setsigignore(), posix_spawnattr_setsigmask(), posix_spawnattr_setstackmax(), posix_spawnattr_setxflags(), posix_spawnp()
Предыдущий раздел: Описание API системной библиотеки