URL: https://linuxfr.org/news/linux-capabilities-se-passer-des-commandes-su-et-sudo Title: Linux capabilities : se passer des commandes su et sudo Authors: samerw BenoĂźt Sibaud, ZeroHeure, Pierre Jarillon, Davy Defaud et bubarđŠ„ Date: 2018ćčŽ09æ05æ„T15:03:42+02:00 License: CC By-SA Tags: rootasrole, capabilities, su et sudo Score: 59 Nous proposons un module qui permet de se passer des commandes `su` et `sudo`. Lâavantage de notre module est quâil permet de contrĂŽler la liste des privilĂšges donnĂ©s aux programmes. Traditionnellement, lâadministration des systĂšmes GNU/Linux repose sur lâexistence dâun seul utilisateur puissant (appelĂ© superâutilisateur) qui dĂ©tient Ă lui seul la liste complĂšte des privilĂšges du systĂšme. Cette vision a Ă©tĂ© critiquĂ©e car tous les programmes exĂ©cutĂ©s dans le contexte du superâutilisateur obtiennent beaucoup plus de privilĂšges quâils nâen ont besoin. Par exemple, `tcpdump` demande uniquement le privilĂšge `cap_net_raw` pour sâexĂ©cuter. Cependant, en lâexĂ©cutant dans le contexte de superâutilisateur, `tcpdump` obtient la liste complĂšte des privilĂšges du systĂšme. Ainsi, lâapproche traditionnelle de lâadministration GNU/Linux rompt le principe du moindre privilĂšge, qui garantit quâun processus doit juste avoir les privilĂšges nĂ©cessaires pour effectuer son travail. Un attaquant pourrait exploiter les vulnĂ©rabilitĂ©s de `tcpdump` afin de compromettre la sĂ©curitĂ© du systĂšme. Il existe cependant une autre voie, non officielle, mais intĂ©grĂ©e au noyau Linux depuis 1998... ---- [RAR module](https://github.com/SamerW/RootAsRole/) ---- Un brouillon POSIX (POSIX draft 1003.1e) avait Ă©tĂ© proposĂ© afin de dĂ©finir un modĂšle qui permet de donner aux processus uniquement les privilĂšges de superâutilisateur dont ils ont besoin. La proposition dĂ©finit pour chaque processus trois ensembles de _bitmaps_ appelĂ©s _Inheritable_ (i), _Permitted_ (p) et _Effective_ (e). Ce modĂšle nâa pas Ă©tĂ© adoptĂ© officiellement, mais il a Ă©tĂ© intĂ©grĂ© au noyau Linux depuis 1998. Cependant, pour diffĂ©rentes raisons, ce modĂšle nâa pas Ă©tĂ© largement utilisĂ© : 1. PremiĂšrement, le modĂšle de capacitĂ© de Linux prĂ©sente diffĂ©rents problĂšmes techniques en raison de lâutilisation dâattributs Ă©tendus pour stocker les privilĂšges dans les exĂ©cutables (problĂšme 1). 2. DeuxiĂšmement, les administrateurs de systĂšmes GNU/Linux ne disposent pas dâun outil leur permettant de distribuer les privilĂšges aux utilisateurs de maniĂšre fine (problĂšme 2). La distribution fine de privilĂšges devrait donner aux administrateurs la possibilitĂ© de dĂ©cider quels privilĂšges accorder aux utilisateurs, quels programmes (par exemple, `tcpdump`) peuvent utiliser ces privilĂšges et sur quelles ressources ces privilĂšges peuvent ĂȘtre appliquĂ©s (par exemple, interface rĂ©seau _eth0_). 3. TroisiĂšmement, GNU/Linux ne fournit pas dâoutil permettant aux utilisateurs de connaĂźtre le privilĂšge demandĂ© par une application (problĂšme 3). 4. QuatriĂšmement, GNU/Linux est livrĂ© avec des commandes de base qui ne sont pas compatibles avec des privilĂšges, tels que la commande `passwd` (problĂšme 4). En consĂ©quence, la majoritĂ© des utilisateurs de GNU/Linux utilisent toujours les commandes `su` et `sudo` pour exĂ©cuter des applications privilĂ©giĂ©es, car le modĂšle superâutilisateur prĂ©sente lâavantage dâĂȘtre facile Ă utiliser. RĂ©cemment, un nouvel ensemble de privilĂšges appelĂ© _Ambient_ a Ă©tĂ© intĂ©grĂ© au noyau Linux afin de rĂ©soudre les problĂšmes techniques liĂ©s au stockage des privilĂšges dans les attributs Ă©tendus des exĂ©cutables. Cependant, le systĂšme GNU/Linux ne fournit pas de solutions pour gĂ©rer les problĂšmes deux et trois. Le module RAR (_Root As Role_) implĂ©mente une approche basĂ©e sur les rĂŽles pour distribuer les privilĂšges aux utilisateurs. Il fournit une solution au problĂšme deux : notre module est livrĂ© avec un outil appelĂ© `sr` (_switch role_) qui permet aux utilisateurs de contrĂŽler la liste des privilĂšges quâils accordent aux programmes. Ainsi, avec notre module, les utilisateurs de GNU/Linux peuvent cesser dâutiliser les commandes `sudo` et `su`, qui ne permettent pas de contrĂŽler la liste des privilĂšges Ă donner aux programmes. Il existe dĂ©jĂ des outils permettant de contrĂŽler la liste des privilĂšges Ă attribuer aux programmes tels que `setcap` et le module `pam_cap`. Cependant, ces outils nĂ©cessitent lâutilisation dâattributs Ă©tendus pour stocker les privilĂšges. Or stocker des privilĂšges dans des attributs Ă©tendus pose de nombreux problĂšmes. Notre module permet dâattribuer les privilĂšges Linux sans avoir besoin de les stocker dans les attributs Ă©tendus des fichiers exĂ©cutables. GrĂące Ă ce module, les administrateurs peuvent regrouper les privilĂšges Linux dans des rĂŽles et les donner Ă leurs utilisateurs. Pour des raisons de sĂ©curitĂ©, les utilisateurs nâobtiennent pas les rĂŽles attribuĂ©s par dĂ©faut, ils doivent les activer Ă lâaide de la commande `sr` (changer de rĂŽle). Notre module est compatible avec `pam_cap.so`, les administrateurs peuvent donc continuer Ă utiliser `pam_cap.so` avec lui. ConcrĂštement, notre module permet de respecter le principe du moindre privilĂšge en donnant aux utilisateurs la possibilitĂ© de contrĂŽler la liste des privilĂšges quâils accordent Ă leurs programmes. Le code (GPL v3) et des exemples plus complets sont disponibles sur la [page GitHub du projet](https://github.com/SamerW/RootAsRole/).