Scroll to navigation

credentials(7) Miscellaneous Information Manual credentials(7)

ИМЯ

credentials - идентификаторы процесса

ОПИСАНИЕ

ID (PID) процесса

Каждый процесс имеет уникальный неотрицательный целочисленный идентификатор (PID), который ему назначается при создании с помощью fork(2). Процесс может узнать свой PID с помощью вызова getpid(2). PID имеет тип pid_t (определён в <sys/types.h>).

PIDs are used in a range of system calls to identify the process affected by the call, for example: kill(2), ptrace(2), setpriority(2), setpgid(2), setsid(2), sigqueue(3), and waitpid(2).

PID процесса сохраняется после execve(2).

Родительский ID (PPID) процесса

ID родительского процесса — это ID процесса, который создал данный процесс с помощью fork(2). Процесс может получить свой PPID с помощью getppid(2). PPID имеет тип pid_t.

PPID процесса сохраняется после execve(2).

ID группы процессов и сеанса

У каждого процесса есть ID сеанса и ID группы процессов; они имеют тип pid_t. Процесс может получить ID своего сеанса с помощью getsid(2), а ID своей группы процессов с помощью getpgrp(2).

Потомок, создаваемый с помощью fork(2), наследует ID сеанса и группы процессов своего родителя. Идентификатор сеанса и группы сохраняется после execve(2).

Сеансы и группы процессов — это абстракции, предназначенные для поддержки управления заданиями оболочки. Группа процессов (иногда называемая «заданием» (job)) — это набор процессов, у которых одинаковый ID группы процессов; оболочка создаёт новую группу процессов для процессов, используемых в одной команде или конвейере (например, два процесса, созданные командой «ls | wc», помещаются в одну группу процессов). Членство в группе процессов может быть определено с помощью setpgid(2). Процесс, чей ID процесса совпадает с его ID группы процессов, называется лидером группы процессов этой группы.

Сеанс — это набор процессов, у которых одинаковый ID сеанса. Все члены группы процессов также имеют одинаковый ID сеанса (т. е., все члены группы процессов всегда принадлежат одному сеансу; таким образом, сеансы и группы процессов формируют из процессов жёсткую двухуровневую иерархию). Новый сеанс создаётся при вызове процессом setsid(2), который создаёт новый сеанс, чей ID сеанса совпадает с PID процесса, который вызвал setsid(2). Создатель сеанса также называется лидером сеанса.

Все процессы в сеансе используют общий управляющий терминал. Управляющий терминал назначается в момент, когда лидер сеанса впервые открывает терминал (если при вызове open(2) не указан флаг O_NOCTTY). Терминал может быть управляющим терминалом не более чем для одного сеанса.

At most one of the jobs in a session may be the foreground job; other jobs in the session are background jobs. Only the foreground job may read from the terminal; when a process in the background attempts to read from the terminal, its process group is sent a SIGTTIN signal, which suspends the job. If the TOSTOP flag has been set for the terminal (see termios(3)), then only the foreground job may write to the terminal; writes from background jobs cause a SIGTTOU signal to be generated, which suspends the job. When terminal keys that generate a signal (such as the interrupt key, normally control-C) are pressed, the signal is sent to the processes in the foreground job.

С членами группы процессов могут работать различные системные вызовы и библиотечные функции, такие как: kill(2), killpg(3), getpriority(2), setpriority(2), ioprio_get(2), ioprio_set(2), waitid(2) и waitpid(2). Также смотрите описание операций F_GETOWN, F_GETOWN_EX, F_SETOWN и F_SETOWN_EX в fcntl(2).

Идентификаторы пользователя и группы

С каждым процессом связаны идентификатор пользователя и различных групп. Эти идентификаторы представляются в виде целых чисел с типами gid_t и uid_t, соответственно (определены в <sys/types.h>).

В Linux каждый процесс имеет следующие идентификаторы пользователя и групп:

