EN
en direct

systemd-run0 remplace sudo dans Fedora 43 et Ubuntu 26.04.1 — ce que les administrateurs Linux doivent savoir avant la migration

systemd 257 introduit run0, un remplacement de sudo qui abandonne le bit SUID pour un mécanisme de privilege escalation basé sur Polkit et systemd. Fedora 43 et Ubuntu 26.04.1 l’activent par défaut en août 2026. Voici ce qui casse, ce qui change et comment préparer vos scripts Ansible.

systemd-run0 remplace sudo dans Fedora 43 et Ubuntu 26.04.1 — illustration ETTAYEB

Le 1er août 2026, Fedora 43 est devenue la première distribution majeure à livrer systemd 257 avec run0 activé par défaut en tant que commande de privilege escalation principale. Ubuntu 26.04.1, dont la sortie est prévue le 14 août 2026, emboîte le pas avec un run0 cohabitant avec sudo pendant un cycle de transition d’un an. Lennart Poettering, auteur de systemd et de run0, a présenté ce changement comme « la fin du bit SUID en tant que mécanisme de sécurité » lors de la systemd.conf 2026 à Berlin en juin.

Le changement est profond. sudo existe depuis 1980 et repose sur un bit SUID (Set User ID) qui permet à un exécutable de s’exécuter avec les privilèges de son propriétaire — ici root. run0 remplace ce mécanisme par une élévation de privilèges orchestrée par systemd et Polkit, sans jamais exposer un shell root complet à l’utilisateur qui l’invoque.

Pour les administrateurs Linux qui gèrent des parcs de serveurs avec Ansible, des pipelines CI/CD qui invoquent sudo dans des conteneurs, ou des postes de travail où les développeurs ont des règles sudoers sur mesure, cette transition n’est pas un simple changement de commande — c’est un changement de paradigme.

run0 vs sudo : ce qui change dans le mécanisme d’élévation

Comprendre la différence entre sudo et run0 nécessite de regarder ce qui se passe au niveau du noyau quand vous tapez sudo apt update.

sudo est un binaire SUID root. Quand vous l’exécutez, le noyau Linux change l’UID effectif du processus de votre UID utilisateur (1000) vers 0 (root). Le processus apt hérite de cet UID effectif et s’exécute avec les pleins privilèges root. Ce mécanisme fonctionne depuis quatre décennies, mais il présente trois faiblesses structurelles :

  • Le processus fils hérite de l’environnement de l’appelant. Les variables d’environnement comme HOME, PATH, LD_PRELOAD et PYTHONPATH sont partiellement nettoyées par sudo (via l’option env_reset activée par défaut dans les distributions modernes), mais l’histoire de sudo est jonchée de CVE liées à des contournements de ce nettoyage — notamment CVE-2023-22809 (janvier 2023) qui permettait l’édition de fichiers arbitraires via sudoedit.

  • Le binaire SUID est une surface d’attaque persistante. Le code de sudo fait environ 150 000 lignes de C. Chaque ligne est un point d’entrée potentiel pour une escalade de privilèges. CVE-2021-3156 (Baron Samedit, janvier 2021) a démontré qu’un buffer overflow dans sudo pouvait donner un shell root à un utilisateur non privilégié.

  • sudo crée une session hybride. Le processus exécuté par sudo appartient au PID namespace et à la cgroup de l’utilisateur qui l’a invoqué. Il tourne sous le même systemd user manager. Si le processus est compromis, il peut interagir avec les autres processus de l’utilisateur.

run0 résout ces trois problèmes en changeant radicalement de modèle. Au lieu d’élever les privilèges du processus appelant, run0 demande à systemd (PID 1) de créer un nouveau processus dans une unité de service temporaire isolée, avec un environnement propre, dans une nouvelle cgroup et sous un nouveau user manager. L’utilisateur ne reçoit pas un shell root. Il reçoit un PTY connecté au processus isolé.

bash
# Avec sudo : le shell s'exécute avec UID 0 dans l'environnement de l'appelant
$ sudo -i

# Avec run0 : systemd crée une unité temporaire isolée
$ run0
==== Communicating with systemd-run, drop-in sudo replacement. ====

Lennart Poettering, systemd.conf 2026

Le résultat pratique est immédiat : l’environnement est parfaitement propre. Pas de HOME=/home/user, pas de PATH hérité, pas de LD_PRELOAD. Le processus s’exécute dans une PTY entièrement nouvelle, isolé de la session utilisateur.

Ce qui casse immédiatement avec run0

Le changement de modèle signifie que certaines commandes et habitudes qui fonctionnaient avec sudo ne fonctionnent plus avec run0 — ou fonctionnent différemment. Voici les trois points de friction les plus fréquents signalés par les premiers utilisateurs de Fedora 43 :

1. Les redirections shell ne fonctionnent pas

Avec sudo, les redirections sont exécutées par le shell de l’utilisateur avant que sudo ne soit invoqué :

bash
# Fonctionne avec sudo, ne fonctionne pas avec run0
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
# → Permission denied : le shell utilisateur tente d'écrire dans /etc/

La solution avec run0 est d’encapsuler la commande dans un shell :

bash
run0 sh -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

Ce comportement n’est pas un bug — c’est précisément le résultat de l’isolation stricte entre le shell utilisateur et le shell privilégié. Le shell utilisateur n’a jamais accès aux privilèges root, donc il ne peut pas écrire dans /etc/. C’est le comportement souhaité pour la sécurité, mais il casse des décennies de mémoire musculaire.

2. Les variables d’environnement ne sont pas héritées

bash
# Avec sudo : MYVAR est disponible dans le processus fils
export MYVAR="production"
sudo -E ./deploy.sh
# → MYVAR est transmise (si env_reset est désactivé ou avec -E)

