Comment utiliser Run0 sous Linux

Une photographie montrant un gros plan de l'écran d'un ordinateur portable.

Run0 est un programme d’escalade de privilèges nouveau et innovant pour les distributions Linux basées sur Systemd. Il fournit une alternative légère et “sans configuration” aux applications d’escalade traditionnelles telles que sudo et doas. Ici, nous vous montrons les bases de l’utilisation de Run0 pour escalader des commandes pour votre système Linux.

Table des matières

  • Comment exécuter des programmes en tant qu’utilisateur différent
  • Comment passer à l’interface shell d’un utilisateur différent
  • Comment personnaliser la session Run0 actuelle
  • Comment regrouper les sessions Run0
  • Comment exécuter des commandes sur des conteneurs Systemd en utilisant Run0

Avant cela, vous voudrez peut-être découvrir ce qu’est Run0 et comment il diffère de sudo.

Comment exécuter des programmes en tant qu’utilisateur différent

L’un des usages les plus courants des applications d’escalade de privilèges est d’exécuter des commandes en tant qu’utilisateur root. À cet égard, accéder à l’utilisateur root dans Run0 nécessite d’ajouter run0 devant la commande que vous souhaitez exécuter. Par exemple, la commande suivante crée un nouveau dossier dans un répertoire accessible uniquement par root :

run0 mkdir/etc/maketecheasier

Cela fera apparaître soit une invite de mot de passe CLI, soit une petite fenêtre GUI demandant le mot de passe de votre utilisateur actuel.

Une capture d'écran montrant l'invite de mot de passe pour Run0.

Tout comme sudo et doas, Run0 peut également passer à un utilisateur non-root lors de l’exécution de commandes. Pour ce faire, ajoutez le drapeau --user suivi du nom de l’utilisateur avec lequel vous souhaitez exécuter la commande :

run0 --user=alice /home/alice/alice-program.sh

Fournissez le mot de passe de l’utilisateur vers lequel vous vous déplacez, puis appuyez sur Entrée.

Comment passer à l’interface shell d’un utilisateur différent

Une autre partie clé d’une application d’escalade de privilèges est sa capacité à vous faire passer à un shell root. Cela vous permet d’interagir avec votre système en tant qu’utilisateur root et d’exécuter des commandes plus complexes depuis la CLI.

Dans Run0, vous pouvez le faire en exécutant le programme sans arguments supplémentaires.

Tout comme avec l’exécution de programmes en tant que root, il est également possible d’utiliser Run0 avec le drapeau --user pour démarrer une session shell en tant qu’utilisateur spécifique :

run0 --user=alice

De plus, run0 vous permet de créer des sessions shell avec des permissions de groupe temporaires pour les utilisateurs non-root. Cela est utile si vous souhaitez accéder à des dossiers qui sont verrouillés derrière un certain utilisateur et groupe sans passer à root.

Par exemple, la commande suivante accorde à l’utilisateur “alice” un accès temporaire au groupe “www-data” :

run0 --user=alice --group=www-data

Vous pouvez également utiliser le drapeau --chdir pour forcer un changement de répertoire lors du passage à une nouvelle session shell :

run0 --user=alice --chdir=/home/alice/Documents

Bon à savoir : apprenez-en plus sur votre machine Linux en explorant comment changer récursivement les permissions des fichiers dans votre système de fichiers.

Comment personnaliser la session Run0 actuelle

Le principal argument de vente de Run0 est qu’il n’utilise pas setuid (SUID) pour gérer les actions superutilisateur. Au lieu de cela, il s’appuie sur systemd-run qui crée des pseudo-TTY isolés pour exécuter des commandes en tant que root.

Une conséquence de cette approche est que Systemd traite chaque shell Run0 comme une unité distincte fonctionnant sous le gestionnaire de services. Cela vous permet de personnaliser votre processus de shell root, contrairement aux applications d’escalade de privilèges traditionnelles.

Pour ajouter une étiquette à votre shell root, utilisez le drapeau --unit suivi du nom que vous souhaitez utiliser :

run0 --unit=maketecheasier

Vous pouvez également ajouter une description personnalisée à votre shell root en ajoutant le drapeau --description :

