Linux : run0 ou la fin programmée de sudo ?

Pendant des décennies, la commande sudo a été la clé de voûte de l’administration des systèmes Unix et Linux, un passage obligé pour les administrateurs souhaitant effectuer des opérations privilégiées. Cependant, un vent de changement souffle sur l’écosystème Linux. Des annonces récentes et des décisions majeures de la part de distributions influentes comme Fedora et Ubuntu laissent entrevoir la disparition programmée de sudo au profit de nouvelles alternatives plus modernes et sécurisées. Le leader de cette révolution n’est autre que run0, un outil intégré à systemd qui promet de redéfinir notre rapport aux privilèges système.

Le talon d’Achille de sudo: une question de conception

Pour comprendre ce changement, il faut revenir sur la faille fondamentale de sudo. Depuis sa création dans les années 1980, cette commande repose sur un mécanisme ancien et risqué : le bit setuid.

Le problème est que sudo est un binaire appartenant à root avec le bit setuid activé (rws). Cela signifie qu’un utilisateur standard, en exécutant sudo, voit le processus s’exécuter avec les droits de root. Si le binaire présente des défauts, un attaquant peut injecter une exploitation qui sera alors exécutée avec les droits root.

La surface d’attaque de sudo est également pointée du doigt. Avec plus de 100 000 lignes de code (presque 150 000 lignes, ce qui peut étonner car basiquement sudo effectue un fork+exec, fonctionnalité qui peut s’écrire en moins de 100 lignes de code en langage C), la marge d’erreur est considérable. Cet héritage des débuts d’Unix est aujourd’hui perçu par de nombreux experts comme une anomalie : « SUID est un concept très étrange. Dans mon monde idéal, nous aurions un système d’exploitation qui n’utilise pas du tout SUID ».

run0: la réponse de systemd

C’est face à ces constats que Lennart Poettering, le créateur de systemd, a dévoilé run0 avec la version 256 de systemd, en 2024, avec une déclaration choc : « Disponible bientôt dans votre distribution préférée, avec 42 % de philosophie Unix en moins ». Il faut dire que systemd est une usine à gaz décriée (certaines distributions comme Devuan ou Slackware l’évitent comme la peste, mais il faut bien reconnaître qu’il a phagocyté tout l’éco-système Linux), qui n’a de cesse de faire s’éloigner tout le monde de la philosophie initiale et saine d’Unix : KISS (Keep it simple, stupid). Ainsi, après avoir éjecté le vénérable init en tant que processus de PID 1, cela fait déjà belle lurette que l’infâme systemd s’est installé comme PID 1 sur la majorité des distributions.

Mais revenons en à run0.

run0 n’est pas un simple clone, mais un changement de paradigme. Contrairement à sudo, il n’utilise pas le bit setuid. Le fonctionnement est fondamentalement différent :

  • Au lieu d’élever les privilèges du processus actuel, run0 demande au gestionnaire de services systemd (systemd-run) de créer une nouvelle unité de service pour exécuter la commande en tant que root.
  • L’authentification et l’autorisation sont déléguées à Polkit, un service système dédié, au lieu d’être gérées par le fichier sudoers.

En isolant la session privilégiée dans un conteneur propre, run0 supprime les risques liés à l’héritage de l’environnement utilisateur, un vecteur d’attaque classique contre sudo. La documentation indique que run0 « exécute des processus dans un pseudo-terminal (PTY) bifurqué, l’isolant. Les variables d’environnement, les affectations cgroup, le contexte de sécurité et les descripteurs de fichier sont tous absents de ce nouveau contexte ».

Pour une meilleure expérience utilisateur, run0 colore même le fond du terminal en rouge pour signaler visuellement que l’utilisateur est en session privilégiée.

Les grandes distributions passent à l’action

