GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre la différence entre les commandes sudo et su sous Linux

Dans l'un de nos articles précédents, nous avons discuté en détail de la commande "sudo". Vers la fin de ce tutoriel, il y avait une mention d'une autre commande similaire "su" dans une petite note. Eh bien, dans cet article, nous discuterons en détail de la commande 'su' ainsi que de la façon dont elle diffère de la commande 'sudo'.

Mais avant cela, veuillez noter que toutes les instructions et exemples mentionnés dans ce tutoriel ont été testés sur Ubuntu 18.04 LTS et Debian 10.

La commande su sous Linux

Le travail principal de la commande su est de vous permettre de basculer vers un autre utilisateur lors d'une session de connexion. En d'autres termes, l'outil vous permet d'assumer l'identité d'un autre utilisateur sans avoir à vous déconnecter, puis à vous connecter (en tant qu'utilisateur).

La commande su est principalement utilisée pour basculer vers le compte superutilisateur/root (car les privilèges root sont souvent requis lorsque vous travaillez sur la ligne de commande), mais - comme déjà mentionné - vous pouvez l'utiliser pour basculer vers n'importe quel autre utilisateur non root comme bien.

Voici comment vous pouvez utiliser cette commande pour passer à l'utilisateur root :

Le mot de passe requis par cette commande est également de l'utilisateur racine. Donc en général, la commande su vous demande de saisir le mot de passe de l'utilisateur cible. Une fois le mot de passe correct saisi, l'outil démarre une sous-session dans la session existante sur le terminal.

su -

Il existe une autre façon de passer à l'utilisateur root :exécutez la commande 'su -' :

Maintenant, quelle est la différence entre 'su' et 'su -' ? Eh bien, le premier conserve l'environnement de l'ancien utilisateur/d'origine même après le passage à root, tandis que le second crée un nouvel environnement (comme dicté par le ~/.bashrc de l'utilisateur root), similaire au cas où vous vous connectez explicitement en tant qu'utilisateur root à partir de l'écran de connexion.

IMPORTANT pour les utilisateurs de Debian 10. La variable PATH de l'utilisateur root diffère sur Debian 10 lors de l'utilisation de 'su' vs 'su -', des répertoires comme /sbin sont manquants lorsque seul 'su' est utilisé, ce qui signifie que vous pouvez obtenir des erreurs de commande introuvable même pour l'administration système de base commandes. Utilisez donc toujours 'su -' sur Debian 10 pour devenir l'utilisateur root.

La page de manuel de 'su' le précise également :

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Donc, vous conviendrez que se connecter avec 'su -' a plus de sens. Mais comme la commande 'su' existe aussi, on peut se demander quand c'est utile. L'extrait suivant - extrait du site Web du wiki ArchLinux - donne une bonne idée des avantages et des inconvénients de la commande "su" :

  • Il peut parfois être avantageux pour un administrateur système d'utiliser le compte shell d'un utilisateur ordinaire plutôt que le sien. En particulier, parfois, le moyen le plus efficace de résoudre le problème d'un utilisateur consiste à se connecter au compte de cet utilisateur afin de reproduire ou de déboguer le problème.
  • Cependant, dans de nombreuses situations, il n'est pas souhaitable, voire dangereux, que l'utilisateur root opère à partir du compte shell d'un utilisateur ordinaire et avec les variables d'environnement de ce compte plutôt qu'à partir des siennes. Tout en utilisant par inadvertance le compte shell d'un utilisateur ordinaire, root pourrait installer un programme ou apporter d'autres modifications au système qui n'auraient pas le même résultat que si elles avaient été apportées en utilisant le compte root. Par exemple, un programme pourrait être installé qui pourrait donner à l'utilisateur ordinaire le pouvoir d'endommager accidentellement le système ou d'obtenir un accès non autorisé à certaines données.

Remarque :Si vous souhaitez passer plus d'arguments après - dans 'su -', vous devez utiliser l'option de ligne de commande -l proposée par la commande (au lieu de -). Voici la définition de - et l'option de ligne de commande -l :

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su -c

Il existe une autre option de la commande 'su' qui mérite d'être mentionnée :-c. Il vous permet de fournir une commande que vous souhaitez exécuter après être passé à l'utilisateur cible.

La page de manuel de 'su' l'explique comme suit :

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Prenons l'exemple de modèle suivant :

su [target-user] -c [command-to-run]

Donc, dans ce cas, la "commande à exécuter" sera exécutée comme :

[shell] -c [command-to-run]

Où 'shell' serait remplacé par le shell 'target-user' défini dans le /etc/passwd fichier.

Sudo contre Su

Maintenant que nous avons également discuté des bases de la commande "su", il est temps de discuter des différences entre les commandes "sudo" et "su".

Mot de passe

La principale différence entre les deux est le mot de passe requis :alors que "sudo" nécessite le mot de passe de l'utilisateur actuel, "su" vous oblige à saisir le mot de passe de l'utilisateur root.

De toute évidence, "sudo" est une meilleure alternative entre les deux en ce qui concerne la sécurité. Par exemple, considérons le cas d'un ordinateur utilisé par plusieurs utilisateurs qui ont également besoin d'un accès root. Utiliser 'su' dans un tel scénario signifie partager le mot de passe root avec tous, ce qui n'est généralement pas une bonne pratique.

De plus, si vous souhaitez révoquer l'accès superutilisateur/root d'un utilisateur particulier, le seul moyen est de modifier le mot de passe root, puis de redistribuer le nouveau mot de passe root à tous les autres utilisateurs.

Avec Sudo, en revanche, vous pouvez gérer ces deux scénarios sans effort. Étant donné que "sudo" nécessite que les utilisateurs saisissent leur propre mot de passe, vous n'avez pas besoin de partager le mot de passe root avec tous les utilisateurs en premier lieu. Et pour empêcher un utilisateur particulier d'accéder aux privilèges root, tout ce que vous avez à faire est de modifier l'entrée correspondante dans le fichier "sudoers".

Comportement par défaut

L'autre différence entre les deux commandes réside dans leur comportement par défaut. Alors que "sudo" ne vous permet d'exécuter qu'une seule commande avec des privilèges élevés, la commande "su" lance un nouveau shell, vous permettant d'exécuter autant de commandes que vous le souhaitez avec les privilèges root jusqu'à ce que vous quittiez explicitement cette vente.

Ainsi, le comportement par défaut de la commande 'su' est potentiellement dangereux étant donné la possibilité que l'utilisateur puisse oublier le fait qu'il travaille en tant que root, et pourrait apporter par inadvertance des modifications irrécupérables (comme exécuter la commande 'rm -rf' dans le mauvais sens répertoire). Pour une discussion détaillée sur les raisons pour lesquelles il n'est pas encouragé de toujours travailler en tant que root, rendez-vous ici.

Journalisation

Bien que les commandes exécutées via "sudo" soient exécutées en tant qu'utilisateur cible (qui est "root" par défaut), elles sont étiquetées avec le nom d'utilisateur de sudoer. Mais dans le cas de 'su', il n'est pas possible de suivre directement ce qu'un utilisateur a fait après avoir su au compte root.

Flexibilité

La commande "sudo" est beaucoup plus flexible dans la mesure où vous pouvez même limiter les commandes auxquelles vous souhaitez que les sudo-ers aient accès. En d'autres termes, les utilisateurs ayant accès à "sudo" ne peuvent accéder qu'aux commandes nécessaires à leur travail. Cependant, avec "su", ce n'est pas possible - soit vous avez le privilège de tout faire, soit de ne rien faire.

Sudo su

Vraisemblablement en raison des risques potentiels liés à l'utilisation de "su" ou à la connexion directement en tant que root, certaines distributions Linux, comme Ubuntu, désactivent le compte d'utilisateur root par défaut. Les utilisateurs sont encouragés à utiliser "sudo" chaque fois qu'ils ont besoin des privilèges root.

Cependant, vous pouvez toujours faire 'su' avec succès, c'est-à-dire sans entrer le mot de passe root. Tout ce que vous avez à faire est d'exécuter la commande suivante :

sudo su

Puisque vous exécutez la commande avec 'sudo', vous n'aurez qu'à entrer votre mot de passe. Ainsi, une fois cela fait, la commande 'su' sera exécutée en tant que root, ce qui signifie qu'elle ne demandera aucun mot de passe.

PS :Si vous souhaitez activer le compte root sur votre système (bien que cela soit fortement déconseillé car vous pouvez toujours utiliser 'sudo' ou 'sudo su'), vous devrez définir le mot de passe root manuellement, ce que vous pouvez faire en utilisant la commande suivante :

sudo passwd root

Conclusion

Ceci ainsi que notre tutoriel précédent (qui se concentre sur 'sudo') devraient vous donner une bonne idée des outils disponibles qui vous permettent d'effectuer des tâches qui nécessitent des privilèges élevés (ou un ensemble complètement différent de) privilèges. Si vous avez quelque chose à partager sur 'su' ou 'sudo', ou si vous souhaitez partager votre propre expérience, vous pouvez le faire dans les commentaires ci-dessous.


Linux
  1. Différence entre les commandes "su" et "su -" sous Linux

  2. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  3. La différence entre compte utilisateur et compte de service ?

  4. Linux - Différence entre l'espace utilisateur et l'espace noyau ?

  5. Différence entre l'utilisateur Sudo et l'utilisateur root ?

La différence entre sudo et su expliquée

Quelle est la différence entre Linux et Unix ?

Quelle est la différence entre la commande apt et apt-get ?

Comprendre la commande time sous Linux

Quelle est la différence entre &> et >&en bash ?

Sous Linux, quelle est la différence entre les tampons et le cache signalés par la commande free ?