NOM
credentials - Identifiants de processus
DESCRIPTION
Identifiant
de processus (PID)
Chaque processus a un identifiant entier positif, qui lui
est attribué à sa création (avec
fork(2)). Un processus peut connaître son PID
avec getpid(2). Un PID est représenté
par le type pid_t (défini dans
<sys/types.h>).
Les PID sont utilisés dans un certain nombre d’appels système pour identifier le processus affecté, par exemple : kill(2), ptrace(2), setpriority(2), setpgid(2), setsid(2), sigqueue(3) et waitpid(2).
Le PID d’un processus est conservé travers d’un execve(2).
Identifiant
du processus père (PPID)
L’identifiant de processus père d’un
processus identifie le processus qui l’a
créé avec fork(2). Un processus peut
connaître son PPID avec getppid(2). Un PPID est
représenté à l’aide du type
pid_t.
Le PPID d’un processus est conservé au travers d’un execve(2).
Identifiant
de groupe de processus et identifiant de session
Chaque processus a un identifiant de session et un
identifiant de groupe de processus, tous deux
représentés par le type pid_t. Un
processus peut connaître son identifiant de session
avec getsid(2), et son identifiant de groupe de
processus avec getpgrp(2).
Un processus créé par fork(2) hérite de l’identifiant de session et de l’identifiant de groupe de processus de son père. Les identifiants de session et de groupe de processus sont préservés par execve(2).
Les sessions et les groupes de processus sont des abstractions destinées à aider le contrôle des tâches dans le shell. Un groupe de processus (parfois appelé « tâche ») est un ensemble de processus ayant le même identifiant de groupe de processus ; le shell crée un nouveau groupe de processus pour exécuter une commande ou pipeline (par exemple, les deux processus créés pour exécuter la commande « ls | wc » sont placés dans le même groupe de processus). L’appartenance à un groupe de processus peut être changée avec setpgid(2). Le processus dont le PID est égal à son identifiant de groupe de processus est le leader du groupe de processus.
Une session est un ensemble de processus ayant le même identifiant de session. Tous les membres d’un groupe de processus ont également le même identifiant de session (tous les membres d’un groupe de processus appartiennent à la même session, donc les sessions et les groupes de processus forment une hiérarchie à deux niveaux). Une nouvelle session est créée lorsqu’un processus appelle setsid(2), qui crée une nouvelle session dont l’identifiant est le PID de ce processus. Le créateur de cette session est appelé leader de session.
Tous les processus d’une session partagent un terminal de contrôle. Le terminal de contrôle est créé lorsque le leader de session ouvre un terminal pour la première fois (sauf si le paramètre O_NOCTTY est précisé lors de l’appel de open(2)). Un terminal ne peut être le terminal de contrôle que d’une seule session.
Il ne peut y avoir plus d’une tâche ayant la place de « tâche de premier plan » ; les autres tâches de la sessions sont des « tâches d’arrière plan ». Seul la tâche de premier plan peut recevoir des informations depuis le terminal ; si un job d’arrière plan tente de recevoir des informations du terminal, le signal SIGTTIN est renvoyé au groupe du processus, ce qui a pour effet de suspendre la tâche. Si le terminal a reçu l’attribut TOSTOP (consultez termios(3)), alors seule la tâche de premier plan est autorisée à afficher des données dans le terminal ; l’envoi de données d’une tâche d’arrière plan vers le terminal déclenche un signal SIGTTOU, ce qui a pour effet de suspendre la tâche. Lorsqu’une touche du clavier qui génère un signal est enfoncée (par exemple la touche interrupt, qui provoque normalement un control-C), le signal est envoyé au processus de premier plan.
Various system calls and library functions may operate on all members of a process group, including kill(2), killpg(3), getpriority(2), setpriority(2), ioprio_get(2), ioprio_set(2), waitid(2), and waitpid(2). See also the discussion of the F_GETOWN, F_GETOWN_EX, F_SETOWN, and F_SETOWN_EX operations in fcntl(2).
Identifiants
d’utilisateur et de groupe
Each process has various associated user and group IDs.
These IDs are integers, respectively represented using the
types uid_t and gid_t (defined in
<sys/types.h>).
Sous Linux, chaque processus a les identifiants d’utilisateur et de groupe suivants :
* |
Identifiant d’utilisateur réel et identifiant de groupe réel. Ces identifiants déterminent le propriétaire du processus. Un processus peut déterminer ses UID et GID réels avec getuid(2) et getgid(2). | ||
* |
UID effectif et GID effectif. Ces identifiants sont utilisés par le noyau pour déterminer les permissions de ce processus lors d’accès à des ressources partagées telles que les files de messages, la mémoire partagée ou les sémaphores. Sur la plupart des systèmes UNIX, ces identifiants déterminent aussi les permissions d’accès aux fichiers. Cependant, Linux utilise l’identifiant d’utilisateur du système de fichiers (décrit ci-dessous) pour cette tâche. Un processus peut déterminer son UID (GID) effectif avec geteuid(2) (getegid(2)). | ||
* |
UID sauvé et GID sauvé. Ces identifiants sont utilisés dans les programmes set-user-ID et set-group-ID pour sauvegarder une copie des identifiants effectifs correspondants lors de l’exécution du programme (consultez execve(2)). Un programme set-user-ID peut prendre et abandonner des privilèges en changeant son UID effectif entre les valeurs de ses UID réel et sauvé. Cet échange est réalisé par les appels système seteuid(2), setreuid(2) ou setresuid(2). Un programme set-group-ID peut effectuer les opérations correspondantes avec setegid(2), setregid(2) ou setresgid(2). Un processus peut obtenir son UID (resp. GID) sauvé avec getresuid(2) (resp. getresgid(2)). | ||
* |
UID et GID du système de fichiers (spécifiques à Linux). Ces identifiants, ainsi que les identifiants de groupe additionnels décrits plus bas, sont utilisés pour déterminer les permissions d’accès aux fichiers ; consultez path_resolution(7) pour plus de détails. Lorsque l’UID (ou GID) effectif d’un processus est modifié, le noyau définit automatiquement l’UID (ou GID) du système de fichiers à la même valeur. Ainsi, les identifiants du système de fichiers sont en général égaux aux identifiants effectifs, et la sémantique des vérifications de permissions sont les mêmes sous Linux et sous les autres UNIX. Les identifiants du système de fichiers peuvent prendre une valeur différente des identifiants effectifs en utilisant les appels setfsuid(2) et setfsgid(2). | ||
* |
GID additionnels. Il s’agit d’un ensemble d’identifiants de groupe qui sont utilisés pour les vérifications de permissions d’accès aux fichiers et autres ressources partagées. Sous les noyaux antérieurs à 2.6.4, un processus pouvait avoir jusqu’à 32 groupes additionnels ; depuis le noyau 2.6.4, cette limite est de 65536 groupes additionnels. L’appel sysconf(_SC_NGROUPS_MAX) peut être utilisé pour déterminer le nombre de groupes additionnels auxquels un processus peut appartenir. Un processus peut consultez son ensemble de GID additionnels avec getgroups(2), et le modifier avec setgroups(2). |
Un processus fils créé par fork(2) hérite des copies des UID et GID de son père. Lors d’un execve(2), les UID et GID réels ainsi que les GID supplémentaires sont préservés ; les identifiants effectifs et sauvés peuvent être modifiés comme indiqué dans execve(2).
En dehors des contextes décrits ci-dessus, les UID d’un processus sont également utilisés dans les cas suivants :
* |
lors de la vérification des permissions pour l’envoi de signaux (consultez kill(2) ; | ||
* |
lors de la vérification des permissions pour la modification des paramètres d’ordonnancement (politesse, politique et priorité d’ordonnancement temps-réel, priorité d’E/S) avec setpriority(2), sched_setaffinity(2), sched_setscheduler(2), sched_setparam(2), sched_setattr(2) et ioprio_set(2) ; | ||
* |
lors de la vérification de limites de ressources (consultez getrlimit(2)) ; | ||
* |
lorsque la limite du nombre d’instances inotify que le processus peut créer est vérifiée (consultez inotify(7)). |
CONFORMITÉ
Process IDs, parent process IDs, process group IDs, and session IDs are specified in POSIX.1. The real, effective, and saved set user and groups IDs, and the supplementary group IDs, are specified in POSIX.1. The filesystem user and group IDs are a Linux extension.
NOTES
Various fields in the /proc/[pid]/status file show the process credentials described above. See proc(5) for further information.
The POSIX threads specification requires that credentials are shared by all of the threads in a process. However, at the kernel level, Linux maintains separate user and group credentials for each thread. The NPTL threading implementation does some work to ensure that any change to user or group credentials (e.g., calls to setuid(2), setresuid(2)) is carried through to all of the POSIX threads in a process. See nptl(7) for further details.
VOIR AUSSI
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), unix(7), user_namespaces(7), sudo(8)
COLOPHON
This page is part of release 5.05 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <http://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org>, David Prévot <david [AT] tilapin.org>, Cédric Boutillier <cedric.boutillier [AT] gmail.com> et Frédéric Hantrais <fhantrais [AT] gmail.com>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french [AT] lists.org>.