L’adoption de cette nouvelle approche est en marche. La version la plus récente d’Ubuntu (26.04 LTS) et Fedora 44 intègrent nativement run0, car elles embarquent une version de systemd supérieure ou égale à la 256. Cette disponibilité marque un tournant : run0 passe du statut de curiosité technique à celui d’outil prêt pour une utilisation massive.

Cependant, le mouvement vers la fin de sudo ne se limite pas à son remplacement par run0. Canonical, la société derrière Ubuntu, a choisi une voie complémentaire en faisant de sudo-rs l’implémentation par défaut de sudo dans ses versions les plus récentes. sudo-rs est une réécriture complète de sudo en Rust, un langage reconnu pour sa sécurité mémoire. Il a pour ambition d’éliminer les vulnérabilités de corruption de mémoire qui sont « le fonds de commerce de l’escalade de privilèges locaux ». Ce choix n’est pas anodin : il démontre que l’industrie est prête à abandonner l’implémentation historique de sudo pour adopter des alternatives plus robustes.

Un futur sans sudo ? Pas si simple

Bien que la tendance soit claire, la disparition de sudo n’est pas pour demain et ne se fera pas sans heurts.

Plusieurs défis subsistent :

  • Absence de remplacement direct : run0 n’est pas un remplacement fonctionnel complet. Par exemple, son mode de fonctionnement avec Polkit ne permet pas de reproduire le comportement de sudo qui consiste à exécuter certaines commandes sans mot de passe. Il ne peut pas non plus restreindre les variables d’environnement de la même manière que sudo.
  • Incompatibilités et cas d’usage : Pour l’instant, run0 est avant tout conçu pour les sessions administratives interactives. Il ne convient pas aux tâches automatisées, comme les scripts s’exécutant dans des crons, où il refuse de fonctionner par manque de terminal interactif. Pour ces cas, sudo reste l’outil de référence.
  • Problèmes de maturité : Des retours d’utilisateurs, notamment sur Fedora, font état de problèmes. Par exemple, la commande run0 dnf update -y ne fonctionnerait pas comme prévu. Il est probable que run0 connaisse encore des problèmes de jeunesse et des incompatibilités avec certains outils.
  • Le spectre de systemd : Une critique récurrente est que run0 n’est qu’une « fine couche » sur systemd et Polkit, des logiciels dont la complexité et la taille combinée (plus d’un million de lignes de code) dépassent de loin celle de sudo (129 000 lignes). « Il est difficile de raisonner sur la quantité de code qui fait réellement partie de la surface d’attaque. Il est possible que la surface d’attaque de run0 dans les cas d’usage courants soit plus grande que celle de sudo« .

La « disparition programmée » de sudo est en réalité un processus de maturation et de diversification. L’ère où sudo était la seule option fiable touche à sa fin. Les utilisateurs de Linux auront désormais le choix entre run0 pour une sécurité renforcée lors des sessions interactives, sudo-rs pour une implémentation mémoire-sûre de l’existant, et peut-être à l’avenir d’autres solutions comme des approches radicales d’isolation (Qubes OS). Il est encore trop tôt pour déclarer sudo obsolète, mais il n’a jamais été autant menacé. Le paysage de l’administration Linux se diversifie, promettant un avenir plus sécurisé, mais aussi plus fragmenté, où l’administrateur devra faire des choix éclairés.

Pour aller plus loin :

2 réflexions sur « Linux : run0 ou la fin programmée de sudo ? »

  1. RonaldoT

    systemd est à la fois indispensable (car orienté pro) et pénible (car usine à gaz effectivement, et éloignant de la philosophie Unix)

    Wait and see …

    Répondre
    1. Valérian Auteur de l’article

      Sans compter que systemd est vraiment très lourd. Il suffit de faire tourner une distribution comme Devuan (Debian sans systemd) sur une vieille machine pour se rendre compte à quel point systemd est lourd en consommation de ressources. Avec Devuan une vieille machine fait tourner la version la plus récente de gnome à vitesse grand V !

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *