Man page - capset(2)

Packages contains this manual

Available languages:

en fr ja ru ro de

Manual

capget

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
Détails actuels
Avec la prise en charge des capacités VFS
Sans la gestion des capacités VFS
VALEUR RENVOYÉE
ERREURS
STANDARDS
NOTES
VOIR AUSSI
TRADUCTION

NOM

capget, capset - Configurer les capacités des threads

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS

#include <linux/capability.h> /* Definition of CAP_* and
_LINUX_CAPABILITY_*
constants */
#include <sys/syscall.h>
/* Definition of SYS_* constants */
#include <unistd.h>

int syscall(SYS_capget, cap_user_header_t hdrp ,
cap_user_data_t
datap );
int syscall(SYS_capset, cap_user_header_t
hdrp ,
const cap_user_data_t
datap );

Note : la glibc ne fournit pas de fonction autour de cet appel systùme, l’utilisation de syscall (2) est requise.

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 cap_user_*_t ) risque d’ĂȘtre Ă©tendue lors de nouvelles mises Ă  jour du noyau, mais les anciens programmes continueront Ă  fonctionner.

Les interfaces portables sont constituées des fonctions cap_set_proc (3) et cap_get_proc (3) ; si possible, utilisez plutÎt ces routines dans vos applications ; voir les NOTES.

Détails actuels

Maintenant que vous avez été avertis, quelques détails du noyau actuel. Les structures sont définies comme suit.

#define _LINUX_CAPABILITY_VERSION_1 0x19980330
#define _LINUX_CAPABILITY_U32S_1 1
/* V2 ajoutée à Linux 2.6.25 ; obsolÚte */
#define _LINUX_CAPABILITY_VERSION_2 0x20071026
#define _LINUX_CAPABILITY_U32S_2 2
/* 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;

Les champs effective , permitted et inheritable sont des masques de bits de capacitĂ©s dĂ©finies dans capabilities (7). Notez que les valeurs CAP_* 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 struct __user_cap_header_struct et struct __user_cap_data_struct car les typedef ne sont que des pointeurs.

Les noyaux antĂ©rieurs Ă  Linux 2.6.25 prĂ©fĂšrent les capacitĂ©s 32 bits avec la version _LINUX_CAPABILITY_VERSION_1 . Linux 2.6.25 a ajoutĂ© l’ensemble des capacitĂ©s 64 bits avec la version _LINUX_CAPABILITY_VERSION_2 . Mais il y avait un bogue dans l’API, donc Linux 2.6.26 a ajoutĂ© _LINUX_CAPABILITY_VERSION_3 pour corriger le problĂšme.

Notez que les capacitĂ©s 64 bits utilisent datap [0] et datap [1], tandis que celles 32 bits n’utilisent que datap [0].

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.

Pour les appels capget (), on peut tester les capacitĂ©s de n’importe quel processus en indiquant l’identifiant du processus avec la valeur du champ hdrp->pid .

Pour les détails sur les données, consultez capabilities (7).

Avec la prise en charge des capacités VFS

Les capacitĂ©s VFS utilisent un attribut de fichier Ă©tendu (voir xattr (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 Ă  capset () les seules valeurs permises pour hdrp->pid sont 0 ou, de maniĂšre Ă©quivalente, la valeur renvoyĂ©e par gettid (2).

Sans la gestion des capacités VFS

Sur les anciens noyaux qui ne gĂšrent pas les capacitĂ©s VFS, capset () peut ĂȘtre utilisĂ©, si l’appelant a la capacitĂ© CAP_SETPCAP , 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 pid de hdrp lorsqu’il n’est pas nul, ou Ă  celles du thread courant si pid vaut 0 . Si pid correspond Ă  un processus n’utilisant pas les threads, pid 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 gettid (2). Pour capset (), pid peut Ă©galement ĂȘtre -1 , ce qui affecte tous les threads sauf l’appelant et init (1), ou bien une valeur infĂ©rieure Ă  -1 , ce qui applique la modification Ă  tous les membres du groupe de processus identifiĂ©s par - pid .

VALEUR RENVOYÉE

En cas de succĂšs, zĂ©ro est renvoyĂ©. En cas d’erreur, -1 est renvoyĂ© et errno est dĂ©finie pour prĂ©ciser l’erreur.

Les appels Ă©choueront avec l’erreur EINVAL , et dĂ©finiront le champ version de hdrp avec la valeur _LINUX_CAPABILITY_VERSION_? prĂ©fĂ©rĂ©e par le noyau quand une version 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.

ERREURS

EFAULT

Mauvaise adresse mĂ©moire. hdrp ne doit pas ĂȘtre NULL. datap 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.

EINVAL

Un argument est non valable.

EPERM

Une tentative a Ă©tĂ© opĂ©rĂ©e pour ajouter une capacitĂ© dans l’ensemble permitted , ou pour placer une capacitĂ© dans l’ensemble effective hors de l’ensemble permitted .

EPERM

Une tentative a Ă©tĂ© faite pour ajouter une capacitĂ© dans l’ensemble inheritable et soit :

-

cette capacitĂ© n’était pas prĂ©sente dans l’ensemble applicable Ă  l’appel ; soit

-

cette capacitĂ© n’était pas dans l’ensemble permitted pour l’appel et l’appelant n’avait pas de capacitĂ© CAP_SETPCAP dans son ensemble effectif.

EPERM

Le processus appelant a tentĂ© d’utiliser capset () pour modifier les capacitĂ©s d’un thread autre que lui-mĂȘ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Ă© CAP_SETPCAP est requise. (En raison d’un bogue dans les noyaux antĂ©rieurs Ă  Linux 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 pid (la valeur renvoyĂ©e par getpid (2), au lieu de 0 ).

ESRCH

Pas de thread correspondant.

STANDARDS

Linux.

NOTES

L’interface portable pour les fonctions de lecture des capacitĂ©s et de configuration est fournie par la bibliothĂšque libcap disponible à :
http://git.kernel.org/cgit/linux/kernel/git/morgan/libcap.git

VOIR AUSSI

clone (2), gettid (2), capabilities (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Cédric Boutillier <cedric.boutillier@gmail.com>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

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@lists.debian.org .