.\" -*- coding: UTF-8 -*- .\" Copyright: written by Andrew Morgan .\" and Copyright 2006, 2008, Michael Kerrisk .\" .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE) .\" may be distributed as per GPL .\" %%%LICENSE_END .\" .\" Modified by David A. Wheeler .\" Modified 2004-05-27, mtk .\" Modified 2004-06-21, aeb .\" Modified 2008-04-28, morgan of kernel.org .\" Update in line with addition of file capabilities and .\" 64-bit capability sets in kernel 2.6.2[45]. .\" Modified 2009-01-26, andi kleen .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH CAPGET 2 "9 février 2020" Linux "Manuel du programmeur Linux" .SH NOM capget, capset \- Configurer les capacités des threads .SH SYNOPSIS \fB#include \fP .PP \fBint capget(cap_user_header_t \fP\fIhdrp\fP\fB, cap_user_data_t \fP\fIdatap\fP\fB);\fP .PP \fBint capset(cap_user_header_t \fP\fIhdrp\fP\fB, const cap_user_data_t \fP\fIdatap\fP\fB);\fP .SH DESCRIPTION Ces deux appels système constituent l'interface brute du noyau pour configurer ou lire les capacités d'un thread. Non seulement ces appels système sont spécifiques à Linux, mais l'API du noyau est susceptible de changer. L'utilisation de ces appels système (en particulier le format du type \fIcap_user_*_t\fP) risque d'être étendue lors de nouvelles mises à jour du noyau, mais les anciens programmes continueront à fonctionner. .PP .\" Les interfaces portables sont constituées des fonctions \fBcap_set_proc\fP(3) et \fBcap_get_proc\fP(3)\ ; si possible, utilisez plutôt ces routines dans vos applications. .SS "Détails actuels" Maintenant que vous avez été avertis, quelques détails du noyau actuel. Les structures sont définies comme suit. .PP .in +4n .EX #define _LINUX_CAPABILITY_VERSION_1 0x19980330 #define _LINUX_CAPABILITY_U32S_1 1 .\" commit e338d263a76af78fe8f38a72131188b58fceb591 .\" Added 64 bit capability support /* V2 ajoutée à Linux 2.6.25\ ; obsolète */ #define _LINUX_CAPABILITY_VERSION_2 0x20071026 #define _LINUX_CAPABILITY_U32S_2 2 .\" commit ca05a99a54db1db5bca72eccb5866d2a86f8517f /* V3 ajoutée à Linux 2.6.26 */ #define _LINUX_CAPABILITY_VERSION_3 0x20080522 #define _LINUX_CAPABILITY_U32S_3 2 typedef struct __user_cap_header_struct { __u32 version; int pid; } *cap_user_header_t; typedef struct __user_cap_data_struct { __u32 effective; __u32 permitted; __u32 inheritable; } *cap_user_data_t; .EE .in .PP Les champs \fIeffective\fP, \fIpermitted\fP et \fIinheritable\fP sont des masques de bits de capacités définies dans \fBcapabilities\fP(7). Notez que les valeurs \fBCAP_*\fP sont indices de bits et nécessitent d'être décalées avant le OU logique avec le champ de bits. Pour définir les structures à passer à l'appel système, vous devez utiliser les noms \fIstruct\ __user_cap_header_struct\fP et \fIstruct\ __user_cap_data_struct\fP car les typedef ne sont que des pointeurs. .PP Les noyaux antérieurs à 2.6.25 préfèrent les capacités 32\ bits avec la version \fB_LINUX_CAPABILITY_VERSION_1\fP. Linux\ 2.6.25 a ajouté l'ensemble des capacités 64\ bits avec la version \fB_LINUX_CAPABILITY_VERSION_2\fP. Mais il y avait un bogue dans l'API, donc Linux\ 2.6.26 a ajouté \fB_LINUX_CAPABILITY_VERSION_3\fP pour corriger le problème. .PP Notez que les capacités 64\ bits utilisent \fIdatap\fP[0] et \fIdatap\fP[1], tandis que celles 32\ bits n'utilisent que \fIdatap\fP[0]. .PP Sur les noyaux qui gèrent les capacités de fichier (VFS capabilities support), ces appels système se comportent légèrement autrement. Cette prise en charge a été ajoutée en option à Linux\ 2.6.24, avant de devenir incluse (non optionnelle) dans Linux\ 2.6.33. .PP Pour les appels \fBcapget\fP(), on peut tester les capacités de n'importe quel processus en indiquant l'identifiant du processus avec la valeur du champ \fIhdrp\->pid\fP. .PP .\" Pour les détails sur les données, consultez \fBcapabilities\fP(7). .SS "Avec la prise en charge des capacités VFS" .\" Les capacités VFS utilisent un attribut de fichier étendu (voir \fBxattr\fP(7)) pour pouvoir se rattacher à des exécutables. Ce modèle de privilèges rend obsolète la prise en charge par le noyau du paramétrage asynchrone des capacités d'un processus par un autre. C'est\-à\-dire que, avec la prise en charge VFS, pour les appels à \fBcapset\fP() les seules valeurs permises pour \fIhdrp\->pid\fP sont \fB0\fP ou, de manière équivalente, la valeur renvoyée par \fBgettid\fP(2). .SS "Sans la gestion des capacités VFS" Sur les anciens noyaux qui ne gèrent pas les capacités VFS, \fBcapset\fP() peut être utilisé, si l'appelant a la capacité \fBCAP_SETPCAP\fP, pour modifier non seulement les capacités propres à l'appelant, mais aussi les capacités d'autres threads. L'appel s'applique aux capacités du thread indiqué par le champ \fIpid\fP de \fIhdrp\fP lorsqu'il n'est pas nul, ou à celles du thread courant si \fIpid\fP vaut \fB0\fP. Si \fIpid\fP correspond à un processus n'utilisant pas les threads, \fIpid\fP peut être un identifiant de processus classique. Pour configurer les capacités d'un thread faisant partie d'un processus multithread, il faut utiliser un identifiant de thread du type que renvoie \fBgettid\fP(2). Pour \fBcapset\fP(), \fIpid\fP peut également être \fB\-1\fP, ce qui affecte tous les threads sauf l'appelant et \fBinit\fP(1), ou bien une valeur inférieure à \fB\-1\fP, ce qui applique la modification à tous les membres du groupe de processus identifiés par \-\fIpid\fP. .SH "VALEUR RENVOYÉE" En cas de succès, zéro est renvoyé. En cas d'erreur, \fB\-1\fP est renvoyé et \fIerrno\fP reçoit une valeur adéquate. .PP Les appels échoueront avec l'erreur \fBEINVAL\fP, et définiront le champ \fIversion\fP de \fIhdrp\fP avec la valeur \fB_LINUX_CAPABILITY_VERSION_?\fP préférée par le noyau quand une \fIversion\fP non prise en charge est fournie. De cette façon, on peut tester quelle est la révision actuelle de capacité préférée. .SH ERREURS .TP \fBEFAULT\fP Mauvaise adresse mémoire. \fIhdrp\fP ne doit pas être NULL. \fIdatap\fP ne peut être NULL que quand l'utilisateur cherche à déterminer la version du format préféré des capacités gérée par le noyau. .TP \fBEINVAL\fP Un argument est non valable. .TP \fBEPERM\fP Une tentative a été opérée pour ajouter une capacité dans l'ensemble \fIpermitted\fP, ou pour placer une capacité dans l'ensemble \fIeffective\fP hors de l'ensemble \fIpermitted\fP. .TP \fBEPERM\fP Une tentative a été faite pour ajouter une capacité dans l'ensemble \fIinheritable\fP et soit\ : .RS .IP * 3 cette capacité n'était pas présente dans l'ensemble applicable à l'appel\ ; soit .IP * cette capacité n'était pas dans l'ensemble \fIpermitted\fP pour l'appel et l'appelant n'avait pas de capacité \fBCAP_SETPCAP\fP dans son ensemble effectif. .RE .TP \fBEPERM\fP Le processus appelant a tenté d'utiliser \fBcapset\fP() pour modifier les capacités d'un thread autre que lui\(hymême, sans avoir les privilèges nécessaires. Pour les noyaux avec la gestion des capacités VFS, ce n'est jamais permis. Pour les noyaux sans la gestion des capacités VFS, la capacité \fBCAP_SETPCAP\fP est requise. (En raison d'un bogue dans les noyaux antérieurs à\ 2.6.11, cette erreur était aussi renvoyée si un thread sans cette capacité tentait de modifier ses propres capacités en indiquant une valeur non nulle de \fIpid\fP (la valeur renvoyée par \fBgetpid\fP(2), au lieu de \fB0\fP). .TP \fBESRCH\fP Pas de thread correspondant. .SH CONFORMITÉ Ces appels système sont spécifiques à Linux. .SH NOTES L'interface portable pour les fonctions de lecture des capacités et de configuration est fournie par la bibliothèque \fIlibcap\fP disponible à\ : .br .UR http://git.kernel.org/cgit\:/linux\:/kernel\:/git\:/morgan\:\:/libcap.git .UE .SH "VOIR AUSSI" \fBclone\fP(2), \fBgettid\fP(2), \fBcapabilities\fP(7) .SH COLOPHON Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Cédric Boutillier , Frédéric Hantrais et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .