logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
doc:faq:differences-entre-su-et-sudo [06/01/2021 14:51]
captnfab [Environnement]
doc:faq:differences-entre-su-et-sudo [18/06/2021 15:26] (Version actuelle)
otyugh [Introduction]
Ligne 1: Ligne 1:
-====== ​Titre de Votre Tuto ======+====== ​Dois-je utiliser su ou sudo pour lancer mes commandes en root ? ======
  
-  * Objet : Bien comprendre les différences entre su et sudo+  * Objet : Bien comprendre les différences entre su et sudo dans le contexte d'une administration simple de sa machine
   * Niveau requis : {{tag>​débutant}}   * Niveau requis : {{tag>​débutant}}
   * Commentaires : //Quelle commande utiliser pour passer root et exécuter des tâches d'​administration ? //   * Commentaires : //Quelle commande utiliser pour passer root et exécuter des tâches d'​administration ? //
 +  * Retours sur le forum: [[https://​debian-facile.org/​viewtopic.php?​id=29085|ici]]
   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
  
 ===== Introduction ===== ===== Introduction =====
  
-Je veux exécuter ''​ma_commande''​ en //root//, je peux utiliser différents moyens. Mais tous ne se valent pas. +Dans la suite, ''​ma_commande''​ désigne n'​importe quelle commande, que ce soit ''​apt update''​ ou ''​rm /​root/​bla.log''​. 
-Voici les différentes méthodes que nous allons comparer:+ 
 +Je veux exécuter ''​ma_commande''​ en //root//
 + 
 +Je peux utiliser différents moyens. Mais tous ne se valent pas. Voici les différentes méthodes que nous allons comparer:
  
   * se connecter en ''​root''​ depuis le TTY ([Ctrl]+[Alt]+[F1]/​[F2]/​etc. puis entrer ''​ma_commande''​   * se connecter en ''​root''​ depuis le TTY ([Ctrl]+[Alt]+[F1]/​[F2]/​etc. puis entrer ''​ma_commande''​
-  * ''​su''​ puis entrer ''​ma_commande''​+  * ''​su ​-''​ puis entrer ''​ma_commande''​
   * ''​su -c "​ma_commande"''​   * ''​su -c "​ma_commande"''​
   * ''​su -l''​ puis entrer ''​ma_commande''​   * ''​su -l''​ puis entrer ''​ma_commande''​
Ligne 21: Ligne 25:
   * ''​sudo -i''​ puis entrer ''​ma_commande''​   * ''​sudo -i''​ puis entrer ''​ma_commande''​
  
 +===== Version courte =====
 +
 +Il ne faut jamais utiliser ''​su''​ et ''​su -c "​ma_commande"''​.
 +
 +Si vous êtes membre du groupe //sudo// (tappez ''​groups''​ dans le terminal pour vérifier), alors utilisez ''​sudo ma_commande''​ ou ouvrez un shell //root// avec ''​sudo -s''​ (dans le dossier courant) ou ''​sudo -i''​ (dans ''/​root''​) en entrant le mot de passe de votre utilisateur lorsque demandé.
 +
 +Sinon, vous avez défini un mot de passe //root// lors de l'​installation,​ alors utilisez ''​su -l -c "​ma_commande"''​ ou ouvrez un shell //root// avec ''​su -l'',​ en saisissant dans les deux cas ce mot de passe.
  
-===== Authentification et mot de passe =====+===== Version longue ===== 
 +==== Authentification et mot de passe ==== 
 +''​su''​ et ''​sudo''​ donnent des droits importants, mais avant cela, ils s'​assurent que l'​utilisateur en a bien le droit. 
 +Le mode d'​authentification est paramétrable (voir ''​man pam_unix''​ et ''​man sudoers''​ par exemple), mais nous parlerons ici du comportement par défaut.
  
-==== Mot de passe //root// ==== +=== Mot de passe root === 
-Lorsque l'on utilise ''​su''​ sans spécifier d'​utilisateur,​ c'est implicitement les droits de //root// que l'​on ​cherche ​à obtenir. Et c'est également le mot de passe de l'​utilisateur //root// qui nous est demandé.+Lorsque l'on utilise ''​su''​ sans spécifier d'​utilisateur,​ c'est implicitement les droits de //root// que l'​on ​demande ​à obtenir. Et c'est également le mot de passe de l'​utilisateur //root// qui nous est demandé.
  
 Dans certains cas, l'​utilisateur //root// s'est vu désactiver son mot de passe (c'est le cas par défaut sous ubuntu, ou sous debian si l'on laisse le mot de passe //root// vide lors de l'​installation). Dans ce cas, on ne peut ni se connecter en root depuis le TTY, ni taper utiliser une des méthodes ''​su''​ ci-dessus. Dans certains cas, l'​utilisateur //root// s'est vu désactiver son mot de passe (c'est le cas par défaut sous ubuntu, ou sous debian si l'on laisse le mot de passe //root// vide lors de l'​installation). Dans ce cas, on ne peut ni se connecter en root depuis le TTY, ni taper utiliser une des méthodes ''​su''​ ci-dessus.
Ligne 31: Ligne 45:
 <note info>Il est toujours possible de créé un mot de passe pour //root//, ce qui permettra alors d'​utiliser ces commandes.</​note>​ <note info>Il est toujours possible de créé un mot de passe pour //root//, ce qui permettra alors d'​utiliser ces commandes.</​note>​
  
-==== Mot de passe ''​sudo'' ​==== +=== Mot de passe ''​sudo''​ === 
-Lorsque l'on utilise ''​sudo'',​ c'​est ​(sauf si vous vous êtes amusés à configurer votre fichier ''/​etc/​sudoers''​ différemment) ​le mot de passe de l'​utilisateur courant qui est demandé.+Lorsque l'on utilise ''​sudo'',​ c'est le mot de passe de l'​utilisateur courant qui est demandé.
  
-Sous debian, par défaut, seuls les utilisateurs membres du groupe ''​sudo''​ sont autoriser ​à utiliser la commande ''​sudo''​ pour obtenir les droits //root//.+Sous debian, par défaut, seuls les utilisateurs membres du groupe ''​sudo''​ sont autorisés ​à utiliser la commande ''​sudo''​ pour obtenir les droits //root//.
 En particulier,​ si vous avez installé Debian sans mettre de mot de passe //root//, le premier utilisateur que vous avez créé a été ajouté automatiquement au groupe ''​sudo''​ et a donc le droit d'​utiliser la commande. En particulier,​ si vous avez installé Debian sans mettre de mot de passe //root//, le premier utilisateur que vous avez créé a été ajouté automatiquement au groupe ''​sudo''​ et a donc le droit d'​utiliser la commande.
  
-<​note ​warning>Vous pouvez ​à tout moment ajouter ou retirer un membre du groupe ''​sudo''​. Attention cependant à ne pas scier la branche sur laquelle ​vous êtes assis !</​note>​+<​note ​info>Pour savoir ​à quels groupes ​vous appartenez, tapez la commande <​code=user>​groups</​code>​</​note>​
  
-===== Shell ou pas shell =====+<note warning>​Vous pouvez à tout moment ajouter ​ou retirer un membre du groupe ''​sudo''​. Cette modification nécessite une déconnexion/​reconnexion pour être prise en compte. Attention cependant à ne pas scier la branche sur laquelle vous êtes assis !</​note>​
  
-Une première différence entre ces différentes commandes est que certaines ouvrent un //shell// en tant que //root//, alors que d'​autres se contentent d'​exécuter une seule commande avec les droits //root// puis vous ramènent dans votre //shell// utilisateur.+==== Shell ou pas shell ====
  
-Les méthodes suivantes vous ouvrent un shell, dans lequel vous pouvez taper autant de commande ​que vous voulezqui seront exécutées avec les droits //root//+Une première différence entre ces différentes commandes est que certaines ​ouvrent un //shell// en tant que //root//, dans lequel vous pouvez taper autant de commandes ​que vous voulez ​et qui seront exécutées avec les droits //root//. D'​autres ​se contentent d'exécuter une seule commande avec les droits //root// ​puis vous ramènent dans votre //shell// utilisateur.
-  * se connecter en ''root''​ depuis le TTY ([Ctrl]+[Alt]+[F1]/[F2]/etcpuis entrer ''​ma_commande''​ +
-  * ''​su''​ puis entrer ''​ma_commande''​ +
-  * ''​su -l''​ puis entrer ''​ma_commande''​ +
-  * ''​sudo -s''​ puis entrer ''​ma_commande''​ +
-  * ''​sudo -i''​ puis entrer ''​ma_commande''​+
  
-Alors que les commandes suivantes ne permettent que d'​exécuter une commande ​à la fois : +On note que chaque ​commande ​a sa duale 
-  * ''​su -c "ma_commande"''​ +| Version avec shell interactif | Version one-line | 
-  * ''​su -l -c "ma_commande"''​ +| su | su -c "" ​| 
-  * ''​sudo ma_commande''​ +| su -l | su -l -c "" ​| 
-  * ''​sudo -i ma_commande''​+sudo -s | sudo … | 
 +sudo -i | sudo -i … | 
 + 
 +L'environnement d'​exécution de la commande sera identique dans ces deux cas. La différence étant l'​ouverture d'un shell interactif ou non.
  
 <note info>​Lorsque vous avez plusieurs commandes à taper, ou que vous ne savez pas forcément à l'​avance toutes les commandes que vous avez à taper, privilégiez une commande de la première liste. <note info>​Lorsque vous avez plusieurs commandes à taper, ou que vous ne savez pas forcément à l'​avance toutes les commandes que vous avez à taper, privilégiez une commande de la première liste.
 Si vous savez que vous n'avez qu'une commande à taper, la seconde liste peut offrir une alternative intéressante.</​note>​ Si vous savez que vous n'avez qu'une commande à taper, la seconde liste peut offrir une alternative intéressante.</​note>​
  
-===== Environnement ​=====+==== Environnement ====
  
 Outre les droits d'​exécution d'un programme, un point que l'on néglige souvent ou que l'on oublie de mentionner, c'est l'​importance des variables d'​environnement et du dossier de travail. Outre les droits d'​exécution d'un programme, un point que l'on néglige souvent ou que l'on oublie de mentionner, c'est l'​importance des variables d'​environnement et du dossier de travail.
  
-==== Dossier de travail ​====+=== Dossier de travail ===
 Afin de savoir depuis quel dossier seront exécutées les différentes commandes, faisons un test avec ''​pwd'',​ qui est une commande affichant le dossier courant (//print work directory//​). Et avant de lancer les commandes, nous allons nous placer dans ''/​tmp''​ avec ''​cd''​ Afin de savoir depuis quel dossier seront exécutées les différentes commandes, faisons un test avec ''​pwd'',​ qui est une commande affichant le dossier courant (//print work directory//​). Et avant de lancer les commandes, nous allons nous placer dans ''/​tmp''​ avec ''​cd''​
  
Ligne 79: Ligne 91:
 <note warning>​Vous voyez que certaines commandes vous ramènent dans ''/​root'',​ ce qui n'est pas forcément ce que vous voulez et peut-être dangereux, alors que certaines vous laissent dans le dossier courant, ce qui n'est pas forcément ce que vous voulez et peut-être dangereux… aussi :​-)</​note>​ <note warning>​Vous voyez que certaines commandes vous ramènent dans ''/​root'',​ ce qui n'est pas forcément ce que vous voulez et peut-être dangereux, alors que certaines vous laissent dans le dossier courant, ce qui n'est pas forcément ce que vous voulez et peut-être dangereux… aussi :​-)</​note>​
  
-==== PATH ====+=== PATH ===
 Le ''​PATH''​ est une variable d'​environnement très importante. C'est une liste de dossiers séparés par des '':''​. Lorsque vous tapez une commande dans le terminal, par exemple ''​rm'',​ le shell va chercher dans les dossiers du PATH un par un, pour voir s'ils contiennent un binaire exécutable ''​rm''​. C'est le fichier du premier dossier (de gauche à droite) qui sera sélectionné. Le ''​PATH''​ est une variable d'​environnement très importante. C'est une liste de dossiers séparés par des '':''​. Lorsque vous tapez une commande dans le terminal, par exemple ''​rm'',​ le shell va chercher dans les dossiers du PATH un par un, pour voir s'ils contiennent un binaire exécutable ''​rm''​. C'est le fichier du premier dossier (de gauche à droite) qui sera sélectionné.
  
Ligne 100: Ligne 112:
  
 Si un programme s'​attend à être exécuté en //root// avec un PATH de //root//, alors il ne fonctionnera pas si le PATH n'est pas celui de //root//. Si un programme s'​attend à être exécuté en //root// avec un PATH de //root//, alors il ne fonctionnera pas si le PATH n'est pas celui de //root//.
 +
 +En remplaçant ''​ma_commande''​ par ''​sh -c '​printf %s\\n $PATH' '',​ vous pouvez obtenir les différents PATH.
  
 | Méthode utilisée | $PATH | | Méthode utilisée | $PATH |
Ligne 114: Ligne 128:
 <note warning>​Voilà déjà une première raison de ne jamais utiliser ''​su''​ ou ''​su -c '',​ sauf si l'on ne veut pas exécuter de commande propre à //​root//​.</​note>​ <note warning>​Voilà déjà une première raison de ne jamais utiliser ''​su''​ ou ''​su -c '',​ sauf si l'on ne veut pas exécuter de commande propre à //​root//​.</​note>​
  
-==== env ====+=== env ===
  
 Pour vous rendre compte des différences entre les environnements des différentes commandes, je vous invite à taper la commande « env » via les différentes méthodes ci-dessus. Pour vous rendre compte des différences entre les environnements des différentes commandes, je vous invite à taper la commande « env » via les différentes méthodes ci-dessus.
Ligne 185: Ligne 199:
  
 Vous remarquerez de subtiles différences entre chacun des environnements. Vous remarquerez de subtiles différences entre chacun des environnements.
-===== Sécurité =====+==== Sécurité ==== 
 +Lorsque qu'on souhaite prendre le contrôle d'une machine, on vise bien souvent les droits //root//, mais pas nécessairement. 
 +Qui plus est, il est en général nécessaire de d'​abord obtenir un shell utilisateur en guise d'​étape intermédiaire. 
 + 
 +Si l'on utilise sudo, un attaquant ayant obtenu le mot de passe utilisateur pourra immédiatement devenir root. 
 + 
 +Si l'on n'​utilise pas sudo, un attaquant ayant obtenu le mot de passe utilisateur devra encore obtenir le mot de passe root, ou trouver un moyen de leurrer l'​utilisateur pour l'​obtenir. 
 +Inversement,​ si l'​attaquant a un accès physique à la machine, il lui suffira d'​obtenir le pass root directement,​ sans avoir à trouver le pass utilisateur. 
 + 
 +Reste qu'en fait, la différence n'est pas si importante que ça. En effet, une fois le mot de passe utilisateur obtenu, il est aisé d'​effacer tous ses fichiers, ou de les chiffrer, ou de les récupérer,​ ou de rajouter des « pièges » pour récupérer ce que l'​utilisateur écrit au clavier. 
 + 
 +<note info>​Donc,​ la morale de l'​histoire,​ c'est qu'il n'y a pas de grosses grosses différences de sécurité entre les deux (pas de sudo restant //un peu plus sûr// pour une utilisation simple de la machine.) 
 +En matière de sécurité, le plus gros risque est que l'​attaquant réussisse à se connecter à votre compte utilisateur (sans pour autant connaître votre mot de passe), reste à voir comment réduire les possibilités de cela et les implications de sécurité dans ce cas là, mais ceci est une autre histoire.</​note>​ 
 + 
 + 
 +==== Conclusion ​==== 
 + 
 +N'​utilisez pas ''​su''​ ou ''​su -c''​. 
 + 
 +Pour le reste: 
 +| Version shell | version one-line | path | pwd | 
 +| ''​su -l'' ​        | ''​su -l -c "​…"'' ​    | root | ''/​root''​ | 
 +| ''​sudo -s'' ​      | ''​sudo …'' ​          | root | inchangé | 
 +| ''​sudo -i'' ​      | ''​sudo -i …'' ​       | root | ''/​root''​ | 
 + 
 +<note warning>''​su -''​ est identique à ''​su -l'',​ mais cette dernière forme est recommandée par ''​man su''​.</​note>​
doc/faq/differences-entre-su-et-sudo.1609941090.txt.gz · Dernière modification: 06/01/2021 14:51 par captnfab

Pied de page des forums

Propulsé par FluxBB