Root – Les différences entre Su et Sudo

sudo-su

Dans un système Unix comme Linux, « root » appelé aussi « super user » est le maître ultime, c’est le nom qui est donné a l’utilisateur qui possède absolument toutes les permissions sur le système. Il peut accorder et supprimer les droits pour les autres utilisateurs et accède a toutes les ressources, fichiers et répertoires et peux installer des programmes sans restrictions.

Unix

Définition de « root » sur un système de type Unix

Ce compte est réservé au utilisateurs confirmés et ne dois jamais être partagé ni utilisé par des utilisateurs novices. Il ne faut l’utiliser qu’en cas de besoin absolu, root est très puissant et permet de détruire le système en moins de temps qu’il n’ en faut pour l’écrire ou le dire et sans confirmation ! Il n’y a aucun retour en arrière possible. Ce compte est réservé au experts uniquement pour des opérations de maintenance et ne doit jamais être utilisés autrement. Les commandes « su » (switch user) et « sudo » (substitute user do) sont des commandes très puissantes qui permettent toutes les deux d’obtenir les privilèges de root a des niveaux différents, les différences entre les deux commandes sont importantes et pas toujours évidentes pour tout le monde.

Un grand pouvoir implique de grandes responsabilités

Un petit écart sur le cas Android pour souligner les dangers que représente le compte root. Tous les super héros et les utilisateurs Linux le savent, le pouvoir ouvre toutes les portes. Mais sur Linux il y a des nuances et des degrés de puissance suivant la méthode utilisée. Le terme « root » signifie racine et cela correspond bien a l’usage et au sens du mot root sur un système Unix. Les « Unix » ont une architecture particulière qui leur est propre, cela se remarque entre autres sur le système de fichier et la gestion des droits utilisateur. Le MaOS et Android sont aussi des « Unix », il faut posséder les droits root pour accéder au répertoire de l’utilisateur et effectuer des modifications en profondeur sur le système. Utiliser le compte root n’est pas dangereux ni interdit quand c’est justifié et a condition d’agir en connaissance de cause.

Android et Root une combinaison a haut risques.
Les plus aguerris d’entre vous ont déjà entendu parler ou ont déjà « rooté » leur smartphone pour tester une rom, effectuer des modifications ou enlever des programmes pré installés, ce qui est impossible avec un simple compte utilisateur. Android a cette particularité d’être fournit avec un simple compte utilisateur et de bloquer l’accès au compte root. Pour y accéder et obtenir les privilèges, il faut bidouiller ou utiliser un programme qui va bidouiller le système pour réactiver le compte root. On dis alors que le système est « rooté » Le fait de vouloir rooter son smartphone pour obtenir les droits est tout a fait compréhensible et légitime, surtout pour un utilisateur confirmé, ne pas avoir la main sur son propre système est frustrant. On peut aussi comprendre que des programmes non désirés qui refusent de se désinstaller et pire de se désactiver en consommant des ressources inutiles poussent a rooter son smartphone pour enlever les parasites indésirables. *

Android-rooted

Le problème sur Android c’est que l’obtention des droits root est irréversible, une fois le smartphone rooté il ne sera plus possible de repasser sur un compte « utilisateur normal ». Cela implique que le smartphone sera connecté et accessible sur internet en permanence sur un compte « root » qui rappelons le possède tout les droits sur le système. C’est un gros problème et un gros trou de sécurité sur un système Unix. Les programmes malveillants comme les commandes lancées par un « hacker » nécessitent souvent des droits supérieurs pour s’ exécuter.

Android rooté rend le système vulnérable a toute les attaques et facilite grandement la prise de contrôle par un hacker. Sur un smartphone rooté vous n’aurez plus aucuns contrôle sur votre appareil car l’attaquant aura hérité des droits ultimes et sera en mesure de se rendre indétectable et d’installer des programmes corrompus, dans votre appareil. Il aura un contrôle total et pourra vous rediriger sur des faux sites a sa guise. Une réinitialisation des paramètres d’usine n’y changera rien, utiliser un smartphone rooté revient a utiliser le compte root en l’exposant en permanence sur internet.

