Lennart Pottering a introduit l'utilitaire run0, qui vous permet d'exécuter des processus sous les identifiants d'autres utilisateurs. Le nouvel utilitaire se positionne comme un remplacement plus sécurisé du programme sudo, implémenté en tant que module complémentaire de la commande systemd-run et vous permettant de vous débarrasser de l'utilisation d'un fichier exécutable avec l'indicateur SUID. L'utilitaire run0 est inclus dans la version candidate de systemd 256.
Il est à noter que la modification de l'identifiant à l'aide de l'indicateur SUID dans sudo comporte des risques supplémentaires du fait que le processus SUID hérite d'un contexte d'exécution qui inclut de nombreuses propriétés contrôlées par un utilisateur non privilégié, telles que des variables d'environnement, des descripteurs de fichiers, des options du planificateur et liaisons de groupe de contrôle. Certaines de ces propriétés sont automatiquement effacées pour les processus SUID par le noyau, et d'autres sont effacées par l'application elle-même. Cependant, des vulnérabilités continuent d'être régulièrement découvertes dans des programmes SUID complexes tels que sudo en raison d'une manipulation imprudente de données externes qui peuvent être influencées par un utilisateur non privilégié.
run0, au lieu d'utiliser SUID, demande au gestionnaire système de lancer un shell ou un processus avec l'ID utilisateur spécifié, de créer un nouveau pseudo-terminal (PTY) et de transférer des données entre celui-ci et le terminal actuel (TTY). Ce comportement rappelle davantage son exécution avec ssh que son exécution avec sudo classique. Le processus privilégié s'exécute dans un contexte isolé, généré par le processus PID 1 et non par le processus utilisateur, c'est-à-dire n'hérite pas des propriétés de l'environnement de l'utilisateur, à l'exception du transfert de la variable d'environnement $TERM. Le transfert est réglementé par une liste de propriétés explicitement autorisées, au lieu d'essayer d'interdire les propriétés dangereuses (le concept de liste blanche, au lieu de liste noire).
Polkit est utilisé pour autoriser et déterminer les capacités des utilisateurs dans run0. Le langage de règles classique (/etc/sudoers) utilisé par sudo n'est pas pris en charge. La fonctionnalité permettant d'exécuter des programmes avec d'autres privilèges est intégrée à systemd-run et la commande run0 est créée en tant que lien symbolique vers systemd-run, qui, lorsqu'elle est utilisée, fournit une interface de ligne de commande similaire à sudo.
L'une des fonctionnalités supplémentaires de run0 est l'indication de travailler avec des privilèges élevés en définissant un arrière-plan rougeâtre dans le terminal et en ajoutant un point rouge au titre de la fenêtre. Après avoir terminé l'exécution avec d'autres privilèges, le point disparaît et l'arrière-plan redevient normal. De plus, run0 prend en charge toutes les options « systemd-run », par exemple le paramètre « --property », grâce auquel vous pouvez définir des paramètres arbitraires pour les services systemd (par exemple, « CPUWeight=200 MemoryMax=2G IPAccounting=yes »). .
Source: opennet.ru