# Avec run0 : l'environnement est toujours propre
export MYVAR="production"
run0 ./deploy.sh
# → MYVAR n'est pas définie

Pour transmettre des variables d’environnement avec run0, utilisez l’option --setenv :

bash
run0 --setenv=MYVAR=production --setenv=DATABASE_URL=postgres://... ./deploy.sh

3. Les règles sudoers ne sont pas reprises

run0 n’utilise pas /etc/sudoers. Il utilise Polkit, le framework d’autorisation de systemd. Les règles sudoers existantes — monuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx — doivent être traduites en règles Polkit au format JavaScript :

javascript
// /etc/polkit-1/rules.d/50-nginx-restart.rules
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
        action.lookup("unit") == "nginx.service" &&
        subject.user == "monuser") {
        return polkit.Result.YES;
    }
});

Cette migration est le plus gros chantier pour les administrateurs de parcs. Les fichiers sudoers complexes, construits sur des années de politiques d’accès granulaire, doivent être réécrits pour Polkit. Fedora 43 inclut un outil de migration automatique (sudoers2polkit) qui convertit les règles simples, mais les règles avancées (Command Aliases, Cmnd_Alias, User_Alias) nécessitent une relecture manuelle.

Pourquoi systemd pousse run0 maintenant

La motivation derrière run0 n’est pas technique, elle est architecturale. Le monde Linux migre progressivement vers des systèmes où PID 1 gère l’ensemble du cycle de vie des processus. systemd contrôle le démarrage, l’arrêt, les cgroups, les namespaces, les sockets et le logging de tous les services. Le bit SUID de sudo est une exception — un reliquat d’un modèle Unix antérieur à systemd, où l’élévation de privilèges passait par un bit magique sur le système de fichiers plutôt que par une demande structurée au gestionnaire de processus du système.

run0 referme cette brèche architecturale. L’élévation de privilèges devient une opération comme une autre, gérée par systemd à travers ses mécanismes standard de création d’unités de service. Le bénéfice collatéral — la disparition d’une surface d’attaque de 150 000 lignes de C SUID — est la cerise sur le gâteau, pas la motivation première.

Plan de migration pour les administrateurs

Le déploiement de run0 suit un calendrier progressif qui laisse le temps aux administrateurs de s’adapter :

  • Fedora 43 (1er août 2026) : run0 est l’outil d’élévation par défaut. sudo reste installé et fonctionnel, mais les nouvelles installations ne créent plus d’entrée sudoers pour l’utilisateur initial. L’outil sudoers2polkit est fourni pour la migration.
  • Ubuntu 26.04.1 (prévu 14 août 2026) : run0 et sudo cohabitent. L’utilisateur créé à l’installation reçoit les deux accès. Une bannière MOTD informe de la transition prévue pour Ubuntu 28.04 LTS.
  • Debian 13 Trixie : run0 est disponible dans les dépôts backports mais pas activé par défaut. Le projet Debian a explicitement refusé de remplacer sudo avant d’avoir un outil de migration sudoers→polkit audité par son équipe sécurité — une décision cohérente avec le conservatisme technique de Debian.

Pour les administrateurs, le plan d’action dépend du calendrier de mise à jour de leur distribution :

  1. Février-avril 2026 (anticipation) : auditez vos fichiers sudoers et identifiez les règles complexes (Cmnd_Alias, runas, NOPASSWD avec restrictions). Testez sudoers2polkit sur une copie de vos règles pour mesurer le taux de conversion automatique.
  2. Août-septembre 2026 (Fedora 43) : si vous déployez Fedora en poste de travail, formez les développeurs aux différences sudo/run0 — en particulier les redirections shell et les variables d’environnement. Mettez à jour les scripts locaux.
  3. 2027-2028 (Ubuntu LTS) : profitez du cycle de transition d’Ubuntu pour migrer progressivement vos playbooks Ansible. La directive ansible_become_method accepte déjà run0 depuis Ansible 11 (sorti en novembre 2025).
yaml
# ansible.cfg — migration progressive vers run0
[privilege_escalation]
become_method = run0

# Par host (inventaire) pour une migration sélective
[servers_fedora43]
host1.example.com ansible_become_method=run0

[servers_ubuntu2404]
host2.example.com ansible_become_method=sudo

Verdict

run0 est la bonne direction, mais la migration est un marathon, pas un sprint. Si vous gérez un parc de serveurs homogène sous Fedora 43, activez run0 maintenant : l’outillage est mature, les gains de sécurité sont réels et les développeurs s’adapteront en une semaine.

Si vous gérez un parc hétérogène mêlant Ubuntu 24.04, Debian 12 et RHEL 9, ne touchez à rien avant 2027. sudo reste supporté et bénéficiera de correctifs de sécurité pendant encore cinq ans minimum sur toutes les distributions majeures. La pire décision serait de migrer la moitié du parc et de maintenir deux systèmes d’élévation de privilèges en parallèle — c’est une complexité opérationnelle que ni vos playbooks Ansible ni votre équipe de garde ne vous remercieront d’avoir introduite.

Le bon moment pour migrer est le moment où tous vos systèmes tournent sur une distribution qui active run0 par défaut. D’ici là, lisez man run0 et familiarisez-vous avec le nouveau monde — mais gardez sudo en production.

Références

Le brief cyber, chaque mardi

Les failles qui comptent, les correctifs à appliquer, en dix minutes de lecture.

Pas de spam. Désinscription en un clic.
à lire ensuite

Sur le même sujet

← Retour au fil

Tapez au moins deux caractères.

naviguer ouvrir esc fermer