* Il est possible d’enlever les bloatwares et les programmes inutiles sans rooter le smartphone, il faut utiliser les commandes ADB  dans un terminal avec le smartphone raccordé en usb. ADB s’utilise en ligne de commande sur Windows ou sur Linux après avoir installé le kit de développement Android SDK.

La commande « SUDO »

Contrairement a Android, sur Linux il est possible d’obtenir les privilèges du « super user » de façon temporaire, c’est une élévation de privilèges mais le compte utilisateur ne se transforme pas en compte root, elle ne donne pas un accès root complet. La commande sudo existe depuis 1980 et permet une meilleure gestion des accès administrateur sur un système Unix. En plaçant un « sudo » avant une commande on demande une élévation de privilège temporaire qui ne sera effective que pour la commande qui suit le sudo et a condition de connaître le mot de passe de l’utilisateur . C’est une commande très puissante qui permet de déléguer des droits de façon temporaire sans divulguer le mot de passe de l’utilisateur root. C’est donc une excellente alternative pour effectuer la plupart des opérations nécessitant des droits. Les commandes passées avec sudo n’utilisent pas le compte root , elles sont journalisées avec le compte de l’utilisateur qui l’utilise, cette nuance est importante car cela n’a pas les même conséquences que si c’est l’utilisateur root qui passe la commande directement. Avec sudo le nom de l’utilisateur et la commande utilisée est enregistrée, cela permet un meilleur contrôle et permet de tracer quelle commande a causé un problème et quel est l’utilisateur qui a tapé la commande. La commande sudo bien configurée est de loi préférable a l’utilisation de su et devrait être privilégiée.

Sudo n’est pas root
Utiliser la commande sudo ne permet pas d’obtenir tous les privilèges de l’utilisateur root, car les variables d’environnement ne changent pas, sur Linux, chaque utilisateur dispose de ses propre variables d’environnement disponibles après la connexion. Sudo ne déconnecte pas l’utilisateur courant pour se connecter a l’environnement root, les commandes sont exécutées avec les privilèges de root dans l’environnement de l’utilisateur connecté. C’est pour cette raison que certaines commandes ne fonctionneront pas avec « sudo » et vous obligeront a vous connecter en root ou a utiliser « su » pour les réaliser. Cela dois vous interpeller, si une commande demande absolument le compte root pour s’exécuter, c’est forcément une commande très critique qui va modifier le système en profondeur sans possibilité de retour en arrière. A moins de savoir exactement ce que vous faites et de bien comprendre la ligne que vous tapez, vous devriez bien réfléchir avant d’utiliser su et d’envoyer votre ligne de commande.

Lorsque sudo est utilisé avec sudo -i (ou sudo su) on devient root !, on perd donc tous les avantages de la commande sudo cités plus haut.

La période de grâce
La commande sudo a une particularité peu connue qui est considérée ( a tort) par certains utilisateurs comme un problème ou une faille de sécurité, le risque concerne la « période de grâce » après avoir tapé une commande avec sudo et donné le bon mot de passe si vous refaites un sudo immédiatement le mot de passe n’est plus demandé, il est donc possible d’ exécuter des commandes critiques facilement pendant cette période de grâce qui est généralement de15 minutes par défaut. Cette option (car c’est bien une option et non une faille) est configurable dans le fichier « sudoers » en ajoutant la ligne « Defaults env_reset,timestamp_timeout=X » et en remplaçant la valeur par défaut avec zéro si on veux la désactiver.
Rappelez vous qu’en matière de sécurité une attaque réussie exploite souvent un défaut de configuration ou une mauvaise configuration d’un outil critique

La configuration de sudo
Pour avoir le droit d’utiliser la commande sudo l’utilisateur doit faire partie du groupe « sudo », il faudra passer par root qui est le seul a avoir les droits suffisants pour ajouter un utilisateur au groupe ou modifier la configuration de la commande en modifiant le fichier « sudoers ». Ajouter l’utilisateur au groupe sudo n’est pas conseillé, car l’utilisateur va bénéficier des droits accordés au groupe sudo.

sudo

