CREDENTIALS
Section : Manuel du programmeur Linux (
7)
Mise à jour de la version anglaise : 3 juin 2008
Index
Menu principal
NOM
credentials - Identifiants de processus
DESCRIPTION
Identifiant de processus (PID)
Chaque processus a un identifiant entier non négatif unique qui lui est
affecté lorsque le processus est créé avec
fork(2).
Un processus peut connaître son PID en utilisant
getpid(2).
Un PID est représenté par le type
pid_t
(défini dans
<sys/types.h>).
Les PID sont utilisés par un ensemble d'appels système pour identifier
le processus affecté par l'appel, par exemple :
kill(2),
ptrace(2),
setpriority(2)
setpgid(2),
setsid(2),
sigqueue(2)
et
waitpid(2).
Le PID d'un processus est conservé à travers un
execve(2).
Identifiant de processus père (PPID)
L'identifiant de processus père d'un processus identifie le processus
créé avec
fork(2).
Un processus peut connaître son PPID en utilisant
getppid(2).
Un PPID est représenté par le type
pid_t.
Le PPID d'un processus est conservé à travers un
execve(2).
Identifiant de groupe de processus (PGID) et identifiant de session (SID)
Chaque processus a un identifiant de session et un identifiant de groupe
de processus, tous les deux représentés par le type
pid_t.
Un processus peut connaître son identifiant de session en utilisant
getsid(2),
et son identifiant de groupe de processus en utilisant
getpgrp(2).
Un fils créé avec
fork(2)
hérite des identifiants de session et de groupe de processus de son père.
Les identifiants de session et de groupe de processus d'un processus
sont conservés à travers un
execve(2).
Les sessions et les groupes de processus sont des abstractions
imaginées pour prendre en charge le contrôle de tâches
d'un interpréteur de commandes.
Un groupe de processus (parfois appelé « tâche ») est un ensemble de
processus qui partagent le même identifiant de groupe de processus ;
l'interpréteur de commande créé un nouveau groupe de processus pour le
(les) processus utilisé(s) 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 définie avec
setpgid(2).
Le processus dont l'indentifiant de processus est identique
à son identifiant de groupe de processus est le
leader du groupe de processus
pour ce groupe.
Une session est un ensemble de processus qui partagent le même identifiant
de session.
Tous les membres d'un groupe de processus ont le même identifiant
de session (par exemple, tous les membres d'un groupe de processus
appartiennent à la même session, aussi, ces sessions et groupes
de processus forment une hiérarchie à deux niveaux).
Une nouvelle session est créée lorsqu'un processus appelle
setsid(2),
qui créé une nouvelle session dont l'identifiant de session est identique
au PID du processus qui a appelé
setsid(2).
Le créateur de la session est appelé le
leader de session.
Identifiants d'utilisateur (UID) et de groupe (GID)
Chaque processus a plusieurs identifiants d'utilisateur
et de groupe associés.
Ces identifiants sont des entiers,
respectivement représentés par les types
uid_t
et
gid_t
(définis dans
<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 à qui appartient le processus.
Un processus peut connaître son identifiant d'utilisateur (de groupe)
en utilisant
getuid(2)
(getgid(2)).
- *
-
Identifiant d'utilisateur effectif et identifiant de groupe effectif.
Ces identifiants sont utilisés par le noyau pour déterminer
les permissions du processus lors de l'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 également
les permissions lors de l'accès aux fichiers.
Toutefois, pour ce cas précis, Linux utilise les identifiants de système
de fichiers décrits plus loin.
Un processus peut connaître son identifiant d'utilisateur (de groupe)
effectif en utilisant
geteuid(2)
(getegid(2)).
- *
-
SUID (set-user-ID) sauvé et SGID (set-group-ID) sauvé.
Ces identifiants sont utilisés par les programmes SUID et SGID
pour conserver une copie des identifiants effectifs correspondants
définis lors de l'exécution du programme (voir
execve(2)).
Un programme SUID peut prendre et abandonner ses privilèges en modifiant
son UID effectif avec les valeurs de ses UID réel et sauvé.
Ces opérations peuvent être effectuées avec les appels système
seteuid(2),
setreuid(2)
ou
setresuid(2).
Un programme SGID peut faire la même chose avec les appels
setegid(2),
setregid(2)
ou
setresgid(2).
Un processus peut connaître son SUID (SGID) sauvé en utilisant
getresuid(2)
(getresgid(2)).
- *
-
Identifiant d'utilisateur du système de fichiers (FSUID) et identifiant
de groupe du système de fichiers (FSGID) (Spécifique à Linux).
Ces identifiants, avec les identifiants de groupes supplémentaires décrits
plus loin, sont utilisés pour déterminer les permissions d'accès aux
fichiers ; voir
path_resolution(7)
pour plus de détails.
Si l'UID (GID) effectif d'un processus est modifié, le noyau définit
automatiquement l'UID (GID) du système de fichiers avec la même valeur.
Par conséquent, les identifiants du système de fichiers ont normalement
la même valeur que les identifiants effectifs correspondants,
et la sémantique de vérification des permissions de fichiers est la même
sur Linux que sur les autres systèmes Unix.
Les identifiants du système de fichiers peuvent avoir
une valeur différente des identifiants effectifs en utilisant
setfsuid(2)
et
setfsgid(2).
- *
-
Identifiants de groupe supplémentaires.
Cet ensemble d'identifiants de groupe supplémentaires est utilisé pour
les vérifications de permissions d'accès aux fichiers
et autres ressources partagées.
Sur les noyaux Linux antérieurs au 2.6.4,
un processus pouvait avoir jusqu'à 32 groupes supplémentaires ;
depuis le noyau 2.6.4, il peut en avoir 65536.
L'appel
sysconf(_SC_NGROUPS_MAX)
peut être utilisé pour déterminer le nombre de groupes supplémentaires
auxquels un processus peut appartenir.
Un processus peut connaître son ensemble d'identifiants de groupe
supplémentaires en utilisant
getgroups(2),
et le modifier avec
setgroups(2).
Un processus fils créé avec
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 et GID supplémentaires sont préservés ;
les identifiants effectifs et sauvés peuvent être modifiés
comme décrit dans
execve(2).
En dehors des contextes décrits ci-dessus, les UID d'un processus sont
également utilisés dans un certain nombre d'autres contextes :
- *
-
lors de la détermination des permissions pour l'envoi de signaux --- voir
kill(2) ;
- *
-
lors de la détermination des permissions pour l'établissement
des paramètres d'ordonnancement de processus (courtoisie, politique
et priorité d'ordonnancement temps réel, affinité CPU,
priorité d'E/S) avec
setpriority(2),
sched_setaffinity(2),
sched_setscheduler(2),
sched_setparam(2)
et
ioprio_set(2) ;
- *
-
lors de la vérification de limites de ressources ; voir
getrlimit(2) ;;
- *
-
lors de la vérification de la limite du nombre d'instances inotify
que le processus peut créer ; voir
inotify(7).
CONFORMITÉ
Les PID, PPID, PGID et SID sont spécifiés dans POSIX.1-2001.
Les SUID et SGID réels, effectifs et sauvés, et les GID supplémentaires
sont spécifiés dans POSIX.1-2001.
Les identifiants utilisateur et groupe du système de fichiers
sont une extension Linux.
NOTES
La spécification POSIX des threads demandent que
les identifiants soient partagés par tous les threads d'un processus.
Toutefois, au niveau du noyau, Linux maintient des identifiants
d'utilisateurs et de groupes séparés pour chaque thread.
L'implémentation de threading NPTL effectue un certain travail pour
s'assurer que toute modification d'identifiants d'utilisateur ou de
groupe (par exemple, des appels à
(e.g., calls to
setuid(2),
setresuid(2),
etc.)
soit propagée vers tous les threads POSIX d'un processus.
VOIR AUSSI
bash(1),
csh(1),
ps(1),
access(2),
execve(2),
faccessat(2),
fork(2),
getpgrp(2),
getpid(2),
getppid(2),
getsid(2),
kill(2),
killpg(2),
setegid(2),
seteuid(2),
setfsgid(2),
setfsuid(2),
setgid(2),
setgroups(2),
setresgid(2),
setresuid(2),
setuid(2),
waitpid(2),
euidaccess(3),
initgroups(3),
tcgetpgrp(3),
tcsetpgrp(3),
capabilities(7),
path_resolution(7),
unix(7)
TRADUCTION
Ce document est une traduction réalisée par Alain Portal
<aportal AT univ-montp2 DOT fr> le 27 novembre 2007
et révisée le 17 juillet 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation
française de qualité. La version anglaise la plus à jour de ce document est
toujours consultable via la commande : « LANG=C man 7 credentials ».
N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
erreur dans cette page de manuel.
Index
- NOM
-
- DESCRIPTION
-
- Identifiant de processus (PID)
-
- Identifiant de processus père (PPID)
-
- Identifiant de groupe de processus (PGID) et identifiant de session (SID)
-
- Identifiants d'utilisateur (UID) et de groupe (GID)
-
- CONFORMITÉ
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
Dernière mise à jour : 17 juillet 2008