Provided by: manpages-fr_4.21.0-2_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  les UID effectifs sont différents de zéro). Les processus privilégiés
       contournent toutes 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 additionnels).

       À partir de Linux 2.2, Linux scinde les privilèges traditionnellement  associés  au  superutilisateur  en
       unités  distinctes,  connues  sous  le  nom  de capabilities (capacités) 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_READ (depuis Linux 3.16)
              Autoriser la lecture du journal d'audit au moyen d'un socket netlink multidiffusion.

       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_BPF (depuis Linux 5.8)
              Utiliser des opérations BPF privilégiées ; consultez bpf(2) et bpf-helpers(7).

              Cette  capacité  a  été  ajoutée  dans Linux 5.8 pour séparer la fonctionnalité BPF de la capacité
              CAP_SYS_ADMIN surchargée.

       CAP_CHECKPOINT_RESTORE (depuis Linux 5.9)
              -  Mettre à jour /proc/sys/kernel/ns_last_pid (consultez pid_namespaces(7)) ;
              -  Utiliser la fonction set_tid de clone3(2) ;
              -  Lire le contenu des liens symboliques dans /proc/pid/map_files pour les autres processus.

              Cette capacité a été ajoutée dans Linux 5.9 pour séparer la fonctionnalité  checkpoint/restore  de
              la capacité CAP_SYS_ADMIN surchargée.

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

       CAP_DAC_OVERRIDE
              Contourner  les  vérifications  des  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
              -  Contourner les vérifications des permissions de lecture de fichiers et  celles  de  lecture  et
                 d'exécution des répertoires ;
              -  invoquer open_by_handle_at(2) ;
              -  utiliser  l'attribut  AT_EMPTY_PATH de linkat(2) pour créer un lien vers un fichier visé par un
                 descripteur de fichier.

       CAP_FOWNER
              -  Contourner les vérifications pour les opérations qui demandent que l'UID de système de fichiers
                 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 d'inœuds (consultez ioctl_iflags(2)) 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 « sticky bit » des répertoires pour les suppressions de fichier ;
              -  modifier  les attributs étendus user sur un répertoire avec le sticky bit défini, appartenant à
                 n'importe quel utilisateur ;
              -  spécifier O_NOATIME dans open(2) et fcntl(2) pour n'importe quel fichier.

       CAP_FSETID
              -  Ne pas effacer les bits de mode set-user-ID  et  set-group-ID  lors  de  la  modification  d'un
                 fichier ;
              -  positionner  le  bit  Set-group-ID  sur  un fichier dont le GID ne correspond pas au système de
                 fichiers ni à aucun GID additionnel du processus appelant.

       CAP_IPC_LOCK
              -  Verrouiller des pages mémoire (mlock(2), mlockall(2), mmap(2), shmctl(2)) ;
              -  allouer des pages mémoire utilisant des pages larges (memfd_create(2), mmap(2), shmctl(2)).

       CAP_IPC_OWNER
              Contourner les vérifications de permission pour les opérations sur les objets IPC System V.

       CAP_KILL
              Contourner les vérifications de permission pour l'émission de signaux (consultez  kill(2)).  Cette
              capacité inclut l'utilisation de l'opération KDSIGACCEPT d'ioctl(2).

       CAP_LEASE (depuis Linux 2.4)
              Demander des baux (leases) 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 ioctl_iflags(2)).

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

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

       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 ») ;
              -  utilisation de 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 un socket à un port privilégié du domaine de  l'Internet  (numéro  de  port  inférieur  à
              1024).

       CAP_NET_BROADCAST
              (Inutilisé) diffusion par socket et écoute de multidiffusion.

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

       CAP_PERFMON (depuis Linux 5.8)
              Utiliser divers mécanismes de suivi des performances dont :

              -  appeler perf_event_open(2) ;
              -  utiliser diverses opérations BPF qui ont des incidences sur les performances.

              Cette  capacité  a  été  ajoutée  dans  Linux 5.8  pour  séparer  la  fonctionnalité  de suivi des
              performances de la capacité CAP_SYS_ADMIN surchargée. Consultez aussi le fichier source  du  noyau
              Documentation/admin-guide/perf-security.rst.

       CAP_SETGID
              -  Faire des manipulations arbitraires des GID et de la liste de GID additionnels des processus ;
              -  simuler des GID lors du passage de références de sockets au moyen de sockets de domaine UNIX ;
              -  écrire une projection de GID dans un espace de noms utilisateur (consultez user_namespaces(7)).

       CAP_SETFCAP (depuis Linux 2.6.24)
              Définir des capacités arbitraires sur un fichier

              Depuis Linux 5.12, cette capacité est aussi nécessaire pour projeter l'UID 0 dans un nouvel espace
              de noms utilisateur ; pour en savoir plus consultez user_namespaces(7).

       CAP_SETPCAP
              Si les capacités de fichier sont prises en charge  (c'est-à-dire  depuis  Linux 2.6.24) :  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 les attributs securebits.

              Si  les capacités de fichier ne sont pas prises en charge (c'est-à-dire avec les noyaux antérieurs
              à Linux 2.6.24) : accorder ou interdire toute capacité dans l'ensemble des capacités  permises  de
              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és de fichiers,  puisque
              CAP_SETPCAP a une toute autre sémantique pour ces noyaux).

       CAP_SETUID
              -  Faire des manipulations arbitraires des UID de processus (setuid(2), setreuid(2), setresuid(2),
                 setfsuid(2)) ;
              -  simuler des UID lors du passage de références de sockets au moyen de sockets de domaine UNIX ;
              -  écrire  une  projection  de   l'UID   dans   un   espace   de   noms   utilisateur   (consultez
                 user_namespaces(7)).

       CAP_SYS_ADMIN
              Remarque :  cette  capacité  est  surchargée :  voir  les  Notes  pour  les  développeurs du noyau
              ci-dessous.

              -  Effectuer  certaines  opérations  d'administration  système  comme :   quotactl(2),   mount(2),
                 umount(2), pivot_root(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) ;
              -  accéder   à   la   même   fonctionnalité   checkpoint/restore    qui    est    contrôlée    par
                 CAP_CHECKPOINT_RESTORE  (mais  cette  dernière capacité plus faible est préférée pour accéder à
                 cette fonctionnalité) ;
              -  effectuer les mêmes opérations BPF que celles  contrôlées  par  CAP_BPF  (mais  cette  dernière
                 capacité plus faible est préférée pour accéder à cette fonctionnalité) ;
              -  utiliser  les  mêmes  mécanismes  de  suivi des performances qui sont contrôlés par CAP_PERFMON
                 (mais cette dernière capacité plus faible est préférée pour accéder à cette fonctionnalité) ;
              -  effectuer des opérations IPC_SET et IPC_RMID sur n'importe quel objet IPC System V ;
              -  ne pas tenir compte de la limite de ressource RLIMIT_NPROC ;
              -  effectuer des opérations sur les attributs étendus trusted et security (consultez xattr(7)) ;
              -  utiliser lookup_dcookie(2) ;
              -  utiliser ioprio_set(2) pour configurer une classe  d'ordonnancement  d'E/S  IOPRIO_CLASS_RT  et
                 (avant Linux 2.6.25) IOPRIO_CLASS_IDLE ;
              -  simuler des PID lors du passage de références de sockets au moyen de sockets de domaine UNIX ;
              -  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 (par exemple accept(2), execve(2), open(2) et pipe(2)) ;
              -  utiliser les attributs CLONE_* qui  créent  de  nouveaux  espaces  de  noms  avec  clone(2)  et
                 unshare(2)  (mais,  depuis  Linux  3.8,  la création d'espaces de noms utilisateur ne nécessite
                 aucune capacité) ;
              -  accéder aux informations d'événements perf nécessitant des droits ;
              -  appeler setns(2) (nécessite la capacité CAP_SYS_ADMIN dans l'espace de noms  target ;
              -  appeler fanotify_init(2) ;
              -  effectuer des opérations KEYCTL_CHOWN et KEYCTL_SETPERM de keyctl(2) nécessitant des droits ;
              -  effectuer une opération madvise(2) MADV_HWPOISON ;
              -  utiliser la commande TIOCSTI de ioctl(2) pour insérer des caractères  dans  la  file  d'entrées
                 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  ioctl(2)  nécessitant  des  droits  sur le périphérique /dev/random
                 (consultez random(4)) ;
              -  installer un filtre seccomp(2) sans avoir à définir d'abord l'attribut de thread no_new_privs ;
              -  modifier  les  règles  d'autorisation  ou  d'interdiction  pour  les  groupes  de  contrôle  de
                 périphérique ;
              -  utiliser  l'opération  PTRACE_SECCOMP_GET_FILTER de ptrace(2) pour vider les filtres seccomp de
                 l'observé ;
              -  utiliser l'opération PTRACE_SETOPTIONS de ptrace(2) pour suspendre les protections  seccomp  de
                 l'observé (c'est-à-dire l'attribut PTRACE_O_SUSPEND_SECCOMP) ;
              -  effectuer des opérations d'administration sur de nombreux pilotes de périphériques ;
              -  modifier  les  valeurs  de  courtoisie  de  l'autogroupe  en  écrivant dans /proc/pid/autogroup
                 (consultez sched(7)).

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

       CAP_SYS_CHROOT
              -  Utiliser chroot(2) ;
              -  modifier l'espace de noms montage en utilisant setns(2).

       CAP_SYS_MODULE
              -  Charger ou décharger des modules noyaux (consultez init_module(2) et delete_module(2)) ;
              -  avant Linux 2.6.25 : enlever des capacités de l'ensemble de limitation de capacités  au  niveau
                 du système.

       CAP_SYS_NICE
              -  Baisser  la  valeur de courtoisie (« nice ») (nice(2), setpriority(2)) et changer la courtoisie
                 de n'importe quel processus ;
              -  définir les politiques d'ordonnancement temps réel pour le processus appelant et les politiques
                 d'ordonnancement   et   les  priorités  de  n'importe  quel  processus  (sched_setscheduler(2),
                 sched_setparam(2), sched_setattr(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 ;
              -  transférer les données depuis ou vers la mémoire  de  n'importe  quel  processus  au  moyen  de
                 process_vm_readv(2) et de process_vm_writev(2) ;
              -  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 à un périphérique sur d'autres 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 de 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)) ;
              -  permettre  le  contournement  de  la  limite  de  ressource  RLIMIT_NOFILE  sur  le  nombre  de
                 descripteurs  de  fichiers « en cours » lors de leur transmission à un autre processus au moyen
                 d'un socket de domaine UNIX (consultez unix(7)) ;
              -  ne pas tenir compte de 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 des limites /proc/sys/fs/mqueue/queues_max, /proc/sys/fs/mqueue/msg_max  et
                 /proc/sys/fs/mqueue/msgsize_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 :

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

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

       -  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é.

       Avant Linux 2.6.24, seules les deux premières exigences sont remplies ; depuis  Linux 2.6.24,  ces  trois
       exigences sont remplies.

   Remarques pour les développeurs du noyau
       Lors  de  l'ajout  d'une  nouvelle  fonctionnalité du noyau qui pourrait être contrôlée par une capacité,
       veuillez prendre en considération les points suivants :

       -  Le but des capacités est de découper le pouvoir du superutilisateur en plusieurs  aptitudes  de  telle
          sorte  que si un programme qui a une ou plusieurs capacités est compromis, son pouvoir d'endommager le
          système soit moindre que si le programme est exécuté avec les privilèges du superutilisateur.

       -  Vous pouvez choisir de créer une nouvelle capacité pour votre nouvelle fonctionnalité,  ou  d'associer
          la fonctionnalité à l'une des capacités existantes. Afin que l'ensemble des capacités garde une taille
          gérable, la seconde solution est préférable, à moins qu'il y ait des raisons convaincantes de  choisir
          la  première  option  (il existe aussi une limite technique : la taille des ensembles de capacités est
          actuellement limitée à 64 bits).

       -  Pour déterminer parmi les capacités existantes laquelle est la mieux adaptée pour être associée  à  la
          nouvelle fonctionnalité, examinez la liste de capacités ci-dessus pour trouver un « silo » dans lequel
          la nouvelle capacité est la mieux adaptée. Une des  options  est  de  déterminer  s'il  y  a  d'autres
          fonctionnalités  exigeant des capacités qui seront toujours utilisées avec la nouvelle fonctionnalité.
          Si la nouvelle fonctionnalité ne sert à rien sans les autres fonctions, vous devriez utiliser la  même
          capacité que ces autres fonctions.

       -  Ne  choisissez  pas  CAP_SYS_ADMIN  si vous pouvez l'éviter ! Une forte proportion de vérifications de
          capacités  existantes  lui  sont  associée  (voir  une  liste  partielle  plus  haut).  Elle  pourrait
          plausiblement  être  appelée  « la  nouvelle  racine », dans la mesure où d'une part, elle confère une
          large palette de pouvoirs, et d'autre part, sa vaste portée signifie que c'est  la  capacité  qui  est
          requise  par  de nombreux programmes privilégiés. Ne rendez pas le problème encore plus compliqué. Les
          seules nouvelles fonctionnalités qui  pourraient  être  associées  à  CAP_SYS_ADMIN  sont  celles  qui
          correspondent de façon étroite aux usages existants dans ce silo.

       -  Si  vous  avez  établi  qu'il  était  réellement  nécessaire de créer une nouvelle capacité pour votre
          fonctionnalité, ne la créez pas ou ne la nommez  pas  comme  une  capacité  « à  usage  unique ».  Par
          conséquent,  par  exemple, l'ajout de la capacité très spécifique CAP_SYS_PACCT était probablement une
          erreur. Essayez plutôt d'identifier et de nommer votre nouvelle capacité comme un  silo  plus  général
          dans lequel d'autres futures cas d'usage semblable pourraient s'intégrer.

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

       Permitted (permis)
              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-user-ID-root ou un programme
              dont les capacités associées au fichier accordent cette capacité).

       Inheritable (héritable)
              Il  s'agit  d'un  ensemble  de  capacités  préservées  au  travers  d'un  execve(2). Les capacités
              héritables restent héritables lors de l'exécution d'un programme et les capacités héritables  sont
              ajoutées  à  l'ensemble  de  capacités  permises lors de l'exécution d'un programme qui a les bits
              correspondant activés dans l'ensemble héritable du fichier.

              Parce que les capacités héritables ne sont généralement pas préservées au travers  d'un  execve(2)
              lors  d'une  exécution  en tant qu'utilisateur ordinaire, les applications qui souhaitent exécuter
              des programmes d'assistance avec des capacités plus élevées  devraient  envisager  d'utiliser  les
              capacités ambiantes, décrites ci-dessous.

       Effective (effectif)
              Il  s'agit  de  l'ensemble  des  capacités utilisées par le noyau pour vérifier les permissions du
              thread.

       Bounding (limitation) (par processus depuis Linux 2.6.25)
              L’ensemble de limitation des capacités (« capability bounding set ») est  un  mécanisme  qui  peut
              être utilisé pour limiter les capacités qui peuvent être obtenues lors d'un execve(2).

              Depuis  Linux 2.6.25,  c'est un ensemble de capacités par thread. Dans les noyaux plus anciens, la
              limitation des capacités était un attribut pour  l'ensemble  du  système,  partagé  par  tous  les
              threads du système.

              Pour plus de détails, voir Ensemble de limitation des capacités, ci-dessous.

       Ambient (ambiant) (depuis Linux 4.3)
              Il  s'agit  d'un  ensemble  de  capacités  préservées au travers d'un execve(2) d'un programme non
              privilégié. L'ensemble de capacités ambiantes obéit à la règle invariable  qu'aucune  capacité  ne
              peut être ambiante si elle n'est pas à la fois permise et héritable.

              L'ensemble  de  capacités  ambiantes  peut  être  directement modifié avec prctl(2). Les capacités
              ambiantes  sont  automatiquement  diminuées  si  une  capacités  soit  permises  soit   héritables
              correspondantes sont diminuées.

              L'exécution  d'un  programme  qui  change  l'UID  ou  le  GID  à  cause  des  bits  set-user-ID ou
              set-group-ID, ou l'exécution d'un programme qui a un ensemble de capacités de  fichier  supprimera
              l'ensemble  ambiant.  Les capacités ambiantes sont ajoutées à l'ensemble des capacités permises et
              assignées à l'ensemble des capacités effectives quand  execve(2)  est  appelé.  Si  les  capacités
              ambiantes  font  que  les  capacités  permises  et ambiantes d'un processus sont accrues durant un
              execve(2), cela ne déclenche pas le mode « secure-execution » décrit dans ld.so(8).

       Un enfant créé par fork(2) hérite d'une copie des ensembles de capacités de son parent. Pour des  détails
       sur  la  façon  dont  execve(2)  affecte les capacités, voir Transformation des capacités lors d'un appel
       execve() plus bas.

       En utilisant capset(2), un thread peut manipuler ses propres ensembles de capacités ;  voir  Ajuster  les
       ensembles de capacités par programmation 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  Linux 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)  et xattr(7)) 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 :

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

       Inheritable (anciennement allowed (autorisé)) :
              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 héritables sont permises dans l’ensemble permis du thread
              après l'appel à execve(2).

       Effective (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és permises correspondantes  lors
              d'un  execve(2)  (consultez Transformation des capacités lors d'un appel execve() ci-dessous) fera
              que ce fichier aura aussi cette capacité dans son ensemble effectif. Ainsi,  lors  de  l'ajout  de
              capacités  à  un  fichier (setcap(8), cap_set_file(3), cap_set_fd(3)), si l’attribut effectif pour
              une des capacités est activé, alors l'attribut effectif doit également être activé pour toutes les
              autres capacités dont l’attribut permis ou héritable correspondant est activé.

   Versionnage d'attributs étendus de capacité de fichier
       Pour  permettre l'extensibilité, le noyau prend en charge un système pour coder un numéro de version dans
       l'attribut étendu security.capability qui est utilisé pour implémenter  les  capacités  de  fichier.  Ces
       numéros  de  version  sont  intégrés  à  l'implémentation et pas directement visibles aux applications de
       l'espace utilisateur. À ce jour, les versions suivantes sont prise en charge :

       VFS_CAP_REVISION_1
              C'était l'implémentation d'origine de la capacité de fichier qui prenait  en  charge  les  masques
              32 bits pour les capacités de fichier.

       VFS_CAP_REVISION_2 (depuis Linux 2.6.25)
              Cette  version  permet  des  masques  de capacité de fichier d'une taille de 64 bits, ce qui était
              nécessaire, car le nombre de capacités prises en charge dépassait 32. Le noyau continue  de  façon
              transparente à prendre en charge l'exécution de fichiers qui ont des masques de capacité version 1
              32 bits, mais lors de l'ajout de capacités à des fichiers qui n'avaient pas encore de capacités ou
              lors de la modification des capacités de fichiers existants, il utilise automatiquement le système
              de la version 2 (ou éventuellement la version 3, comme décrit plus bas).

       VFS_CAP_REVISION_3 (depuis Linux 4.14)
              Les capacités de fichier version 3 sont fournies pour prendre en charge les capacités  de  fichier
              mises dans un espace de noms (décrites plus bas).

              Comme  avec les capacités de fichier version 2, les masques de capacité version 3 ont une longueur
              de 64 bits. Mais en complément, l'UID root de l'espace de noms est  codé  dans  l'attribut  étendu
              security.capability (un UID root d'espace de noms est la valeur à laquelle l'UID 0 dans cet espace
              de noms correspond dans l'espace de noms utilisateur initial).

              Les capacités de fichier version 3 sont conçues pour  coexister  avec  les  capacités  version 2 ;
              c'est-à-dire  que,  sur  un  système  Linux  moderne,  il  peut y avoir certains fichiers avec des
              capacités version 2 tandis que d'autres ont des capacités version 3.

       Avant Linux 4.14, le seul type d'attribut étendu de capacité de fichier qui pouvait  être  attaché  à  un
       fichier  était  un  attribut  VFS_CAP_REVISION_2.  Depuis  Linux 4.14,  la  version  de l'attribut étendu
       security.capability attaché à un fichier dépend des circonstances dans lesquelles l'attribut a été créé.

       À partir de Linux 4.14, un attribut étendu security.capability est créé automatiquement (ou converti)  en
       attribut version 3 (VFS_CAP_REVISION_3) si les deux conditions suivantes sont vraies :

       -  Le  thread  qui  écrit  l'attribut  réside  dans  un  espace  de  noms  utilisateur  non initial (plus
          précisément, le thread réside dans un espace de noms utilisateur autre que celui à  partir  duquel  le
          système de fichiers sous-jacent a été monté).

       -  Le  thread  a  la capacité CAP_SETFCAP sur l'inœud du fichier, ce qui veut dire que (a) le thread a la
          capacité CAP_SETFCAP dans son propre espace de noms utilisateur et (b) l'UID et le GID de  l'inœud  du
          fichier a des correspondances dans l'espace de noms utilisateur de celui qui écrit.

       Quand  un attribut étendu security.capability VFS_CAP_REVISION_3 est créé, l'UID root de l'espace de noms
       utilisateur du thread qui crée l'attribut est enregistré dans l'attribut étendu.

       Par contre, la création ou la modification d'un attribut étendu security.capability à partir d'un  thread
       privilégié  (CAP_SETFCAP)  qui  réside  dans l'espace de noms où le système de fichiers sous-jacent a été
       monté (ce qui correspond normalement à l'espace de  noms  utilisateur  initial)  a  automatiquement  pour
       conséquence la création d'un attribut version 2 (VFS_CAP_REVISION_2).

       Veuillez  noter  que  la  création  d'un  attribut  étendu security.capability version 3 est automatique.
       C'est-à-dire que  losrsqu'une  application  de  l'espace  utilisateur  écrit  (setxattr(2))  un  attribut
       security.capability  au  format de la version 2, le noyau créera automatiquement un attribut version 3 si
       l'attribut  est  créé  dans  les  conditions  décrites  plus  haut.  En  parallèle,  quand  un   attribut
       security.capability  version 3  est  récupéré (getxattr(2)) par un processus qui réside dans un espace de
       noms utilisateur qui a été créé par l'UID root (ou un descendant de  cet  espace  de  noms  utilisateur),
       l'attribut   renvoyé  est  (automatiquement)  simplifié  pour  apparaître  comme  un  attribut  version 2
       (c'est-à-dire que la valeur renvoyée est la taille de l'attribut version 2 et n'inclut pas  l'UID  root).
       Ces  transpositions  automatiques  signifient  qu'aucune  modification  n'est  requise pour les outils de
       l'espace utilisateur (par exemple setcap(1) getcap(1)) pour que ces outils soient utilisés pour créer  et
       récupérer des attributs security.capability version 3.

       Veuillez  noter  qu'un  fichier  peut se voir associé un attribut étendu security.capability version 2 ou
       version 3, mais pas  les  deux  à  la  fois :  la  création  ou  la  modification  de  l'attribut  étendu
       security.capability  modifiera automatiquement la version selon les conditions dans lesquelles l'attribut
       étendu est créé ou modifié.

   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'(ambient)     = (le fichier est privilégié) ? 0 : P(ambient)

           P'(permitted)   = (P(inheritable) & F(inheritable)) |
                             (F(permitted) & P(bounding)) | P'(ambient)

           P'(effective)   = F(effective) ? P'(permitted) : P'(ambient)

           P'(inheritable) = P(inheritable)    [c'est-à-dire inchangé]

           P'(bounding)    = P(bounding)       [c'est-à-dire 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 du thread après le execve(2)

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

       Veuillez noter les détails suivants concernant les règles de transformation de capacités ci-dessus :

       -  L'ensemble  de capacités ambiantes est présent seulement depuis Linux 4.3. Lors de la détermination de
          la transformation de l'ensemble ambiant durant un execve(2), un fichier privilégié est un fichier  qui
          a des capacités ou le bit set-user-ID ou le bit set-group-ID positionné.

       -  Avant  Linux 2.6.25,  l'ensemble  de  limitation  de capacités était un attribut au niveau du système,
          partagé par tous les threads. Cette valeur au niveau du système était employée pour calculer le nouvel
          ensemble  de  capacités  permises durant un execve(2) de la même manière que cela est montré plus haut
          pour P(bounding).

       Note : durant les transitions de capacité décrite plus  haut,  les  capacités  de  fichier  peuvent  être
       ignorées  (traitées  comme  si  elles  étaient  vides) pour les mêmes raisons que les bits set-user-ID et
       set-group-ID sont ignorés ; voir execve(2). Les capacités de fichier sont ignorées de la même manière  si
       le noyau a été lancé avec l'option no_file_caps.

       Note :  conformément  aux  règles ci-dessus, si un processus avec des UID différents de zéro exécutent un
       execve(2), alors toutes les capacités présentes dans son ensemble de  capacités  permises  et  effectives
       seront  supprimées.  Pour  le  traitement  de capacités quand un processus avec un UID de zéro exécute un
       execve(2), consultez ci-dessous Capacités et exécution de programmes par le superutilisateur.

   Vérification de sécurité pour les binaires passives aux capacités
       Un binaire passif aux capacités est une application qui  a  été  marquée  pour  avoir  des  capacités  de
       fichier,  mais  n'a  pas  été  convertie  pour  utiliser l'API libcap(3) pour manipuler ses capacités (en
       d'autres mots, c'est un programme set-user-iD-root traditionnel qui  a  été  modifié  pour  utiliser  des
       capacités  de fichier, mais dont le code n'a pas été modifié pour comprendre les capacités). Pour ce type
       d'application, le bit de capacité effective est défini sur le fichier, de telle sorte que  les  capacités
       de  fichier permises soient activées automatiquement dans l'ensemble de capacités effectives du processus
       lors de l'exécution du fichier. Le noyau reconnaît un fichier qui a un bit de capacité  effective  défini
       comme passif aux capacités en vue de la vérification décrite ici.

       Lors  de  l'exécution d'un binaire passif aux capacités, le noyau vérifie si le processus a obtenu toutes
       les capacités permises qui sont spécifiées dans l'ensemble de capacités permises de  fichier,  après  que
       les  transformations de capacité décrites plus haut ont été exécutées (la raison habituelle pour laquelle
       cela pourrait ne pas se produire est que l'ensemble de limitation de capacités a interdit  certaines  des
       capacités  dans  l'ensemble  de  capacités permises de fichier). Si le processus n'obtient pas l'ensemble
       complet de capacités permises de fichier, alors l'execve(2) échoue avec l'erreur  EPERM.  Cela  évite  de
       possibles  risques  de  sécurité  qui pourraient survenir quand une application passive aux capacités est
       exécutée avec moins de privilèges que nécessaire. Notez que, par définition,  l'application  ne  pourrait
       pas reconnaître elle-même ce problème, dans la mesure où elle n'emploie pas l'API libcap(3).

   Capacités et exécution de programmes par le superutilisateur
       Afin  de refléter les sémantiques traditionnelles d'UNIX, le noyau effectue un traitement particulier des
       capacités de fichier quand un processus avec l'UID 0 (superutilisateur) exécute un programme et quand  un
       programme set-user-ID-root est exécuté.

       Après avoir réalisé toutes les modifications de l'ID effectif du processus qui ont été déclenchées par le
       bit de mode set-user-ID du binaire (par exemple, le changement  de  l'UID  à 0  (superutilisateur)  parce
       qu'un  programme  set-user-ID-root a été exécuté), le noyau calcule les ensembles de capacités de fichier
       comme suit :

       (1)  Si l'UID réel ou effectif du processus est 0 (superutilisateur), alors les  ensembles  de  capacités
            héritables  et  permises  de  fichier  sont ignorés ; ils sont plutôt considérés théoriquement comme
            remplis de  uns  (c'est-à-dire,  toutes  les  capacités  activées).  Il  y  a  une  exception  à  ce
            comportement,  décrite  ci-dessous dans la section Programmes set-user-ID-root qui ont des capacités
            de fichier.

       (2)  Si l'UID effectif du processus est 0 (superutilisateur)  ou  le  bit  des  capacités  effectives  du
            fichier  est  en  fait  activé,  alors  le bit des capacités effectives du fichier est théoriquement
            défini à un (activé).

       Ces valeurs théoriques pour les ensembles de capacités de fichier sont  alors  utilisées  comme  décrites
       ci-dessus pour calculer la transformation des capacités du processus durant l'execve(2).

       Alors,  quand  un  processus  avec  des  UID  différents  de  zéro  appelle  execve(2)  sur  un programme
       set-user-ID-root qui n'a pas de capacités attachées ou quand un processus dont les UID réel  et  effectif
       sont  zéro  applique  execve(2) sur un programme, le calcul des nouvelles capacités permises du processus
       est simplifié à :

           P'(permitted)   = P(inheritable) | P(bounding)

           P'(effectives)   = P'(permitted)

       En conséquence, le processus obtient toutes les capacités dans ses ensembles  de  capacités  permises  et
       effectives,  à l'exception de celles supprimées par l'ensemble de limitation de capacités (dans le calcul
       de  P'(permitted),  le  terme  P'(ambient)  peut  être  simplifié  parce  qu'il  est  par  définition  un
       sous-ensemble propre de P(inheritable)).

       Les  traitements  particuliers de l'UID 0 (superutilisateur) décrits dans cette sous-section peuvent être
       désactivés en utilisant le mécanisme de « securebits » décrit plus bas.

   Les programmes set-user-ID-root qui ont des capacités de fichier
       Il y a  une  exception  au  comportement  décrit  dans  Capacités  et  exécution  de  programmes  par  le
       superutilisateur ci-dessus. Si (a) le binaire qui est en cours d'exécution a des capacités attachées, (b)
       l'UID réelle du processus n'est pas 0 (supertutilisateur)  et  (c)  l'UID  effectif  du  processus  est 0
       (superutilisateur),  alors  les bits de capacité de fichier sont honorés (c'est-à-dire qu'ils ne sont pas
       théoriquement considérés comme remplis de uns). La circonstance habituelle dans laquelle cette  situation
       peut  se  produire  est  lors de l'exécution d'un programme set-user-ID-root qui a aussi les capacités de
       fichier. Quand un programme de ce type  est  exécuté,  le  processus  obtient  simplement  les  capacités
       accordées par le programme (c'est-à-dire pas toutes les capacités comme cela pourrait se produire lors de
       l'exécution d'un programme set-user-ID-root qui ne possède aucune capacité de fichier associée).

       Notez qu'il est possible d'assigner un ensemble de capacités vide à un fichier de programme et donc qu'il
       est  possible  de  créer  un  programme  set-user-ID-root  qui  modifie  en 0  le set-user-ID effectif et
       sauvegardé du processus qui exécute le programme, mais ne confère aucune capacité à ce processus.

   Ensemble de limitation des capacités
       L’ensemble de 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). L’ensemble de
       limitation de capacités est utilisé de cette façon :

       -  Lors d'un execve(2), l’ensemble de limitation de  capacités  est  combinée  par  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. L’ensemble de limitation de capacités  permet  donc  de
          limiter les capacités permises qui peuvent être accordées par un fichier exécutable.

       -  (Depuis  Linux 2.6.25)  L’ensemble  de  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).
          Cela  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  l’ensemble  de 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, l’ensemble de limitation de capacités est un attribut au niveau du système
       ou un attribut par processus.

       Ensemble de limitation de capacités après Linux 2.6.25

       Depuis Linux 2.6.25, l’ensemble de limitation de capacités est un attribut  par  thread.  (L'ensemble  de
       limitation de capacités au niveau du système décrite ci-dessous n'existe plus.)

       L’ensemble  de  limitation  est  hérité  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 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  fichier sont compilées dans le noyau. Avant Linux 2.6.33, les capacités de fichier étaient
       une fonctionnalité optionnelle  configurable  ua  moyen  de  l'option  CONFIG_SECURITY_FILE_CAPABILITIES.
       Depuis  Linux 2.6.33,  l'option  de  configuration  a  été  supprimée  et  les  capacités de fichier font
       maintenant toujours partie du noyau. Quand les capacités de fichier sont  compilées  dans  le  noyau,  le
       processus  init  (l'ancêtre de tous les processus) démarre avec un ensemble de limitation complet. Si les
       capacités de fichier 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 fichier.

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

       Ensemble de limitation de capacités avant Linux 2.6.25

       Avant Linux  2.6.25, l’ensemble de limitation de capacités est un  attribut  au  niveau  du  système  qui
       affecte  tous  les  threads.  L’ensemble  de  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 ; en
       dehors de cela, le superutilisateur (plus précisément : un processus  avec  la  capacité  CAP_SYS_MODULE)
       peut uniquement supprimer des capacités de cet ensemble.

       Sur  un  système  standard,  l’ensemble  de  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.

       L’ensemble de limitation de capacités pour tout le système a été ajoutée à Linux 2.2.11.

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

       -  Si un ou plus des UID réels, effectifs ou sauvés étaient égal à 0, et qu'à la suite de la modification
          d'UID,  tous  ces  ID  ont  une valeur différente de zéro, et toutes les capacités sont supprimées des
          ensembles de capacités permises, effectives et ambiantes.

       -  Si l'UID effectif était 0 et devient différent de  zéro,  toutes  les  capacités  sont  supprimées  de
          l'ensemble effectif.

       -  Si  l'UID  effectif est modifié d'une valeur différente de zéro à 0, l'ensemble des capacités permises
          est copié dans l'ensemble des capacités effectives.

       -  Si l’UID du système de  fichiers  est  modifié  de 0  à  une  valeur  différente  de  zéro  (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 l’UID du système de fichiers
          devient 0, 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  qui  a  une valeur 0 pour un ou plus de ses UID 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'attribut « securebits » de SECBIT_KEEP_CAPS décrit ci-dessous.

   Ajuster les ensembles de capacités par programmation
       Un  thread  peut  obtenir  ou  modifier  ses  ensembles  de capacités permises, effectives et héritées 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 :

       -  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.

       -  (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.

       -  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).

       -  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 fichier.
       À partir de Linux 2.6.26, si les capacités de fichier sont activées dans le noyau,  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
              dans  son  ensemble  des  capacités  permises quand il change tous ses UID et que plus aucun n'est
              zéro. Si cet attribut est désactivé, alors ces changements d'UID feront perdre  au  thread  toutes
              ses capacités permises. Cet attribut est toujours désactivé lors d'un execve(2).

              Notez  que  même quand l'attribut SECBIT_KEEP_CAPS est actif, les capacités effectives d'un thread
              sont supprimées quand il change son UID effectif pour une valeur différente de zéro. Néanmoins, si
              le thread a activé cet attribut et que son UID effectif est déjà différent de zéro et si le thread
              change ensuite tous les autres UID pour des valeurs différentes  de  zéro,  alors,  les  capacités
              effectives ne seront pas supprimées.

              L'activation  de  l'attribut SECBIT_KEEP_CAPS est ignorée si l'attribut SECBIT_NO_SETUID_FIXUP est
              actif (ce dernier attribut fournit un surensemble des effets de l'attribut précédent).

              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  permises,  effectives  et
              ambiantes  du processus par le noyau lorsque les UID effectifs et du système de fichiers du thread
              passent d'une valeur zéro à une valeur différente de zéro. Consultez Effet des modifications d'UID
              sur les capacités plus haut.

       SECBIT_NOROOT
              Si  cet  attribut  est  activé,  alors  le  noyau  n'accorde pas les capacités lorsqu'un programme
              set-user-ID-root est exécuté ou lorsqu'un processus dont l'UID effectif ou réel est  zéro  appelle
              execve(2) (consultez Capacités et exécution de programmes par le superutilisateur ci-dessus).

       SECBIT_NO_CAP_AMBIENT_RAISE
              Activer  cet  attribut  désactive  l'élévation  des  capacités  ambiantes  au moyen de l'opération
              PR_CAP_AMBIENT_RAISE de prctl(2).

       Chacun des attributs de « base » ci-dessus a un  attribut  compagnon  « verrouillé ».  L'activation  d'un
       attribut  « verrouillé »  est irréversible et permet d'éviter toute modification ultérieure de l'attribut
       de   « base »   correspondant.   Les    attributs    « verrouillé »    sont :    SECBIT_KEEP_CAPS_LOCKED,
       SECBIT_NO_SETUID_FIXUP_LOCKED, SECBIT_NOROOT_LOCKED et SECBIT_NO_CAP_AMBIENT_RAISE_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.
       Notez  que  les  constantes  SECBIT_*  ne  sont  disponibles  qu'après  l'inclusion  du fichier d'en-tête
       <linux/securebits.h>.

       Les attributs securebits sont hérités par les processus enfants. 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
       descendants, 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 associées :

           prctl(PR_SET_SECUREBITS,
                   /* SECBIT_KEEP_CAPS désactivé */
                   SECBIT_KEEP_CAPS_LOCKED |
                   SECBIT_NO_SETUID_FIXUP |
                   SECBIT_NO_SETUID_FIXUP_LOCKED |
                   SECBIT_NOROOT |
                   SECBIT_NOROOT_LOCKED);
                   /* Activation/verrouillage de SECBIT_NO_CAP_AMBIENT_RAISE
                      non requis */

   Programmes « set-user_ID-root » par espace de noms utilisateur
       Un  programme  set-user-ID  dont  l'UID  correspond  à l'UID qui a créé par un espace de noms utilisateur
       donnera des capacités dans les ensembles de capacités permises et effectives du processus lorsqu'il était
       utilisé par un processus dans l'espace de noms ou tout espace de noms utilisateur qui en est issu.

       Les  règles  de  transformation  des  capacités  du  processus pendant un execve(2) sont exactement comme
       décrites dans Transformation des capacités  lors  d'un  appel  execve()  et  Capacités  et  exécution  de
       programmes  par le superutilisateur ci-dessus;à la différence que, dans la seconde sous-section, « root »
       est l'UID du créateur de l'espace de noms utilisateur.

   Capacités de fichier mises dans un espace de noms
       Les capacités de fichier traditionnelles (c'est-à-dire version 2) n'associent qu'un ensemble  de  masques
       de  capacité à un fichier binaire exécutable. Quand un processus exécute un binaire avec des capacités de
       ce type, il obtient les capacités associées (dans son espace de noms utilisateur) comme pour  les  règles
       décrites ci-dessus dans Transformation des capacités lors d'un appel execve().

       Étant  donné que les capacités de fichier version 2 confèrent des capacités pour l'exécution de processus
       quel que soit l'espace de noms utilisateur dans lequel il réside, seuls les processus privilégiés ont  le
       droit  d'associer  des  capacités  avec  un  fichier. Ici, « privilégié » veut dire un processus qui a la
       capacité CAP_SETFCAP  dans  l'espace  de  noms  utilisateur  où  le  système  de  fichiers  a  été  monté
       (normalement,  l'espace de noms initial de l'utilisateur). Cette limitation rend les capacités de fichier
       inutiles dans certains cas d'usage. Par exemple, dans les conteneurs d'un espace de noms utilisateur,  il
       peut  être  souhaitable  de  pouvoir  créer  un binaire qui confère des capacités uniquement au processus
       exécuté dans ce conteneur, mais pas aux processus exécutés en dehors du conteneur.

       Linux 4.14 a ajouté des capacités de fichier appelées « mises dans un espace  de  noms »  pour  gérer  ce
       genre  de  cas  d'usage.  Les capacités de fichier mises dans un espace de noms sont enregistrées en tant
       qu'attribut étendu security.capability version 3 (c'est-à-dire VFS_CAP_REVISION_3).  Un  attribut  de  ce
       type  est  créé  automatiquement  dans  les circonstances décrites ci-dessus dans Versionnage d'attributs
       étendus de capacité de fichier. Quand un attribut étendu security.capability version 3 est créé, le noyau
       n'enregistre pas que les masques de capacité dans l'attribut étendu, mais aussi l'UID root de l'espace de
       noms.

       Comme c'est le cas avec un binaire qui possède des capacités de fichier  VFS_CAP_REVISION_2,  un  binaire
       avec des capacités de fichier VFS_CAP_REVISION_3 confère des capacités à un processus durant un execve().
       Néanmoins, ces capacités ne sont conférées que si le processus est exécuté par un  processus  qui  réside
       dans  un  espace  de  noms  utilisateur  dont  l'UID 0  correspond  à  l'UID root qui est sauvegardé dans
       l'attribut étendu, ou quand il est exécuté par un processus qui réside dans  un  descendant  de  ce  type
       d'espace de noms.

   Interaction avec les espaces de noms
       Pour  en  savoir  plus  sur  les  interactions  entre  les  capacités et les espaces de noms utilisateur,
       consultez user_namespaces(7).

STANDARDS

       Il n'y a pas de véritable norme pour les  capacités,  mais  l'implémentation  Linux  est  basée  sur  une
       interprétation    de    la    norme    (retirée)    POSIX.1e ;   consultez   ⟨https://archive.org/details
       /posix_1003.1e-990310⟩.

NOTES

       Quand vous tentez de suivre  avec  strace(1)  des  binaires  qui  ont  des  capacités  (ou  des  binaires
       set-user-UID-root), vous pouvez trouver l'option -u <username>. Quelque chose comme ceci :

           $ sudo strace -o trace.log -u ceci ./mon_prog_privé

       De  Linux 2.5.27  à Linux 2.6.26, les capacités étaient un composant optionnel du noyau et pouvaient ê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 processus. 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 (supérieures à la valeur de CAP_LAST_CAP) sont vues comme
       désactivées (0).

       Le paquet libcap fournit un ensemble de routines pour écrire et connaître 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 :
       ⟨https://git.kernel.org/pub/scm/libs/libcap/libcap.git/refs/⟩.

       Avant Linux 2.6.24, et de Linux 2.6.24 à Linux 2.6.32, 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  la capacité CAP_SETPCAP et cela ne peut pas être changé
          sans modifier les sources du noyau et le recompiler.

       -  Si    les    capacités    de    fichier     sont     désactivées     (c'est-à-dire     si     l'option
          CONFIG_SECURITY_FILE_CAPABILITIES  du  noyau  est  désactivée),  alors  init  démarre sans la capacité
          CAP_SETPCAP dans l'ensemble de limitation de capacités par 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),   setpriv(1),   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),    proc(5),
       credentials(7),   pthreads(7),   user_namespaces(7),   captest(8),  filecap(8),  getcap(8),  getpcaps(8),
       netcap(8), pscap(8), setcap(8)

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

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-Pierre Giraud <jean-pierregiraud@neuf.fr>

       Cette traduction est une documentation libre ; veuillez vous reporter à la  GNU  General  Public  License
       version 3   ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.