Il est préférable d’ajouter l’utilisateur dans le fichier sudoers, ce qui permettra l’utilisation de sudo uniquement par root et l’utilisateur déclaré dans le fichier sudoers. Il est conseillé d’utiliser la commande « visudo » pour effectuer des modification dans le fichier sudoers. La raison est simple, la commande « visudo » interdit l’édition simultanée du fichier et vérifie les erreurs de syntaxe. Sur un système avec un seul utilisateur, si vous êtes sur de vous sur la syntaxe, ça ne pose pas de soucis si vous éditez le fichier avec un autre éditeur comme Vi ou Nano. Si sudo n’est pas configuré ou ne fonctionne pas sur votre système vous devrez utiliser « su » pour vous connecter avec le compte root et éditer le fichier.

Attention !

En plus de la syntaxe a respecter, le fichier sudoers se compose de 3 sections et l’ordre a de l’importance pour l’application des règles ( sous peine d’annulation ou non application avec des règles contradictoires).

En cas de fichier corrompu (erreur de syntaxe) vous pouvez tenter une récupération avec la commande :

#pkexec visudo

Le commande « SU »

Su ne veut pas dire super user , mais changement d’utilisateur avec la commande su on touche le pouvoir ultime, le graal. Contrairement a sudo la commande su n’est pas une élévation de privilège, quand elle est utilisée avec une option « su -l » ou « su –login » elle permet la connexion avec un accès complet dans l’environnement de l’utilisateur root. En lançant la commande su, le mot de passe root est demandé, le prompt change et vous êtes connecté sur le compte root sans quitter la session de l’utilisateur en cour. Tant que vous ne mettrez pas fin a la connexion, toutes les commandes seront passées avec le compte root avec tout ce que cela implique. Réfléchissez toujours 3 fois avant de taper des commandes dans un terminal root ! Le compte root n’as pas vocation a être utilisé pour réaliser des opérations courantes d’un utilisateur classique.

i-m-root

« Su » est une commande qui permet de se connecter a un autre utilisateur. Pour se connecter a un utilisateur en particulier il faut mettre le nom de l’utilisateur en argument la commande « su toto » vous connectera a l’utilisateur toto. Elle permet donc de se connecter avec le compte de n’importe quel utilisateur dont on connaît le mot de passe. La commande lancée sans argument se connecte automatiquement au compte root et demande le mot de passe de root. Dans un environnement serveur avec plusieurs administrateurs, cette technique est problématique car elle oblige le partage du mot de passe « root »  et ne gardera aucune trace des actions effectuées, plus précisément il sera impossible de déterminer ce que font les administrateurs.

Bien plus puissante que la commande sudo, il faut l’ utiliser avec beaucoup de précaution, il n’y a absolument aucune fierté ni intérêt a utiliser un compte root en permanence, bien au contraire ça ne vous attirera que des problèmes

Bonne pratiques

En informatique, les bonnes pratiques sont des règles logique de bon sens, ce n’est pas un règlement ni une obligation, simplement chaque fois que vous n’appliquez pas une règle, vous créez des trous de sécurité et vous augmentez les risques de subir des intrusions réussies. C’est donc vous qui avez le pouvoir de laisser traîner vos clés et de laisser les portes ouvertes.
Libre a chacun de les appliquer selon ses besoins, il est évident que sur une machine isolée non connectée a internet dans un local isolé ou vous seul avez accès, les risques sont limités et vous pouvez dérogez a certaines règles. Il n’est pas utile de se compliquer la vie inutilement, mais les bonnes habitudes on les prends dés le début et on les garde. 😉

1  Utilisez un mot de passe fort pour tous les comptes.

2  Configurez un mot de passe root différent du compte utilisateur.

3  Utilisez la commande sudo plutôt que la commande su.

4  Configurez l’utilisation de la commande sudo dans le fichier sudoers avec « visudo »

5  Ne désactivez pas la demande de mot de passe pour la commande sudo.

6  Ne configurez pas la commande sudo pour qu elle demande le mot de passe root.

7  Ne tapez jamais une commande avec « su » ou « sudo » si vous ne savez pas exactement ce que vous faites

8  Sur Android faites le choix d’utilser ADB plutôt que de « rooter » l’appareil.