{"id":20284,"date":"2026-08-03T11:50:45","date_gmt":"2026-08-03T09:50:45","guid":{"rendered":"https:\/\/webhosting.de\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/"},"modified":"2026-08-03T11:50:45","modified_gmt":"2026-08-03T09:50:45","slug":"capacites-linux-droits-root-repartition-granulaire-concept-de-securite","status":"publish","type":"post","link":"https:\/\/webhosting.de\/fr\/linux-capabilities-root-rechte-granular-aufteilen-sicherheitskonzept\/","title":{"rendered":"Capacit\u00e9s Linux : r\u00e9partir les droits root de mani\u00e8re s\u00e9curis\u00e9e et granulaire"},"content":{"rendered":"<p>Gr\u00e2ce aux capacit\u00e9s Linux, je divise les droits root en petits privil\u00e8ges clairement d\u00e9finis, ce qui r\u00e9duit consid\u00e9rablement le risque. Je contr\u00f4le ainsi de mani\u00e8re cibl\u00e9e les processus autoris\u00e9s \u00e0 effectuer des actions sp\u00e9cifiques et je limite la surface d'attaque de chaque application.<\/p>\n\n<h2>Points centraux<\/h2>\n\n<ul>\n  <li><strong>\u00c0 granulom\u00e9trie fine<\/strong> Au lieu d'\u00eatre tout-puissant : diviser les droits root en privil\u00e8ges plus restreints.<\/li>\n  <li><strong>Capacit\u00e9s des fichiers<\/strong> Au lieu d'utiliser Set-UID : associer directement les droits requis aux fichiers binaires.<\/li>\n  <li><strong>Ensembles de capacit\u00e9s<\/strong> Configurer de mani\u00e8re cibl\u00e9e les param\u00e8tres \u00ab steuern \u00bb : Permitted, Effective, Inheritable, Bounding.<\/li>\n  <li><strong>S\u00e9paration des privil\u00e8ges<\/strong>: S\u00e9parer strictement les services, les outils et les t\u00e2ches.<\/li>\n  <li><strong>D\u00e9fense en profondeur<\/strong>: Compl\u00e9ter les capacit\u00e9s avec sudo, les r\u00f4les et les journaux.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-serververwaltung-8291.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pourquoi d\u00e9sactiver les droits root ?<\/h2>\n\n<p>Un compte root permet <strong>Acc\u00e8s complet<\/strong> au niveau des fichiers et des processus, mais c'est pr\u00e9cis\u00e9ment ce qui peut entra\u00eener des erreurs aux cons\u00e9quences graves. Une commande erron\u00e9e ou un exploit suffit \u00e0 faire planter toute une installation. Je limite donc les actions de grande envergure au strict n\u00e9cessaire, ce qui permet de r\u00e9duire l'ampleur des d\u00e9g\u00e2ts et le temps de restauration. Le principe des droits minimaux permet de maintenir les services \u00e0 une taille r\u00e9duite et contr\u00f4lable. Je d\u00e9sactive la connexion directe en tant qu'utilisateur root, je mise sur les r\u00f4les et je g\u00e9n\u00e8re des journaux complets.<\/p>\n\n<h2>Les capacit\u00e9s Linux en bref<\/h2>\n\n<p>Les capacit\u00e9s Linux d\u00e9composent les pouvoirs classiques de l'utilisateur root en \u00e9l\u00e9ments clairement d\u00e9finis <strong>Privil\u00e8ges<\/strong>. Chaque processus ne re\u00e7oit que les modules dont il a r\u00e9ellement besoin pour accomplir sa t\u00e2che, par exemple la liaison \u00e0 des ports inf\u00e9rieurs \u00e0 1024 ou l'envoi de signaux sp\u00e9cifiques. Cela me permet de contourner l'ancienne approche \u00ab tout ou rien \u00bb. Le noyau g\u00e8re ces modules pour chaque processus et les applique de mani\u00e8re stricte. Le contr\u00f4le reste ainsi pr\u00e9cis et tra\u00e7able.<\/p>\n\n<p>Sur le plan technique, j'associe mes comp\u00e9tences soit \u00e0 <strong>Processus<\/strong> (via leurs ensembles de capacit\u00e9s) ou \u00e0 <strong>Fichiers<\/strong> (sous forme d'attributs \u00e9tendus <code>security.capability<\/code> aux binaires ELF). Dans le cas du <code>execve()<\/code>-Lors du d\u00e9marrage, le noyau fusionne les capacit\u00e9s des fichiers avec les ensembles de processus : pour simplifier, les capacit\u00e9s autoris\u00e9es issues des attributs du fichier, associ\u00e9es aux droits h\u00e9ritables du processus appelant, sont combin\u00e9es pour former le nouvel ensemble \u00ab Permitted \u00bb et, si cela est indiqu\u00e9, activ\u00e9es simultan\u00e9ment dans l'ensemble \u00ab Effective \u00bb. Cela \u00e9vite les d\u00e9tours par le Set-UID et permet de garder les privil\u00e8ges visibles et v\u00e9rifiables.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_rechte_besprechung_3820.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Comprendre les ensembles de capacit\u00e9s dans le contexte des processus<\/h2>\n\n<p>Chaque processus dispose de plusieurs ensembles de droits, que je peux attribuer de mani\u00e8re cibl\u00e9e <strong>contr\u00f4le<\/strong>. Le \u00ab Permitted-Set \u00bb d\u00e9finit ce qu'un processus est en principe autoris\u00e9 \u00e0 poss\u00e9der. Le \u00ab Effective-Set \u00bb d\u00e9termine ce qui est actuellement actif. Le \u00ab Inheritable-Set \u00bb r\u00e9git les privil\u00e8ges pouvant \u00eatre transmis aux processus enfants. Le \u00ab Bounding-Set \u00bb fixe une limite maximale stricte et emp\u00eache les processus de la d\u00e9passer.<\/p>\n\n<h2>Ambient Capabilities et Securebits<\/h2>\n\n<p>Outre les coffrets bien connus, il y a le <strong>Ensemble \u00ab Ambient \u00bb<\/strong>, qui, lors du <code>execve()<\/code> n'expire pas automatiquement. Je l'utilise lorsqu'un processus non privil\u00e9gi\u00e9 a besoin de droits minimaux sur plusieurs <code>exec<\/code>- doit conserver ces sauts (par exemple lors de l'appel de programmes utilitaires externes). Les droits \u00ab ambient \u00bb ne sont pris en compte dans les droits effectifs que si le fichier appel\u00e9 ne d\u00e9finit pas lui-m\u00eame de capacit\u00e9s de fichier \u2013 cela me permet d'\u00e9viter toute escalade ind\u00e9sirable.<\/p>\n\n<p>Avec les <strong>Securebits<\/strong> je g\u00e8re les d\u00e9tails des transitions, par exemple si un processus peut conserver les capacit\u00e9s qu'il avait pr\u00e9c\u00e9demment d\u00e9finies apr\u00e8s le changement d'UID (<code>keepcaps<\/code>) ou s'il ne peut, d'une mani\u00e8re g\u00e9n\u00e9rale, obtenir aucun nouveau privil\u00e8ge (<code>no_new_privs<\/code>). Dans la pratique, je configure Securebits de mani\u00e8re tr\u00e8s stricte et je sacrifie le confort d'utilisation pour briser les cha\u00eenes d'exploits.<\/p>\n\n<h2>\u00ab File Capabilities \u00bb au lieu de \u00ab Set-UID \u00bb<\/h2>\n\n<p>Je remplace les binaires Set-UID par des capacit\u00e9s de fichier afin de r\u00e9duire le risque de <strong>abaisser<\/strong>. Au lieu d'accorder les droits de root \u00e0 un programme, je me contente d'attribuer le droit n\u00e9cessaire. Voici \u00e0 quoi ressemble g\u00e9n\u00e9ralement cette modification : <code>setcap 'cap_net_bind_service=+ep' \/usr\/bin\/meinserver<\/code>. Avec <code>getcap -r \/<\/code> Je v\u00e9rifie quels fichiers contiennent des comp\u00e9tences. Cela r\u00e9duit sensiblement les voies d'escalade.<\/p>\n\n<p>Il est important de noter que les capacit\u00e9s de fichier ne s'appliquent qu'\u00e0 <strong>Fichiers binaires ELF<\/strong> fonctionnent. Les scripts d'interpr\u00e9teur (par exemple Python, Bash) ne les h\u00e9ritent pas de mani\u00e8re fiable. Dans de tels cas, j'encapsule l'action privil\u00e9gi\u00e9e dans un petit utilitaire v\u00e9rifi\u00e9 de mani\u00e8re statique ou j'utilise l'activation par socket afin que mon service n'ait pas \u00e0 s'attacher lui-m\u00eame. De plus, je surveille de pr\u00e8s les droits d\u2019acc\u00e8s aux fichiers : les capacit\u00e9s conf\u00e8rent des droits sp\u00e9ciaux vis-\u00e0-vis du noyau, mais ne remplacent pas <strong>pas de<\/strong> les ACL habituelles ou les droits d'acc\u00e8s POSIX.<\/p>\n\n<p>Lorsqu'on copie ou qu'on regroupe des \u00e9l\u00e9ments, on perd rapidement ses comp\u00e9tences : <code>cp<\/code> sans prise en charge de XATTR, mal d\u00e9fini <code>umask<\/code> ou supprimer un artefact de compilation dans un syst\u00e8me de fichiers ne disposant pas d'attributs \u00e9tendus <code>security.capability<\/code> sans le dire. C'est pourquoi je travaille de mani\u00e8re reproductible et j'utilise : <code>cp --preserve=xattr ...<\/code>, <code>tar --xattrs<\/code>, <code>rsync -X<\/code>. Dans les builds de paquets, je d\u00e9finis explicitement les capacit\u00e9s des fichiers dans le script d'installation, je teste l'installation dans une machine virtuelle vierge et je v\u00e9rifie <code>getcap<\/code> dans le CI.<\/p>\n\n<h2>S\u00e9paration des privil\u00e8ges \u00e0 l'aide de sc\u00e9narios r\u00e9alistes<\/h2>\n\n<p>Un serveur web a besoin d'acc\u00e9der aux ports 80\/443, mais pas aux modules du noyau ni aux red\u00e9marrages du syst\u00e8me ; c'est pourquoi je configure <strong>CAP_NET_BIND_SERVICE<\/strong> et rien d'autre. Un agent de sauvegarde est autoris\u00e9 \u00e0 lire et \u00e0 \u00e9crire des fichiers, mais ne peut pas modifier la configuration r\u00e9seau. Un outil de surveillance dispose d\u2019un acc\u00e8s en lecture aux indicateurs cl\u00e9s de performance, mais ne dispose d\u2019aucun droit de modification. Ces restrictions limitent les attaques au niveau local, au lieu de les laisser se propager \u00e0 l\u2019ensemble du syst\u00e8me. C\u2019est pr\u00e9cis\u00e9ment cette s\u00e9paration qui permet de garder les services g\u00e9rables et de limiter les erreurs de configuration.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/balancing-linux-capabilities-5618.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Combiner avec sudo et les r\u00f4les<\/h2>\n\n<p>Les \u00ab capabilities \u00bb ne remplacent pas une <strong>structure des r\u00f4les<\/strong>, elles les compl\u00e8tent. J'accorde les droits sudo avec parcimonie, j'utilise des chemins d'acc\u00e8s complets aux commandes et j'\u00e9vite les r\u00e8gles g\u00e9n\u00e9rales telles que \u201e ALL=(ALL) ALL \u201c. Je consigne chaque autorisation dans un journal. Les groupes regroupent les responsabilit\u00e9s, tandis que les capacit\u00e9s fixent des limites techniques aux processus. Cela permet d\u2019\u00e9tablir des responsabilit\u00e9s claires sans droits excessifs.<\/p>\n\n<h2>Pi\u00e8ges courants et bonnes pratiques<\/h2>\n\n<ul>\n  <li><strong>Pas d'abr\u00e9viation pour CAP_SYS_ADMIN :<\/strong> Ce droit est un fourre-tout. Je le remplace par des alternatives plus cibl\u00e9es (par exemple,. <code>CAP_SYS_CHROOT<\/code>, <code>CAP_SYS_TIME<\/code>, <code>CAP_SYS_NICE<\/code>) ou renonce-y compl\u00e8tement.<\/li>\n  <li><strong>Les droits d'acc\u00e8s aux fichiers restent strictement d\u00e9finis :<\/strong> Les \u00ab Capabilities \u00bb ne d\u00e9sactivent pas syst\u00e9matiquement le DAC. Sans <code>CAP_DAC_OVERRIDE<\/code> Le noyau continue de respecter les bits de propri\u00e9taire et de mode. Je continue donc \u00e0 n'accorder que le minimum de droits de lecture.<\/li>\n  <li><strong>Durcissement par chemin :<\/strong> Lorsque j'attribue des capacit\u00e9s de fichier \u00e0 un binaire, j'emp\u00eache l'usurpation de PATH (chemins absolus dans <code>sudoers<\/code>, droits d'\u00e9criture bloqu\u00e9s sur les r\u00e9pertoires du chemin de recherche).<\/li>\n  <li><strong>Commencez t\u00f4t, faites-le souvent :<\/strong> Les processus d\u00e9marrent parfois avec plus de droits que n\u00e9cessaire. Je supprime les droits superflus imm\u00e9diatement apr\u00e8s l'\u00e9tape d\u00e9licate (<code>prctl()<\/code>\/libcap) et d\u00e9finis <code>no_new_privs<\/code>, dans la mesure du possible.<\/li>\n  <li><strong>Limiter la transmission h\u00e9r\u00e9ditaire :<\/strong> Je limite la taille des ensembles \u00ab Inheritable \u00bb et \u00ab Ambient \u00bb. Les processus enfants ne doivent pas ouvrir de nouvelles portes.<\/li>\n  <li><strong>V\u00e9rifier le pipeline de compilation et de d\u00e9ploiement :<\/strong> Je confirme que <code>security.capability<\/code> soit conserv\u00e9 et qu'aucune \u00e9tape de pr\u00e9paration (couches de conteneurs, NFS, analyseur d'artefacts) ne supprime les XATTR.<\/li>\n<\/ul>\n\n<h2>Aper\u00e7u des principales capacit\u00e9s et des principaux risques<\/h2>\n\n<p>Avant d'attribuer des privil\u00e8ges, je d\u00e9finis clairement ceux qui sont n\u00e9cessaires et j'\u00e9value leur niveau de risque. Le tableau suivant pr\u00e9sente des exemples typiques avec leurs effets et leur classification. Je prends toujours en compte des alternatives afin d'\u00e9viter d'accorder des droits trop \u00e9tendus. Notamment <strong>CAP_SYS_ADMIN<\/strong> Je les accorde avec une extr\u00eame parcimonie. Dans la mesure du possible, je remplace les privil\u00e8ges trop g\u00e9n\u00e9raux par des variantes cibl\u00e9es et restreintes.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Capacit\u00e9<\/th>\n      <th>Objectif<\/th>\n      <th>Risque<\/th>\n      <th>Exemple<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>CAP_NET_BIND_SERVICE<\/td>\n      <td>Se lier aux ports inf\u00e9rieurs \u00e0 1024<\/td>\n      <td>Faible \u00e0 moyen<\/td>\n      <td>Serveur web sur les ports 80\/443<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_BOOT<\/td>\n      <td>Red\u00e9marrer le syst\u00e8me<\/td>\n      <td>Haute<\/td>\n      <td>Red\u00e9marrage pr\u00e9vu<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_MODULE<\/td>\n      <td>Charger\/d\u00e9sinstaller des modules du noyau<\/td>\n      <td>Tr\u00e8s \u00e9lev\u00e9<\/td>\n      <td>Gestion des pilotes<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SYS_ADMIN<\/td>\n      <td>Op\u00e9rations d'administration vari\u00e9es<\/td>\n      <td>Tr\u00e8s \u00e9lev\u00e9<\/td>\n      <td>Diverses t\u00e2ches de maintenance<\/td>\n    <\/tr>\n    <tr>\n      <td>CAP_SETUID \/ CAP_SETGID<\/td>\n      <td>Changer l'UID\/GID<\/td>\n      <td>Moyen \u00e0 \u00e9lev\u00e9<\/td>\n      <td>Changement de fonction au sein du service<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux_capabilities_tech-office_4738.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<p>Au-del\u00e0 du classement, je suis en train d'\u00e9valuer <code>CAP_SYS_PTRACE<\/code> (d\u00e9bogage des processus), <code>CAP_NET_ADMIN<\/code> (param\u00e9trage du r\u00e9seau) et <code>CAP_DAC_OVERRIDE<\/code> (Contourner les restrictions d'acc\u00e8s aux fichiers) est une pratique extr\u00eamement critiquable. Il existe souvent des mod\u00e8les permettant d'\u00e9viter ces droits : des points de terminaison m\u00e9triques d\u00e9di\u00e9s plut\u00f4t que l'espionnage des processus, l'activation de sockets ou les redirection de ports plut\u00f4t que les droits \u00ab bind \u00bb, et des droits d'acc\u00e8s aux fichiers bien d\u00e9finis plut\u00f4t qu'un contournement g\u00e9n\u00e9ralis\u00e9 du DAC.<\/p>\n\n<h2>Renforcement dans les conteneurs et l'h\u00e9bergement<\/h2>\n\n<p>Dans les environnements multi-locataires, je consid\u00e8re que les comp\u00e9tences sont radicalement <strong>petit<\/strong> et j'emp\u00eache la transmission aux processus enfants. Les conteneurs en tirent un avantage consid\u00e9rable d\u00e8s que l'ensemble de d\u00e9limitation est bien d\u00e9fini. Je combine cela avec des espaces de syst\u00e8me de fichiers et de processus isol\u00e9s. Pour avoir une vue d'ensemble des approches d'isolation, cette introduction \u00e0 <a href=\"https:\/\/webhosting.de\/fr\/processus-isolation-hebergement-chroot-cagefs-conteneurs-jails-securite-comparaison\/\">Isolation des processus<\/a>. Ainsi, les services restent isol\u00e9s les uns des autres, m\u00eame si une application pr\u00e9sente des dysfonctionnements.<\/p>\n\n<p>Concr\u00e8tement, je configure par d\u00e9faut les conteneurs sur \u201e tout supprimer, ajouter de mani\u00e8re cibl\u00e9e \u201c : <code>--cap-drop=ALL --cap-add=NET_BIND_SERVICE<\/code> pour les services Web, pas de droits de montage, pas de <code>SYS_ADMIN<\/code>. Dans les environnements orchestr\u00e9s, je g\u00e8re le profil de mani\u00e8re centralis\u00e9e et je le v\u00e9rifie au niveau des politiques. Important : je ne me fie pas aux capacit\u00e9s des fichiers dans l'image, mais j'attribue des droits d'ex\u00e9cution dans l'orchestrateur \u2013 de mani\u00e8re reproductible et v\u00e9rifiable.<\/p>\n\n<h2>Interaction avec SELinux et AppArmor<\/h2>\n\n<p>Les capacit\u00e9s d\u00e9terminent ce qu'un processus est autoris\u00e9 \u00e0 faire, tandis que les profils MAC d\u00e9finissent ce \u00e0 quoi il a acc\u00e8s, et les deux s'harmonisent <strong>bien<\/strong>. Je d\u00e9finis les capacit\u00e9s de mani\u00e8re restrictive et laisse SELinux ou AppArmor limiter l'acc\u00e8s aux fichiers et aux sockets. Cela cr\u00e9e une protection par couches qui impose plusieurs obstacles aux exploits. Je trouve ici un comparatif rapide : <a href=\"https:\/\/webhosting.de\/fr\/selinux-vs-apparmor-securite-linux-renforcement-de-la-securite-des-serveurs-protection\/\">SELinux vs AppArmor<\/a>. Ainsi, un service compromis reste isol\u00e9 et peut causer moins de d\u00e9g\u00e2ts.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch2345.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Mise en pratique : proc\u00e9der \u00e9tape par \u00e9tape<\/h2>\n\n<p>Je commence par dresser un \u00e9tat des lieux de tous les services et de leurs <strong>Exigences<\/strong>. Ensuite, je supprime les binaires Set-UID superflus ou je les remplace par des capacit\u00e9s de fichier cibl\u00e9es. Je configure sudo de mani\u00e8re restrictive et je documente chaque entr\u00e9e. J'attribue des t\u00e2ches aux r\u00f4les et aux groupes et je limite les droits au strict minimum. Je proc\u00e8de ensuite \u00e0 des tests sous charge et v\u00e9rifie les entr\u00e9es des journaux pour d\u00e9tecter d\u2019\u00e9ventuels refus inattendus.<\/p>\n\n<p>Une petite liste de contr\u00f4le m'aide \u00e0 faire la transition :<\/p>\n<ul>\n  <li>Consigner par \u00e9crit les exigences pour chaque service (uniquement ce qui est r\u00e9ellement n\u00e9cessaire).<\/li>\n  <li>Recenser les droits sp\u00e9ciaux existants (<code>find \/ -perm -4000<\/code>, <code>getcap -r \/<\/code>).<\/li>\n  <li>Remplacer de mani\u00e8re cibl\u00e9e : supprimer le Set-UID, d\u00e9finir les capacit\u00e9s de fichier, supprimer les droits d\u00e8s que possible.<\/li>\n  <li>Fermer les h\u00e9ritages : r\u00e9duire l'ensemble de d\u00e9limitation, minimiser les \u00e9l\u00e9ments h\u00e9ritables\/ambiants.<\/li>\n  <li>S\u00e9curiser les profils Systemd\/conteneurs (<code>CapabilityBoundingSet= Ensemble de comp\u00e9tences<\/code>, <code>NoNewPrivileges=yes<\/code>).<\/li>\n  <li>Tester en conditions de charge, v\u00e9rifier les journaux et les entr\u00e9es d'audit, documenter les exceptions.<\/li>\n<\/ul>\n\n<h2>Surveillance, espaces de noms et audits continus<\/h2>\n\n<p>Je surveille les fichiers journaux, les alertes et les appels syst\u00e8me afin que toute action ind\u00e9sirable soit imm\u00e9diatement <strong>se faire remarquer<\/strong>. Je v\u00e9rifie r\u00e9guli\u00e8rement les modifications apport\u00e9es aux capacit\u00e9s, aux r\u00e8gles sudo et aux r\u00f4les. Lorsque cela s'av\u00e8re pertinent, je s\u00e9pare \u00e9galement les charges de travail \u00e0 l'aide des m\u00e9canismes d'isolation du noyau. Cet aper\u00e7u constitue un bon point de d\u00e9part pour <a href=\"https:\/\/webhosting.de\/fr\/server-context-isolation-namespaces-cgroups-hebergement-securite\/\">Espaces de noms et Cgroups<\/a>. Cela me permet de d\u00e9tecter rapidement les anomalies et de maintenir les lieux propres.<\/p>\n\n<p>Au quotidien, j'utilise des tests simples : <code>capsh --print<\/code> affiche l'ensemble actuel des comp\u00e9tences, <code>getpcaps<\/code> r\u00e9pertorie les droits de processus et dans <code>\/proc\/\/status<\/code> je lis <code>CapEff<\/code>, <code>CapPrm<\/code>, <code>CapBnd<\/code>. Avec <code>auditd<\/code> je suis les modifications apport\u00e9es au statut de la capacit\u00e9 (par exemple, r\u00e8gle sur <code>capset<\/code>), je mets en corr\u00e9lation les \u00e9v\u00e9nements avec les d\u00e9ploiements et je d\u00e9clenche des alertes lorsque des droits \u00e9tendus apparaissent soudainement. Pour les cas complexes, je m'aide de <code>strace -e capget,capset<\/code>, afin de mettre en \u00e9vidence les manipulations des droits.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-capabilities-8123.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Exemples pratiques concernant Systemd et les conteneurs<\/h2>\n\n<p>Je g\u00e8re de nombreux services sous forme d'unit\u00e9s systemd et j'y encapsule les droits :<\/p>\n<ul>\n  <li><code>CapabilityBoundingSet=CAP_NET_BIND_SERVICE<\/code> limite la fen\u00eatre des droits accessibles au strict n\u00e9cessaire.<\/li>\n  <li><code>AmbientCapabilities=CAP_NET_BIND_SERVICE<\/code> permet au service de se connecter aux ports 80\/443 sans capacit\u00e9s de fichiers.<\/li>\n  <li><code>NoNewPrivileges=yes<\/code> emp\u00eache toute extension ult\u00e9rieure des droits.<\/li>\n  <li><code>Utilisateur=<\/code>, <code>Groupe=<\/code>, <code>ProtectSystem=strict<\/code>, <code>PrivateTmp=yes<\/code> compl\u00e8tent l'isolation.<\/li>\n<\/ul>\n<p>Dans les conteneurs, je lance les processus de la mani\u00e8re la plus minimaliste possible : <code>docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE --read-only<\/code>. Pour les t\u00e2ches de courte dur\u00e9e, j'utilise les capacit\u00e9s d'ex\u00e9cution plut\u00f4t que les capacit\u00e9s de fichiers dans l'image, afin que les builds restent reproductibles et que les droits soient li\u00e9s \u00e0 l'environnement.<\/p>\n\n<h2>Exemples concrets de migrations tir\u00e9s de la pratique<\/h2>\n\n<ul>\n  <li><strong>ping sans Set-UID :<\/strong> Au lieu de <code>setuid root<\/code> je mets <code>setcap 'cap_net_raw=+ep' \/bin\/ping<\/code>. Cela permet \u00e0 tout utilisateur d'ouvrir des sockets ICMP sans disposer de tous les droits root. Je v\u00e9rifie r\u00e9guli\u00e8rement avec <code>getcap \/bin\/ping<\/code>, si l'attribut a \u00e9t\u00e9 conserv\u00e9.<\/li>\n  <li><strong>Service Web sur les ports 80\/443 :<\/strong> Je laisse mon service tourner en tant qu'utilisateur non privil\u00e9gi\u00e9 et je ne donne que <code>cap_net_bind_service<\/code>. Si le service est de toute fa\u00e7on plac\u00e9 derri\u00e8re un proxy inverse, je peux \u00e9galement le configurer sur les ports 80\/443 et utiliser un port \u00e9lev\u00e9 en interne \u2013 sans avoir besoin de comp\u00e9tences suppl\u00e9mentaires.<\/li>\n  <li><strong>Changement de partie au proc\u00e8s :<\/strong> Pour les outils qui ont besoin de droits \u00e9tendus pendant un court instant (par exemple, pour d\u00e9finir les niveaux de priorit\u00e9), je configure <code>cap_sys_nice<\/code>, effectue l'action rapidement, puis d\u00e9sactive la comp\u00e9tence. J'\u00e9vite de conserver des droits accrus de mani\u00e8re permanente.<\/li>\n<\/ul>\n\n<h2>Limites et alternatives<\/h2>\n\n<p>Toutes les situations ne n\u00e9cessitent pas le recours aux \u00ab Capabilities \u00bb. Il existe souvent des alternatives s\u00fbres pr\u00e9sentant moins de risques :<\/p>\n<ul>\n  <li><strong>Activation du socket :<\/strong> Le service d'initialisation (par exemple, systemd) ouvre des sockets privil\u00e9gi\u00e9es et les transmet au processus. Mon service n'a alors pas besoin de droits \u00ab bind \u00bb.<\/li>\n  <li><strong>Redirection de port :<\/strong> \u00c0 l'aide de r\u00e8gles de pare-feu, je redirige les ports 80\/443 vers un port \u00e9lev\u00e9. Le service reste sans privil\u00e8ges, le comportement du syst\u00e8me ne change pas.<\/li>\n  <li><strong>Ports \u00ab low \u00bb non privil\u00e9gi\u00e9s :<\/strong> Lorsque cela s'av\u00e8re appropri\u00e9, je peux relever le seuil pour les ports non privil\u00e9gi\u00e9s. Cela \u00e9largit toutefois la marge de man\u0153uvre pour tous les processus ; je p\u00e8se donc soigneusement le rapport entre risque et confort.<\/li>\n  <li><strong>De petits outils plut\u00f4t que des appareils polyvalents :<\/strong> Mieux vaut un petit binaire audit\u00e9 ne disposant que d'une seule fonctionnalit\u00e9 qu'un gros monolithe offrant un large \u00e9ventail de droits.<\/li>\n<\/ul>\n\n<h2>En bref<\/h2>\n\n<p>Avec <strong>Capacit\u00e9s de Linux<\/strong> Je divise les pouvoirs root en petits privil\u00e8ges faciles \u00e0 contr\u00f4ler. Les capacit\u00e9s de fichiers remplacent les binaires Set-UID risqu\u00e9s et limitent les cons\u00e9quences d'une attaque. Associ\u00e9es \u00e0 des r\u00e8gles sudo strictes, \u00e0 des r\u00f4les et \u00e0 des profils MAC, elles cr\u00e9ent une protection par couches aux limites clairement d\u00e9finies. Les ensembles \u00ab Bounding \u00bb et \u00ab Inheritable \u00bb limitent l\u2019h\u00e9ritage et maintiennent les processus sur la bonne voie. En proc\u00e9dant ainsi, on r\u00e9duit sensiblement les surfaces d\u2019attaque et on maintient la charge administrative \u00e0 un niveau raisonnable.<\/p>","protected":false},"excerpt":{"rendered":"<p>Les capacit\u00e9s Linux divisent les droits root en privil\u00e8ges granulaires. D\u00e9couvrez comment le mod\u00e8le des capacit\u00e9s renforce la s\u00e9curit\u00e9 de vos serveurs et permet la s\u00e9paration des privil\u00e8ges sur les syst\u00e8mes Linux.<\/p>","protected":false},"author":1,"featured_media":20277,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[794],"tags":[],"class_list":["post-20284","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit-computer_und_internet"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"97","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"Linux Capabilities","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20277","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/comments?post=20284"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/posts\/20284\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media\/20277"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/media?parent=20284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/categories?post=20284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/fr\/wp-json\/wp\/v2\/tags?post=20284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}