Linux capabilities: Se passer des commandes su et sudo

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 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 des systèmes. Ainsi, l’approche traditionnelle de l’administration Linux rompt le principe du moindre privilège qui garantit qu’un processus doit avoir juste 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 de Linux depuis 1998…

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 de Linux depuis 1998.

Cependant, pour différentes raisons, ce modèle n’a pas été largement utilisé. Premièrement, le modèle de capacité 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). Deuxièmement, les administrateurs système ne disposent pas d’un outil leur permettant de distribuer les privilèges aux utilisateurs Linux de manière fine (problème 2). La distribution de privilèges fine devrait donner aux administrateurs la possibilité de décider quels privilèges à accorder aux utilisateurs, quels programes (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). Troisièmement, Linux ne fournit pas d’outil permettant aux utilisateurs de Linux de connaître le privilège demandé par une application (problème 3). Quatrièmement, 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 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 de Linux afin de résoudre les problèmes techniques liés au stockage des privilèges dans les attributs étendus des exécutables. Cependant, Linux ne fournit pas de solutions pour gérer les problèmes 2 et 3.

Le module RAR (Root As Role) implémente une approche basée sur les rôles pour distribuer les privileges Linux aux utilisateurs. Il fournit une solution au problème 2. Notre module contient 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 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. Stocker des privilèges dans des attributs étendus pose de nombreux problèmes. Notre module permet d’attribuer les privileges 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 notre module. 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 (GPLv3) et des exemples plus complets sont disponibles sur la page GitHub du projet.

Commentaires :
voir le flux atom
ouvrir dans le navigateur

(Source: LinuxFr.org : les dépêches)
Logo