Реальный ID пользователя (real user) и реальный ID группы. Эти ID определяют кто владелец процесса. Реальный ID пользователя (группы) процесса можно получить с помощью getuid(2) (getgid(2)).
Эффективный ID пользователя (effective user) и эффективный ID группы. Эти ID используются ядром для определения прав, которые будет иметь процесс при доступе к общим ресурсам, таким как очереди сообщений, общая память и семафоры. В большинстве систем UNIX эти ID также определяют права доступа к файлам. Однако в Linux для этой задачи используются ID файловой системы, описанные далее. Эффективный ID пользователя (группы) процесса можно получить с помощью geteuid(2) (getegid(2)).
Сохранённые set-user-ID и set-group-ID. Эти ID используются в программах с set-user-ID и set-group-ID битами для сохранения копии соответствующих эффективных ID, которые были установлены в момент запуска программы (смотрите execve(2)). Программа с set-user-ID может повышать и понижать права, переключая свой ID эффективного пользователя туда и обратно между значениями её ID реального пользователя и сохранённым set-user-ID. Такое переключение производится с помощью вызовов seteuid(2), setreuid(2) или setresuid(2). Программа с set-group-ID выполняет аналогичные задачи с помощью setegid(2), setregid(2) или setresgid(2). Сохранённый set-user-ID (set-group-ID) процесса можно получить с помощью getresuid(2) (getresgid(2)).
ID пользователя файловой системы и ID группы файловой системы (есть только в Linux). Эти ID, совместно с ID дополнительных групп (supplementary group), описанных ниже, используются для определения прав доступа к файлам; подробней смотрите path_resolution(7). Каждый раз при изменении ID эффективного пользователя (группы) ядро также автоматически изменяет ID пользователя (группы) файловой системы на то же значение. Следовательно, ID файловой системы, обычно, равны соответствующим эффективным ID, а семантика проверки прав доступа к файлам в Linux такая же как и у других систем UNIX. ID файловой системы можно сделать отличным от эффективных ID с помощью вызова setfsuid(2) и setfsgid(2).
Supplementary group IDs. This is a set of additional group IDs that are used for permission checks when accessing files and other shared resources. Before Linux 2.6.4, a process can be a member of up to 32 supplementary groups; since Linux 2.6.4, a process can be a member of up to 65536 supplementary groups. The call sysconf(_SC_NGROUPS_MAX) can be used to determine the number of supplementary groups of which a process may be a member. A process can obtain its set of supplementary group IDs using getgroups(2).

Дочерний процесс, созданный fork(2), наследует копии ID пользователя и группы своего предка. При execve(2) сохраняются ID реального пользователя и группы процесса, а также ID дополнительных групп; эффективный и сохранённый ID могут измениться (описано в execve(2)).

Кроме целей, отмеченных выше, идентификаторы пользователя процесса также используются:

при определении права на отправку сигналов (смотрите kill(2));
при определении права на установку параметров планировщика процесса (значение уступчивости, политика и приоритет планирования в реальном времени, увязывание ЦП, приоритет ввода-вывода) с помощью setpriority(2), sched_setaffinity(2), sched_setscheduler(2), sched_setparam(2), sched_setattr(2) и ioprio_set(2);
при проверке ограничения по ресурсам (смотрите getrlimit(2));
при проверке ограничения на количество экземпляров inotify, которые процесс может создать (смотрите inotify(7)).

Modifying process user and group IDs

Subject to rules described in the relevant manual pages, a process can use the following APIs to modify its user and group IDs:

setuid(2) (setgid(2))
Modify the process's real (and possibly effective and saved-set) user (group) IDs.
seteuid(2) (setegid(2))
Modify the process's effective user (group) ID.
setfsuid(2) (setfsgid(2))
Modify the process's filesystem user (group) ID.
setreuid(2) (setregid(2))
Modify the process's real and effective (and possibly saved-set) user (group) IDs.
setresuid(2) (setresgid(2))
Modify the process's real, effective, and saved-set user (group) IDs.
setgroups(2)
Modify the process's supplementary group list.

Any changes to a process's effective user (group) ID are automatically carried over to the process's filesystem user (group) ID. Changes to a process's effective user or group ID can also affect the process "dumpable" attribute, as described in prctl(2).

Changes to process user and group IDs can affect the capabilities of the process, as described in capabilities(7).

СТАНДАРТЫ

ID процесса, ID родительского процесса, ID группы процессов и ID сеанса определены в POSIX.1. ID реального, эффективного и сохранённого пользователя и группы, а также ID дополнительных групп определены в POSIX.1. ID пользователя и группы файловой системы являются расширением Linux.

ПРИМЕЧАНИЯ

Различные поля в файле /proc/pid/status отражают идентификаторы процесса, описанные выше. Подробности смотрите в proc(5).

Согласно спецификации на нити POSIX требуется, чтобы идентификаторы были одинаковыми у всех нитей процесса. Однако на уровне ядра в Linux ведутся отдельные идентификаторы пользователя и группы для каждой нити. Реализация нитей NPTL выполняет дополнительные действия, чтобы любое изменение идентификаторов пользователя и группы (например, с помощью setuid(2), setresuid(2)) отражалось на всех нитях POSIX процесса. Дополнительную информацию смотрите в nptl(7).

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

bash(1), csh(1), groups(1), id(1), newgrp(1), ps(1), runuser(1), setpriv(1), sg(1), su(1), access(2), execve(2), faccessat(2), fork(2), getgroups(2), getpgrp(2), getpid(2), getppid(2), getsid(2), kill(2), setegid(2), seteuid(2), setfsgid(2), setfsuid(2), setgid(2), setgroups(2), setpgid(2), setresgid(2), setresuid(2), setsid(2), setuid(2), waitpid(2), euidaccess(3), initgroups(3), killpg(3), tcgetpgrp(3), tcgetsid(3), tcsetpgrp(3), group(5), passwd(5), shadow(5), capabilities(7), namespaces(7), path_resolution(7), pid_namespaces(7), pthreads(7), signal(7), system_data_types(7), unix(7), user_namespaces(7), sudo(8)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков.

5 февраля 2023 г. Справочные страницы Linux 6.03