Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       capabilities - Présentation des capacités Linux

DESCRIPTION

       Pour  vérifier  les permissions, les implémentations UNIX traditionnelles distinguent deux
       catégories de processus : les processus privilégiés (dont l'UID  effectif  est  0,  appelé
       superutilisateur  ou  root),  et  les  processus  non privilégiés (dont l'UID effectif est
       non-nul). Les processus privilégiés contournent les vérifications de permissions du noyau,
       alors  que les processus non-privilégiés sont soumis à une vérification complète basée sur
       l'identification du processus (habituellement : UID effectif, GID effectif, et  liste  des
       groupes).

       À  partir  du  noyau 2.2,  Linux propose un mécanisme (encore incomplet) de capacités, qui
       scinde les privilèges traditionnellement associés au superutilisateur en unités distinctes
       que  l'on  peut  activer  ou  inhiber  individuellement.  Les capacités sont des attributs
       individuels à chaque thread.

   Liste des capacités
       La liste suivante indique les capacités implémentées  sous  Linux  et  les  opérations  ou
       comportements que chaque capacité permet :

       CAP_AUDIT_CONTROL (depuis Linux 2.6.11)
              Activer  et  désactiver l'audit du noyau ; changer les règles de filtrage d'audit ;
              accéder à l'état de l'audit, et aux règles de filtrage.

       CAP_AUDIT_WRITE (depuis Linux 2.6.11)
              Écrire des enregistrements dans le journal d'audit du noyau.

       CAP_BLOCK_SUSPEND (depuis Linux 3.5)
              Utiliser des fonctionnalités qui peuvent bloquer  la  mise  en  veille  du  système
              (epoll(7) EPOLLWAKEUP, /proc/sys/wake_lock).

       CAP_CHOWN
              Effectuer toute modification des UID et GID de fichiers (consultez chown(2)).

       CAP_DAC_OVERRIDE
              Contourne les permissions de lecture, écriture et exécution. (DAC est l'abréviation
              de « discretionary access control », contrôle d'accès à volonté).

       CAP_DAC_READ_SEARCH
              * Contourne les permissions  de  lecture  de  fichiers  et  celles  de  lecture  et
                exécution des répertoires ;
              * Invoque open_by_handle_at(2).

       CAP_FOWNER
              * Contourne  les  vérifications  pour les opérations qui demandent que le FS-UID du
                processus corresponde à l'UID du fichier  (par  exemple  chmod(2),  utime(2)),  à
                l'exclusion     des     opérations     couvertes    par    CAP_DAC_OVERRIDE    et
                CAP_DAC_READ_SEARCH ;
              * positionner les attributs de fichier étendus (consultez chattr(1)) pour n'importe
                quel fichier ;
              * positionner  les  listes  de contrôle d'accès ACL (« Access Control Lists ») pour
                n'importe quel fichier ;
              * ignorer le bit sticky des répertoires pour les suppressions de fichier ;
              * spécifier O_NOATIME dans open(2) et fcntl(2) pour n'importe quel fichier.

       CAP_FSETID
              Ne pas effacer les bits de permission Set-UID  et  Set-GID  quand  un  fichier  est
              modifié ;  positionner  le  bit  Set-GID sur un fichier dont le GID ne correspond à
              aucun GID du processus appelant.

       CAP_IPC_LOCK
              Verrouiller des pages mémoire (mlock(2), mlockall(2), mmap(2), shmctl(2)).

       CAP_IPC_OWNER
              Contourne les vérifications pour les opérations sur les IPC System V.

       CAP_KILL
              Contourne les vérifications pour l'émission de signaux  (consultez  kill(2)).  Cela
              inclut l'utilisation de l'ioctl(2) KDSIGACCEPT.

       CAP_LEASE (depuis Linux 2.4)
              Demander des baux sur n'importe quel fichier (consultez fcntl(2)).

       CAP_LINUX_IMMUTABLE
              Positionner  les  attributs  d'inœuds  FS_APPEND_FL  et  FS_IMMUTABLE_FL (consultez
              chattr(1)).

       CAP_MAC_ADMIN (depuis Linux 2.6.25)
              Surcharger les contrôles d'accès MAC (« Mandatory  Access  Control »).  Implémentée
              pour le module de sécurité (LSM : « Linux Security Module ») Smack.

       CAP_MAC_OVERRIDE (depuis Linux 2.6.25)
              Permettre  les modifications de la configuration ou des états MAC. Implémentée pour
              le LSM Smack.

       CAP_MKNOD (depuis Linux 2.4)
              Créer des fichiers spéciaux avec mknod(2).

       CAP_NET_ADMIN
              Effectuer diverses opérations liées au réseau :
              * configuration des interfaces ;
              * administration du pare-feu, de la traduction d'adresse IP  (« masquerading »)  et
                collection de données sur le trafic réseau (« accounting ») ;
              * modification des tables de routages ;
              * attachement à n'importe quelle adresse pour un service mandataire transparent ;
              * sélection du type de service (« TOS ») ;
              * effacement des statistiques du pilote ;
              * sélection du mode « promiscuité » ;
              * activation de la diffusion multipoint (« multicast ») ;
              * utiliser  setsockopt(2) pour définir les options de sockets suivantes : SO_DEBUG,
                SO_MARK, SO_PRIORITY (pour une  priorité  en  dehors  des  valeurs  de  0  à  6),
                SO_RCVBUFFORCE et SO_SNDBUFFORCE.

       CAP_NET_BIND_SERVICE
              Attacher une socket sur un port privilégié (numéro de port inférieur à 1024).

       CAP_NET_BROADCAST
              (Inutilisé) Broadcaster et écouter en multicast avec des sockets.

       CAP_NET_RAW
              * utiliser des sockets RAW et PACKET ;
              * attacher à n'importe quelle adresse pour un service mandataire transparent.

       CAP_SETGID
              Effectuer  toute  manipulation  des  GID  du  processus  et  de la liste de groupes
              supplémentaires, utiliser de faux GID sur les socket UNIX.

       CAP_SETFCAP (depuis Linux 2.6.24)
              Définir des capacités de fichier

       CAP_SETPCAP
              Si les capacités de fichier sont prises en charge : autoriser  ou  interdire  toute
              capacité  dans  l'ensemble  des capacités permises à l'appelant vers ou depuis tout
              autre processus. (Cette propriété de CAP_SETPCAP  n'est  pas  disponible  quand  le
              noyau  est  configuré  pour  prendre  en  charge  les capacité de fichiers, puisque
              CAP_SETPCAP a une toute autre sémantique pour ces noyaux)

              Si les capacités de fichier sont prises  en  charge :  ajouter  toute  capacité  de
              l'ensemble  de  limitation  de capacités du thread appelant à son ensemble hérité ;
              supprimer les capacités de l'ensemble de limitation  de  capacités  (avec  prctl(2)
              PR_CAPBSET_DROP) ; modifier l'attribut securebits.

       CAP_SETUID
              Effectuer   toute  manipulation  des  UID  de  processus  (setuid(2),  setreuid(2),
              setresuid(2), setfsuid(2)) ; transmettre un faux UID sur une socket dans le domaine
              UNIX.

       CAP_SYS_ADMIN
              * Effectuer  certaines  opérations  d'administration comme : quotactl(2), mount(2),
                umount(2), swapon(2), swapoff(2), sethostname(2) et setdomainname(2) ;
              * effectuer des opérations syslog(2) nécessitant des droits  (depuis  Linux 2.6.37,
                CAP_SYSLOG doit être utilisée pour permettre de telles opérations) ;
              * effectuer une commande VM86_REQUEST_IRQ vm86(2) ;
              * effectuer  des  opérations  IPC_SET  et  IPC_RMID  sur  n'importe  quel objet IPC
                System V ;
              * effectuer des opérations sur les attributs étendus trusted et security (consultez
                attr(5)) ;
              * utiliser lookup_dcookie(2) ;
              * utiliser    ioprio_set(2)    pour    configurer   une   classe   d'ordonnancement
                IOPRIO_CLASS_RT (avant Linux 2.6.25) et IOPRIO_CLASS_IDLE ;
              * forger des identifiants d'utilisateur lors du passage de références de sockets ;
              * dépasser /proc/sys/fs/file-max, la limite système du nombre de fichiers  ouverts,
                dans  les  appels  système  qui  ouvrent  des  fichiers  (c'est-à-dire accept(2),
                execve(2), open(2) et pipe(2)) ;
              * utiliser les attributs CLONE_*  qui  créent  de  nouveaux  espaces  de  nom  avec
                clone(2) et unshare(2) ;
              * appeler perf_event_open(2) ;
              * accéder aux informations d'événements perf nécessitant des droits ;
              * appeler setns(2) ;
              * appeler fanotify_init(2) ;
              * effectuer des opérations keyctl(2) KEYCTL_CHOWN et KEYCTL_SETPERM ;
              * effectuer une opération madvise(2) MADV_HWPOISON ;
              * utiliser  la commande TIOCSTI de ioctl(2) pour insérer des caractère dans la file
                d'entrée d'un terminal autre que le terminal de contrôle de l'appelant ;
              * utiliser l'appel système obsolète nfsservctl(2) ;
              * utiliser l'appel système obsolète bdflush(2) ;
              * effectuer diverses opérations ioctl(2) sur des périphériques bloc nécessitant des
                droits ;
              * effectuer  diverses  opérations ioctl(2) sur des systèmes de fichiers nécessitant
                des droits ;
              * effectuer  des  opérations  d'administration   sur   de   nombreux   pilotes   de
                périphériques.

       CAP_SYS_BOOT
              Utiliser reboot(2) et kexec_load(2).

       CAP_SYS_CHROOT
              Utiliser chroot(2).

       CAP_SYS_MODULE
              Charger   ou   décharger   des   modules   noyaux   (consultez   init_module(2)  et
              delete_module(2)) ; dans les noyaux antérieurs à 2.6.25 : enlever des capacités  de
              l'ensemble système de limitation de capacités.

       CAP_SYS_NICE
              * Augmenter la valeur de courtoisie (« nice ») (nice(2), setpriority(2)) et changer
                la courtoisie de n'importe quel processus ;
              * utiliser des  ordonnancements  temps-réel  pour  le  processus  appelant,  et  la
                modification     de     l'ordonnancement     de    n'importe    quel    processus
                (sched_setscheduler(2), sched_setparam(2)) ;
              * définir l'affinité CPU pour n'importe quel processus (sched_setaffinity(2)) ;
              * définir  la  classe  et  la  priorité  d'ordonnancement  d'entrées/sorties   pour
                n'importe quel processus (ioprio_set(2)) ;
              * appliquer migrate_pages(2) à n'importe quel processus et migrer un processus vers
                n'importe quel nœud ;
              * appliquer move_pages(2) pour n'importe quel processus ;
              * utiliser l'attribut MPOL_MF_MOVE_ALL avec mbind(2) et move_pages(2).

       CAP_SYS_PACCT
              Utiliser acct(2).

       CAP_SYS_PTRACE
              Suivre n'importe quel processus avec ptrace(2) ;  appliquer  get_robust_list(2)   à
              n'importe quel processus ; examiner les processus avec kcmp(2).

       CAP_SYS_RAWIO
              * Effectuer des opérations d'entrées-sorties (iopl(2) et ioperm(2)) ;
              * accéder à /proc/kcore ;
              * utiliser l'opération FIBMAP de ioctl(2) ;
              * ouvrir  les  périphériques pour accéder aux registres spécifiques au modèle (MSR,
                consultez msr(4)) d'un processeur x86 ;
              * mettre à jour /proc/sys/vm/mmap_min_addr ;
              * créer des projections en mémoire aux adresses inférieures à  la  valeur  indiquée
                par /proc/sys/vm/mmap_min_addr ;
              * projeter les fichiers dans /proc/bus/pci ;
              * ouvrir /dev/mem et /dev/kmem ;
              * effectuer diverses commandes de périphérique SCSI ;
              * effectuer certaines opérations sur les périphériques hpsa(4) et cciss(4) ;
              * effectuer certaines opérations spécifiques à d'autres types de périphériques.

       CAP_SYS_RESOURCE
              * Utiliser de l'espace réservé sur des systèmes de fichiers ext2 ;
              * effectuer des appels ioctl(2) pour contrôler la journalisation ext3 ;
              * ne pas tenir compte des limites définies par les quota disque ;
              * augmenter les limites de ressources (consultez setrlimit(2)) ;
              * ne pas tenir compte de la limite de ressource RLIMIT_NPROC ;
              * ne pas tenir compte du nombre maximal de consoles sur l'allocation de console ;
              * ne pas tenir compte du nombre maximal de dispositions de clavier ;
              * permettre des interruptions à plus de 64 Hz depuis l'horloge temps réel ;
              * augmenter  la limite msg_qbytes pour la file de messages System V au dessus de la
                limite /proc/sys/kernel/msgmnb (consultez msgop(2) et msgctl(2)) ;
              * ne pas tenir compte la limite /proc/sys/fs/pipe-size-max lors du  réglage  de  la
                capacité d'un tube avec la commande fcntl(2) avec l'argument F_SETPIPE_SZ ;
              * utiliser F_SETPIPE_SZ pour augmenter la capacité d'un tube au-dessus de la limite
                spécifiée par /proc/sys/fs/pipe-max-size ;
              * ne pas tenir compte  de  la  limite  /proc/sys/fs/mqueue/queues_max  lors  de  la
                création de files de messages POSIX (consultez mq_overview(7)) ;
              * utiliser l'opération PR_SET_MM de prctl(2) ;
              * affecter  à  /proc/PID/oom_score_adj  une  valeur inférieure à la dernière valeur
                affectée par un processus avec CAP_SYS_RESOURCE.

       CAP_SYS_TIME
              Modifier  l'heure  système  (settimeofday(2),  stime(2),  adjtimex(2)) ;   modifier
              l'horloge temps réel (matérielle).

       CAP_SYS_TTY_CONFIG
              Utiliser  vhangup(2) ; employer diverses opérations ioctl(2) nécessitant des droits
              sur des terminaux virtuels.

       CAP_SYSLOG (depuis Linux 2.6.37)

       *  Effectuer des opérations syslog(2) nécessitant des  droits.  Consultez  syslog(2)  pour
          savoir quelles opérations nécessitent des droits.

       *  Inspecter  les  adresses  du  noyau  exposées  par /proc et d'autres interfaces lorsque
          /proc/sys/kernel/kptr_restrict a la valeur 1. (Voir  la  discussion  sur  kptr_restrict
          dans proc(5).)

       CAP_WAKE_ALARM (depuis Linux 3.0)
          Déclencher   quelque   chose   qui   réveillera   le   système   (réglage  des  alarmes
          CLOCK_REALTIME_ALARM et CLOCK_BOOTTIME_ALARM).

   Implémentations passées et actuelles
       Une implémentation complète des capacités nécessite que :

       1. Pour toutes les opérations privilégiées, le noyau doit  vérifier  si  le  thread  a  la
          capacité requise dans son ensemble effectif ;

       2. Le  noyau  doit  fournir  des  appels  système  permettant  de changer et récupérer les
          ensembles de capacités d'un thread.

       3. Le  système  de  fichiers  doit  permettre  d'attacher  des  capacités   aux   fichiers
          exécutables, pour qu'un processus en dispose quand le fichier est exécuté.

       Sous  Linux 2.6.14, seules les deux premières clauses sont remplies.Avant le noyau 2.6.24,
       seules les deux premières exigences sont remplies ;  depuis  le  noyau 2.6.24,  ces  trois
       exigences sont remplies.

   Ensembles de capacités des threads
       Chaque thread a trois ensembles contenant zéro ou plus des capacités ci-dessus :

       Permises :
              Il  s'agit  d'un  surensemble  limitant les capacités effectives que le thread peut
              prendre. Il limite également les capacités qui peuvent être ajoutées  à  l'ensemble
              héritable  par  un  thread  qui  n'a  pas la capacité CAP_SETPCAP dans son ensemble
              effectif.

              Si un processus supprime une capacité de son ensemble de capacités permises, il  ne
              peut plus jamais la récupérer (sauf s'il appelle execve(2) sur un programme Set-UID
              root ou un programme dont les  capacités  associées  au  fichier  permettent  cette
              capacité).

       Héritable :
              Il  s'agit  d'un  ensemble  de  capacités  préservées au travers d'un execve(2). Il
              fournit à un processus un mécanisme pour assigner des capacités  à  l'ensemble  des
              capacités permises du nouveau programme lors d'un execve(2).

       Effectif :
              Il  s'agit  de  l'ensemble  des  capacités utilisées par le noyau pour vérifier les
              permissions du thread.

       Un fils créé par fork(2) hérite d'une copie des ensembles de  capacité  de  son  père.  Le
       traitement des capacités lors d'un execve(2) est décrit plus bas.

       En  utilisant capset(2), un thread peut manipuler ses propres ensembles de capacités (voir
       ci-dessous).

       À partir  de  Linux 3.2,  le  fichier  /proc/sys/kernel/cap_last_cap  contient  la  valeur
       numérique  de  la  capacité  la  plus  élevée  qui  soit  acceptée  par  le noyau en cours
       d'exécution ; cette valeur peut être utilisée pour déterminer le bit  le  plus  élevé  qui
       puisse être défini dans un ensemble de capacités.

   Capacités de fichier
       Depuis  le  noyau 2.6.24,  le noyau prend en charge l'association d'ensembles de capacités
       avec un fichier exécutable à l'aide de setcap(8). Les ensembles de  capacités  du  fichier
       sont  stockés  dans un attribut étendu (consultez setxattr(2)) appelé security.capability.
       Écrire dans cet attribut étendu  nécessite  la  capacité  CAP_SETFCAP.  Les  ensembles  de
       capacités d'un fichier, combinés avec les ensembles de capacités du thread déterminent les
       capacités d'un thread après un execve(2).

       Les trois ensembles de capacités de fichier sont :

       Permises (anciennement forcées) :
              Ces capacités sont automatiquement permises  au  thread,  quelles  que  soient  ses
              capacités héritables.

       Héritables (anciennement autorisées) :
              Cet  ensemble est combiné par un ET avec l'ensemble héritable du thread pour savoir
              quelles capacités de l'ensemble des capacités permises sont permises pour le thread
              après l'appel à execve(2).

       Effectif :
              Il  ne  s'agit  pas  d'un  ensemble,  mais  plutôt  d'un  unique bit. Si le bit est
              positionné, alors, lors d'un execve(2), toutes  les  nouvelles  capacités  permises
              pour  le  thread  sont  également  positionnées dans l'ensemble effectif. Si ce bit
              n'est pas positionné, alors, après un execve(2),  aucune  des  nouvelles  capacités
              permises ne se trouvera dans le nouvel ensemble effectif.

              Activer le bit des capacités effectives d'un fichier implique que toute capacité de
              fichier permise ou héritable qui permet à un thread d'obtenir les capacité permises
              correspondantes  lors  d'un  execve(2)  (consultez  les  règles  de  transformation
              décrites ci-dessous) fournira également cette capacité dans l'ensemble de capacités
              effectives  du thread. Ainsi, lors de l'ajout de capacités à un fichier (setcap(8),
              cap_set_file(3), cap_set_fd(3)), si le bit effectif  pour  une  des  capacités  est
              activé,  alors le bit effectif doit également être activé pour toutes les capacités
              dont le bit permis ou héritable correspondant est activé.

   Transformation des capacités lors d'un appel execve()
       Durant un execve(2), le noyau calcule les nouvelles capacités du  processus  en  utilisant
       l'algorithme suivant :

           P'(permises) = (P(héritables) & F(héritables) |
                          (F(permises) & cap_bset)

           P'(effectives) = F(effectives) ? P'(permises) : 0

           P'(héritables) = P(héritables)    [inchangé]

       où :

           P         indique la valeur d'un ensemble de capacités du thread avant le execve(2)

           P'        indique la valeur d'un ensemble de capacités après le execve(2)

           F         indique la valeur d'un ensemble de capacités du fichier

           cap_bset  est la valeur de la limitation de capacités (décrit ci-dessous).

   Capacités et exécution de programmes par root
       Pour  fournir  un  root  tout  puissant en utilisant les ensembles de capacités, lors d'un
       execve(2) :

       1. Si on exécute un programme Set-UID root, ou si l'UID réel est nul, alors les  ensembles
          des  capacités  héritables  et  permises  du  fichier  sont  remplis de uns (toutes les
          capacités activées).

       2. Si un programme Set-UID root est exécuté, alors le  bit  des  capacités  effectives  du
          fichier est défini à 1 (activé).

       L'effet  des  règles  ci-dessus combinées avec les transformations de capacités ci-dessus,
       est que lorsqu'un processus lance (avec execve(2)) un programme Set-UID root, ou lorsqu'un
       processus  d'UID  effectif  nul exécute un programme, il obtient toutes les capacités dans
       ses ensembles de capacités permises et effectives, sauf celles qui sont interdites par  la
       limitation  de  capacités.  Ceci  fournit une sémantique identique à celle fournie par les
       systèmes UNIX traditionnels.

   Limitation des capacités
       La limitation des capacités (« capability bounding set ») est un mécanisme de sécurité qui
       peut  être  utilisé  pour  limiter  les  capacités  qui  peuvent  être  obtenues lors d'un
       execve(2). La limitation de capacités est utilisée de cette façon :

       * Lors d'un execve(2), la limitation de capacités (un ensemble de capacités) est  combinée
         avec  un  ET binaire avec l'ensemble des capacités autorisées du fichier, et le résultat
         de cette opération est placé dans l'ensemble des  capacités  autorisées  du  thread.  La
         limitation  de  capacités permet donc de limiter les capacités permises qui peuvent être
         accordées à un fichier exécutable.

       * (Depuis Linux 2.6.25) La limitation de capacités agit comme un surensemble limitant  les
         capacités  qu'un thread peut ajouter à son ensemble de capacités héritables en utilisant
         capset(2). Ceci signifie que si une  capacité  ne  se  trouve  pas  dans  l'ensemble  de
         limitation  des  capacités,  alors  un  thread  ne  peut ajouter cette capacité dans son
         ensemble de capacités héritables,  même  si  elle  se  trouvait  dans  son  ensemble  de
         capacités  permises,  et  ne peut donc pas conserver cette capacité dans son ensemble de
         capacités permises lorsqu'il exécute avec execve(2) un fichier qui a cette capacité dans
         son ensemble de capacités héritables.

       Notez  que  la  limitation de capacités masque les capacités permises du fichier, mais pas
       les capacités héritées. Si un thread conserve une capacité dans son ensemble de  capacités
       héritées  et  que  cette  capacité  ne  se  trouve  pas  dans l'ensemble de limitation des
       capacités, alors il peut toujours obtenir cette capacité dans son  ensemble  de  capacités
       permises  en  exécutant  un  fichier  qui  a  la  capacité  dans son ensemble de capacités
       héritées.

       Suivant la version du noyau, la limitation de capacités  est  un  attribut  au  niveau  du
       système ou un attribut par processus.

       Limitation de capacités avant Linux 2.6.25

       Dans  les noyaux antérieurs à 2.6.25, la limitation de capacités est un attribut au niveau
       du système qui affecte tous les threads. La limitation de capacités est accessible par  le
       fichier /proc/sys/kernel/cap-bound. (Le masque de bits est exprimé comme un nombre décimal
       signé dans /proc/sys/kernel/cap-bound, ce qui entretient les confusions).

       Seul le processus init peut configurer des capacités  dans  l'ensemble  de  limitation  de
       capacités ; sinon, le superutilisateur (plus précisément : les programmes avec la capacité
       CAP_SYS_MODULE) peut uniquement supprimer des capacités de cet ensemble.

       Sur un système standard, la limitation élimine  toujours  la  capacité  CAP_SETPCAP.  Pour
       supprimer  cette  restriction  (attention,  c'est  dangereux !), modifiez la définition de
       CAP_INIT_EFF_SET dans include/linux/capability.h et recompilez le noyau.

       La limitation de capacités système a été ajoutée à Linux à partir du noyau 2.2.11.

       Limitation de capacités après Linux 2.6.25

       Depuis Linux 2.6.25, la limitation de capacités est un attribut par thread (il n'y a  plus
       désormais de limitation de capacités au niveau du système).

       La  limitation  est héritée du parent du thread au travers d'un fork(2) et est préservé au
       travers d'un execve(2).

       Un thread peut enlever des capacités  de  son  ensemble  de  limitation  de  capacités  en
       utilisant  l'opération  PR_CAPBSET_DROP de prctl(2), à condition qu'il possède la capacité
       CAP_SETPCAP. Une fois qu'une capacité a été supprimée de l'ensemble de limitation, elle ne
       peut  être  y être remise. Un thread peut déterminer si une capacité est dans son ensemble
       de limitation de capacités en utilisant l'opération PR_CAPBSET_READ de prctl(2).

       La suppression de capacités dans l'ensemble de limitation des  capacités  n'est  prise  en
       charge  que  si  les  capacités  de  fichiers sont compilés dans le noyau. Dans les noyaux
       antérieurs  à  Linux 2.6.33,  les  capacités  de  fichiers  étaient   une   fonctionnalité
       optionnelle    configurable   via   l'option   CONFIG_SECURITY_FILE_CAPABILITIES.   Depuis
       Linux 2.6.33, l'option de configuration a été supprimée et les capacités de fichiers  font
       maintenant  toujours  partie du noyau. Quand les capacités de fichiers sont compilées dans
       le noyau,  le processus init (l'ancêtre de tous les processus) démarre  avec  ensemble  de
       limitation complet. Si les capacités de fichiers ne sont pas compilées dans le noyau, init
       démarre alors avec un ensemble de limitation complet, à l'exception de CAP_SETPCAP,  parce
       que cette capacité a une autre signification quand il n'y a pas de capacités de fichiers.

       Supprimer  une  capacité  de  la  limitation de capacités ne la supprime pas de l'ensemble
       hérité d'un thread. Cependant il empêche de rajouter la capacité dans l'ensemble hérité du
       thread par la suite.

   Effet des modifications d'UID sur les capacités
       Afin  de  préserver la sémantique traditionnelle pour les transitions entre des UID nul et
       non nul, le noyau modifie les ensembles de capacités d'un thread de la façon suivante lors
       de  modifications des UID réel, effectif, sauvé et du système de fichiers (avec setuid(2),
       setresuid(2) et compagnie) :

       1. Si l'UID réel, effectif ou sauvé était égal à 0, et qu'à la suite  de  la  modification
          ils  sont tous non nuls, toutes les capacités sont supprimés des ensembles de capacités
          permises et effectives.

       2. Si l'UID effectif était nul et devient non nul, toutes les capacités sont supprimées de
          l'ensemble effectif.

       3. Si  l'UID  effectif  est  modifié  d'une valeur non nulle à 0, l'ensemble des capacités
          permises est copié dans l'ensemble des capacités effectives.

       4. Si le fsuid est modifié de 0 à  une  valeur  non  nulle  (consultez  setfsuid(2)),  les
          capacités    suivantes    sont   supprimées   de   l'ensemble   effectif :   CAP_CHOWN,
          CAP_DAC_OVERRIDE,  CAP_DAC_READ_SEARCH,  CAP_FOWNER,  CAP_FSETID,   CAP_LINUX_IMMUTABLE
          (depuis Linux 2.6.30), CAP_MAC_OVERRIDE et CAP_MKNOD (depuis Linux 2.6.30). Si le fsuid
          devient nul, chacune de  ces  capacités  est  activée  dans  l'ensemble  des  capacités
          effectives si elle faisait partie de l'ensemble des capacités permises.

       Si  un  thread dont l'un des UID vaut 0 ne veut pas que son ensemble de capacités permises
       soit vidé lorsqu'il redéfinit tous ses UID à des valeurs non nulles, il peut le faire avec
       l'opération PR_SET_KEEPCAPS de l'appel système prctl(2).

   Ajuster les ensembles de capacités par programmation
       Un  thread  peut  obtenir  ou  modifier ses ensembles de capacités en utilisant les appels
       système capget(2)  et  capset(2).  Cependant,  il  faut  leur  préférer  l'utilisation  de
       cap_get_proc(3)  et cap_set_proc(3), toutes deux fournies par le paquet libcap. Les règles
       suivantes gouvernent les modifications des ensembles de capacités d'un thread :

       1. Si l'appelant n'a pas  la  capacité  CAP_SETPCAP,  le  nouvel  ensemble  des  capacités
          héritables  doit être un sous-ensemble de l'union des ensembles de capacités héritables
          et des capacités permises.

       2. (Depuis Linux 2.6.25) Le nouvel  ensemble  héritable  doit  être  un  sous-ensemble  de
          l'ensemble héritable existant et de l'ensemble de limitation de capacités.

       3. Le  nouvel ensemble des capacités permises doit être un sous-ensemble de l'ensemble des
          capacités permises existant  (c'est-à-dire  qu'il  n'est  pas  possible  d'obtenir  des
          capacités permises que le thread n'a pas actuellement).

       4. Le nouvel ensemble effectif doit être un sous-ensemble du nouvel ensemble des capacités
          permises.

   Les attributs « securebits » : configuration d'un environnement  restreint  aux  capacités  de
       fichiers.
       À  partir du noyau 2.6.26, si les capacités de fichiers sont activées, Linux implémente un
       ensemble d'attributs securebits par thread qui peuvent être utilisés  pour  désactiver  la
       gestion particulière des capacités pour l'UID 0 (root). Ces attributs sont les suivants :

       SECBIT_KEEP_CAPS
              Activer  cet  attribut  permet  à  un  thread  qui  a  un UID (ou plus) égal à 0 de
              conserver ses capacités quand il change ses UID et que plus aucun n'est nul. Si cet
              attribut  est désactivé, alors ces changements d'UID feront perdre au thread toutes
              ses capacités. Cet  attribut  est  toujours  désactivé  lors  d'un  execve(2).  Cet
              attribut fournit la même fonctionnalité que l'ancienne opération PR_SET_KEEPCAPS de
              prctl(2)).

       SECBIT_NO_SETUID_FIXUP
              Activer cet attribut stoppe l'ajustement des ensembles de capacités  par  le  noyau
              lorsque  les  UID  effectifs et d'accès aux fichiers du thread passent d'une valeur
              nulle à une valeur non nulle. (Consultez la sous-section  Effet  des  modifications
              d'UID sur les capacités.)

       SECBIT_NOROOT
              Si  cet  attribut est activé, alors le noyau n'autorise pas les capacités lorsqu'un
              programme Set-UID root  est  exécuté  ou  lorsqu'un  processus  dont  l'identifiant
              effectif ou réel est nul appelle execve(2). (Consultez la sous-section Capacités et
              exécution de programmes par root.)

       Chacun  des  attributs  de  base  ci-dessus  a  un  attribut  compagnon  de  verrouillage.
       L'activation  d'un  attribut  de  verrouillage  est  irréversible et permet d'éviter toute
       modification ultérieure de l'attribut  de  base.  Les  attributs  de  verrouillage  sont :
       SECBIT_KEEP_CAPS_LOCKED, SECBIT_NO_SETUID_FIXUP_LOCKED et SECBIT_NOROOT_LOCKED.

       Les  attributs  securebits  peuvent être modifiés et récupérés en utilisant les opérations
       PR_SET_SECUREBITS et PR_GET_SECUREBITS de prctl(2). La capacité CAP_SETPCAP est nécessaire
       pour modifier ces attributs.

       Les  attributs  securebits  sont hérités par les processus fils. Lors d'un execve(2), tous
       les  attributs  sont  conservés,  à  l'exception  de  SECBIT_KEEP_CAPS  qui  est  toujours
       désactivé.

       Une  application  peut  utiliser  l'appel suivant pour se verrouiller elle-même, ainsi que
       tous ses descendant, dans un environnement où la seule façon d'obtenir des  capacités  est
       d'exécuter un programme avec les capacités de fichiers correspondantes :

           prctl(PR_SET_SECUREBITS,
                   SECBIT_KEEP_CAPS_LOCKED |
                   SECBIT_NO_SETUID_FIXUP |
                   SECBIT_NO_SETUID_FIXUP_LOCKED |
                   SECBIT_NOROOT |
                   SECBIT_NOROOT_LOCKED);

CONFORMITÉ

       Il  n'y  a pas de véritable norme pour les capacités, mais l'implémentation Linux est basé
       sur une interprétation de la norme (retirée) POSIX.1e ; consultez ⟨http://wt.tuxomania.net
       /publications/posix.1e/⟩.

NOTES

       Depuis  le  noyau 2.5.27,  les  capacités  sont optionnelles dans le noyau et peuvent être
       activées ou désactivées avec l'option  de  configuration  CONFIG_SECURITY_CAPABILITIES  du
       noyau.

       Le  fichier  /proc/PID/task/TID/status  peut  être  utilisé  pour  voir  les  ensembles de
       capacités d'un thread. Le fichier /proc/PID/status indique les ensembles de  capacités  du
       thread  principal  d'un  thread.  Avant Linux 3.8, les capacités inexistantes étaient vues
       comme activées (1) dans ces ensembles. Depuis Linux 3.8, toutes les capacités inexistantes
       (au-délà de CAP_LAST_CAP) sont vues comme désactivées (0).

       Le  paquet  libcap  fournit un ensemble de routines pour écrire et lire les capacités d'un
       processus, de manière plus simple et moins susceptible de changer que l'interface  fournie
       par  capset(2)  et  capget(2).  Ce  paquet  fournit  également les programmes setcap(8) et
       getcap(8). Il peut être trouvé à l'adresse :
       ⟨http://www.kernel.org/pub/linux/libs/security/linux-privs⟩.

       Avant le noyau 2.6.24, et depuis le noyau 2.6.24 si les capacités de fichier ne  sont  pas
       activées,  un  thread avec la capacité CAP_SETPCAP peut manipuler les capacités des autres
       threads. Cependant, ce n'est possible qu'en théorie puisqu'aucun thread  n'a  la  capacité
       CAP_SETPCAP dans un des cas suivants :

       * Dans  l'implémentation antérieure au noyau 2.6.25, l'ensemble de limitation de capacités
         du système, /proc/sys/kernel/cap-bound, masque toujours cette capacité et ceci  ne  peut
         pas être changé sans modifier les sources du noyau et le recompiler.

       * Si les capacités de fichiers sont désactivées dans l'implémentation actuelle, alors init
         démarre sans cette capacité dans l'ensemble de limitation de capacité de son  processus,
         et cet ensemble de limitation de capacité est hérité par tous les processus créés sur le
         système.

VOIR AUSSI

       capsh(1),    capget(2),    prctl(2),    setfsuid(2),    cap_clear(3),     cap_copy_ext(3),
       cap_from_text(3),  cap_get_file(3),  cap_get_proc(3), cap_init(3), capgetp(3), capsetp(3),
       libcap(3), credentials(7), pthreads(7), getcap(8), setcap(8)

       include/linux/capability.h dans les sources du noyau Linux

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe   Blaess   <http://www.blaess.fr/christophe/>   (1996-2003),    Alain    Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».