Linux |
CentOS 5.3 |
|
capset(2) |
capget, capset − Configurer les capacités. |
#undef _POSIX_SOURCE int capget(cap_user_header_t p_entête, cap_user_data_t p_données); int capset(cap_user_header_t p_entête, const cap_user_data_t données); |
Depuis Linux 2.2, la toute puissance du super-utilisateur (Ndt : root) a été scindée en plusieurs ensembles distincts. Chaque thread dispose d’un ensemble de capacités effectives permettant d’identifier ses droits de réaliser certaines actions. Chaque thread a aussi un ensemble de capacités héritables, qu’il peut transmettre au travers d’un execve(2) et un ensemble de capacités éventuelles qu’il peut rendre effectives ou héritables. Ces deux fonctions constituent l’interface brute du noyau pour configurer ou lire les capacités d’un processus. Non seulement ces appels système sont spécifiques Linux, mais l’API du noyau est susceptible de changer. L’utilisation de ces fonctions (en particulier le format du type cap_user_*_t) risque de varier lors de nouvelles mises à jour du noyau. L’interface portable est constituée des fonctions cap_set_proc(3) et cap_get_proc(3) ; si possible, utilisez plutôt ces routines dans vos applications. Si vous désirez vraiment utiliser les extensions Linux, essayez d’employer plutôt les interfaces plus simples capsetp(3) et capgetp(3). |
Détails actuels |
Maintenant que vous avez été avertis, quelques détails du noyau courant. Les structures sont définies comme suit. #define _LINUX_CAPABILITY_VERSION 0x19980330 typedef struct __user_cap_header_struct { int version; int pid; } *cap_user_header_t; typedef struct __user_cap_data_struct { int effective; int permitted; int inheritable; } *cap_user_data_t; Les appels retourneront EINVAL, et écriront _LINUX_CAPABILITY_VERSION dans le champ version de p_entête lorsqu’une autre version sera spécifiée. Les appels se réfèreront aux capacités du thread indiqué par le champ pid de p_entête lorqu’il n’est pas nul ou aux capacités du thread courant si pid vaut 0. Si pid fait réréfence à un processus simple thread, pid peut être spécifié comme un PID traditionnel ; opérer sur un thread d’un processus multithread nécessite un TID du type renvoyé par gettid(2). Pour capset(), pid peut également être : −1, signifiant effectuer la modification sur tous les threads excepté l’appelant et init(8) ; ou une valeur inférieure à −1, auquel cas la modification est appliquée à tous les membres du groupe de processus dont l’ID est −pid. Pour les détails sur les données, voir capabilities(7). |
Si elles réussissent, ces routines renvoient 0. Sinon elles renvoient −1 et configurent errno avec le code d’erreur approprié. |
EFAULT |
Mauvaise adresse mémoire. Ni p_entête ni p_données ne doivent être NULL. |
||
EINVAL |
Un argument est invalide. |
||
EPERM |
On a essayé d’ajouter une capacité dans l’ensemble éventuel, ou de placer une capacité dans l’ensemble effectif ou héritable qui ne se trouvait pas dans l’ensemble éventuel. |
||
EPERM |
L’appelant a essayé d’utiliser capset() pour modifier les capacités d’un thread autre que lui-même mais il ne possède pas les privilèges suffisants ; la capacité CAP_SETPCAP est nécessaire. (Un bogue dans les noyaux précédant le 2.6.11 faisait que cette erreur pouvait également survenir si un thread sans cette capacité essayait de modifier ses propres capacités en spécifiant une valeur non nulle pour le champ pid (c’est-à -dire la valeur renvoyée par getpid(2)) au lieu de 0.) |
||
ESRCH |
Pas de thread correspondant. |
Ces appels système sont spécifiques à Linux. |
L’interface portable pour les fonctions de
configuration et de lecture des permissions est fournie par
la bibliothèque libcap disponible
à : |
clone(2), gettid(2), capabilities(7) |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 4 janvier 2000 et révisée le 14 août 2006. 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 2 capget ». N’hésitez pas à signaler à l’auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel. |
capset(2) |