run0 --unit=maketecheasier --description="bonjour, monde !"

Vérifiez que vous avez correctement appliqué vos détails en listant le nom personnalisé de votre shell root à l’aide de systemctl :

systemctl list-units maketecheasier.service

Un terminal montrant les détails de l'unité Systemd personnalisée.

Par défaut, Run0 change la couleur de l’arrière-plan de votre shell root en rouge. Bien que cela soit un indicateur visuel utile, cela peut être distrayant si vous utilisez un thème clair sur votre système.

Pour changer cela, utilisez le drapeau --background suivi d’une valeur entre 40-49 :

run0 --unit=maketecheasier --background=42

Enfin, vous pouvez également ajuster le “niveau de gentillesse” de votre shell root. C’est une valeur entre -20 et 19 qui détermine si votre noyau priorisera votre processus par rapport aux autres.

Pour donner à votre shell root la plus haute priorité, utilisez le drapeau --nice avec la valeur “-20” :

run0 --nice=-20

Remarque : le drapeau --nice fonctionne également pour les commandes Run0 individuelles. Par exemple, vous pouvez utiliser run0 --nice=-20 vim pour exécuter Vim avec une priorité CPU plus élevée.

Comment regrouper les sessions Run0

En plus de pouvoir personnaliser chaque shell root Linux, vous pouvez également utiliser Run0 pour les regrouper dans une tranche Systemd. C’est une construction spéciale qui permet à votre machine d’ajuster la demande de ressources pour les processus sans affecter le reste de votre système.

Pour créer un shell root dans une tranche différente, exécutez le drapeau --slice suivi du nom de la tranche vers laquelle vous souhaitez vous déplacer :

run0 --slice=maketecheasier

Remarque : vous pouvez fournir un nouveau nom sur le drapeau --slice pour créer une nouvelle tranche Systemd.

Confirmez que votre nouvelle session s’exécute sous votre nouvelle tranche en listant les processus à l’intérieur :

systemctl status maketecheasier.slice

Un terminal montrant les détails de la tranche Systemd personnalisée.

Vous pouvez également utiliser le drapeau --slice-inherit pour regrouper votre nouvelle tranche avec la tranche dont Run0 provient. Cela est utile si vous avez déjà regroupé vos shells dans leurs tranches respectives et que vous souhaitez simplement ajouter un nouveau shell :

run0 --slice=maketecheasier --slice-inherit

Comment exécuter des commandes sur des conteneurs Systemd en utilisant Run0

Systemd-nspawn est un programme spécial qui peut créer et gérer des conteneurs Linux légers similaires à Docker. Faisant partie de la suite Systemd, vous pouvez également utiliser Run0 pour exécuter des commandes dans vos conteneurs nspawn depuis votre machine hôte.

Commencez par lister les conteneurs Systemd-nspawn disponibles dans votre système :

machinectl list

Un terminal montrant une liste des conteneurs Systemd-nspawn disponibles.

Exécutez la commande suivante pour créer un dossier dans le répertoire racine de votre conteneur :

run0 run0 --machine=maketecheasier --user=root mkdir/hello-world

Remarque : il y a actuellement un bug dans Run0 où il échoue à élever les privilèges lors de l’exécution avec le drapeau --machine. Vous pouvez corriger cela en ajoutant une seconde commande run0 pour forcer une élévation de privilèges.

Il est également possible de passer à votre shell root de conteneur en utilisant Run0 :

run0 run0 --machine=maketecheasier --user=root

Confirmez que vous exécutez maintenant à l’intérieur de votre conteneur en imprimant le nom d’hôte de votre session terminal :

echo$HOSTNAME

Un terminal montrant le processus de passage du système local au conteneur Systemd-nspawn.

Apprendre à utiliser Run0 pour exécuter et gérer des commandes root sous Linux n’est que la pointe de l’iceberg en ce qui concerne les applications d’escalade de privilèges. Plongez dans le monde complexe en examinant les différences entre su, sudo et sudo -s.

Crédit photo : Xavier Cee via Unsplash. Toutes les modifications et captures d’écran par Ramces Red.