Un binaire possède des capabilities de fichier au lieu du bit setuid — est-il pour autant inoffensif ?
Réponse courte
Non. Les capabilities de fichier (posées avec setcap) découpent les pouvoirs de root en unités : un programme compromis avec une seule capability fait moins de dégâts qu'un programme setuid root, qui obtient toutes les capabilities. Mais moins n'est pas rien : CAP_SYS_ADMIN est surchargée et la page man déconseille de la choisir ; vérifiez laquelle est accordée et pourquoi.
Les ingénieurs voient souvent « setcap plutôt que setuid » comme une solution qui clôt le débat. Une bonne réponse reconnaît l'amélioration tout en examinant la capability précise.
Ce que changent les capabilities
Les man-pages Linux expliquent que les capabilities divisent les privilèges traditionnellement liés au superutilisateur en unités distinctes, activables et désactivables indépendamment. L'objectif affiché : si un programme détenant une ou plusieurs capabilities est compromis, les dégâts sont moindres que pour le même programme exécuté en root complet. Depuis Linux 2.6.24, on peut attacher des capabilities aux exécutables via les attributs étendus (setcap), alternative au bit setuid. Un processus lancé depuis un tel fichier n'obtient que les capabilities accordées, et non toutes comme un programme setuid root sans capabilities de fichier.
Pourquoi ce n'est pas inoffensif
Les capabilities n'ont pas toutes la même force. CAP_NET_BIND_SERVICE permet à un programme non privilégié d'écouter sur les ports inférieurs à 1024 : un droit étroit et raisonnable. CAP_SYS_ADMIN est différente : la page man avertit de ne pas la choisir si l'on peut l'éviter, car une grande part des contrôles y sont rattachés. Un binaire qui la détient, ou une faille dans un programme à capabilities, reste une voie d'élévation de privilèges ; les pentesters les énumèrent (getcap -r /).
Ce qu'attendent les recruteurs
« Rayon d'impact réduit, pas nul » — le moindre privilège appliqué capability par capability.
Questions de suivi probables
- Comment auditer un hôte Linux à la recherche de binaires portant des capabilities de fichier ?
- Pourquoi CAP_SYS_ADMIN est-elle jugée proche de root, et que choisir à la place ?
- Quand préférer CAP_NET_BIND_SERVICE à l'exécution d'un service en root ?