GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Un guide du débutant pour comprendre sudo sur Ubuntu

Avez-vous déjà eu une erreur "Autorisation refusée" en travaillant sur la ligne de commande Linux ? Il y a de fortes chances que vous essayiez d'effectuer une opération nécessitant des autorisations root. Par exemple, la capture d'écran suivante montre l'erreur générée lorsque j'essayais de copier un fichier binaire dans l'un des répertoires système :

Quelle est donc la solution à ce problème ? Simple, utilisez le sudo commande.

L'utilisateur qui exécute la commande sera invité à entrer son mot de passe de connexion. Une fois le mot de passe correct entré, l'opération sera effectuée avec succès.

Bien que sudo soit sans aucun doute une commande incontournable pour tous ceux qui travaillent sur la ligne de commande sous Linux, il existe plusieurs autres détails connexes (et approfondis) que vous devez connaître afin d'utiliser la commande de manière plus responsable et efficace. Et c'est exactement ce dont nous allons discuter ici dans cet article.

But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu 14.04LTS with Bash shell version 4.3.11.

Qu'est-ce que sudo ?

La commande sudo, comme la plupart d'entre vous le savent peut-être déjà, est utilisée pour exécuter une commande avec des privilèges élevés (généralement en tant que root). Nous avons déjà discuté d'un exemple de cela dans la section d'introduction ci-dessus. Cependant, si vous le souhaitez, vous pouvez utiliser sudo pour exécuter la commande en tant qu'un autre utilisateur (non root).

Ceci est réalisé grâce au -u option de ligne de commande fournie par l'outil. Par exemple, dans l'exemple ci-dessous, j'ai (himanshu) essayé de renommer un fichier dans le répertoire personnel d'un autre utilisateur (howtoforge), mais j'ai obtenu une erreur "autorisation refusée". Et puis j'ai essayé la même commande 'mv' avec 'sudo -u howtoforge', la commande a réussi :

Est-ce que n'importe quel utilisateur peut utiliser sudo ?

Non. Pour qu'un utilisateur puisse utiliser sudo, une entrée correspondant à cet utilisateur doit se trouver dans /etc/sudoers dossier. Le paragraphe suivant - tiré du site Web d'Ubuntu - devrait le rendre plus clair :

The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

Si vous utilisez Ubuntu, il est facile de s'assurer qu'un utilisateur peut exécuter la commande sudo :tout ce que vous avez à faire est de faire en sorte que ce compte d'utilisateur soit de type « administrateur ». Cela peut être fait en allant dans Paramètres système... -> Comptes d'utilisateurs.

Déverrouillage de la fenêtre :

Sélectionnez ensuite l'utilisateur dont vous souhaitez modifier le type de compte, puis modifiez le type en "administrateur"

Cependant, si vous n'êtes pas sur Ubuntu, ou si votre distribution ne fournit pas cette fonctionnalité, vous pouvez modifier manuellement le fichier /etc/sudoers fichier pour effectuer la modification. Vous devrez ajouter la ligne suivante dans ce fichier :

[user]    ALL=(ALL:ALL) ALL

Inutile de dire que [user] doit être remplacé par le nom d'utilisateur du compte auquel vous accordez le privilège sudo. Une chose importante à mentionner ici est que la méthode officiellement suggérée pour éditer ce fichier consiste à utiliser le visudo commande - tout ce que vous avez à faire est d'exécuter la commande suivante :

sudo visudo

Pour vous donner une idée de pourquoi exactement c'est le cas, voici un extrait du manuel visudo :

visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

Pour plus d'informations sur le visudo, rendez-vous ici.

Qu'est-ce qu'une session sudo ?

Si vous utilisez fréquemment la commande sudo, je suis sûr que vous avez remarqué qu'après avoir saisi le mot de passe une fois, vous pouvez exécuter plusieurs commandes sudo sans être invité à entrer le mot de passe. Mais après un certain temps, la commande sudo vous demande à nouveau votre mot de passe.

Ce comportement n'a rien à voir avec le nombre de commandes alimentées par sudo que vous exécutez, mais dépend plutôt du temps. Oui, par défaut, sudo ne demandera pas de mot de passe pendant 15 minutes après que l'utilisateur l'ait entré une fois. Publiez ces 15 minutes, vous serez à nouveau invité à saisir votre mot de passe.

Cependant, si vous le souhaitez, vous pouvez modifier ce comportement. Pour cela, ouvrez le fichier /etc/sudoers à l'aide de la commande suivante :

sudo visudo

Et puis allez à la ligne qui lit :

Defaults env_reset

et ajoutez la variable suivante (surlignée en gras ci-dessous) à la fin de la ligne

Defaults env_reset,timestamp_timeout=[new-value]

Le champ [new-value] doit être remplacé par le nombre de minutes pendant lesquelles vous souhaitez que votre session sudo dure. Par exemple, j'ai utilisé la valeur 40.

Si vous souhaitez obtenir un mot de passe à chaque fois que vous utilisez la commande sudo, vous pouvez alors attribuer la valeur '0' à cette variable. Et pour ceux d'entre vous qui veulent que leur session sudo n'expire jamais, vous pouvez attribuer la valeur '-1'.

Veuillez noter que l'utilisation de timestamp_timeout avec la valeur '-1' est fortement déconseillée.

Le mot de passe sudo

Comme vous l'avez peut-être observé, chaque fois que sudo vous demande un mot de passe et que vous commencez à le saisir, rien ne s'affiche - pas même les astérisques, ce qui est généralement la norme. Bien que ce ne soit pas un gros problème en général, certains utilisateurs peuvent souhaiter que les astérisques s'affichent pour une raison quelconque.

La bonne chose est que c'est possible et assez facile à faire. Il vous suffit de modifier la ligne suivante dans le fichier /etc/sudoers :

Defaults        env_reset

à

Defaults        env_reset,pwfeedback

Et enregistrez le fichier.

Désormais, chaque fois que vous taperez le mot de passe sudo, un astérisque apparaîtra.

Quelques options de ligne de commande sudo importantes

Outre l'option de ligne de commande -u (dont nous avons déjà parlé au début de ce didacticiel), il existe d'autres options de ligne de commande sudo importantes qui méritent d'être mentionnées. Dans cette section, nous en discuterons certains.

L'option -k

Considérez un cas où vous venez d'exécuter une commande alimentée par sudo après avoir entré votre mot de passe. Maintenant, comme vous le savez déjà, la session sudo reste active pendant 15 minutes par défaut. Supposons qu'au cours de cette session, vous deviez donner à quelqu'un l'accès à votre terminal, mais vous ne voulez pas qu'il puisse utiliser sudo. Qu'allez-vous faire ?

Heureusement, il existe une option de ligne de commande -k qui permet à l'utilisateur de révoquer l'autorisation sudo. Voici ce que la page de manuel sudo a à dire sur cette option :

-k, --reset-timestamp

When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

L'option -s

Il peut arriver que votre travail vous oblige à exécuter un ensemble de commandes nécessitant des privilèges root et que vous ne souhaitiez pas saisir le mot de passe sudo de temps en temps. De plus, vous ne souhaitez pas modifier la limite de délai d'expiration de la session sudo en apportant des modifications au fichier /etc/sudoers.

Dans ce cas, vous pouvez utiliser le -s option de ligne de commande de la commande sudo. Voici comment la page de manuel sudo l'explique :

-s, --shell

Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

Donc, fondamentalement, ce que fait cette option de ligne de commande est :

  • Lance un nouveau shell - pour quel shell, la variable d'environnement SHELL est référencée. Si $SHELL est vide, le shell défini dans /etc/passwd le fichier est récupéré.
  • Si vous transmettez également un nom de commande avec l'option -s (par exemple :sudo -s whoami ), la commande réellement exécutée est : sudo /bin/bash -c whoami.
  • Si vous n'essayez pas d'exécuter une autre commande (c'est-à-dire que vous essayez simplement d'exécuter sudo -s ) alors vous obtenez un shell interactif avec les privilèges root.

Ce qu'il faut garder à l'esprit ici, c'est que le -s L'option de ligne de commande vous donne un shell avec des privilèges root, mais vous n'obtenez pas l'environnement root - c'est votre .bashrc qui est sourcé. Cela signifie que, par exemple, dans le nouveau shell que sudo -s s'exécute, exécutant le whoami La commande renverra toujours votre nom d'utilisateur, et non "root".

L'option -i

L'option -i est similaire à l'option -s dont nous venons de parler. Cependant, il existe quelques différences. L'une des principales différences est que -i vous donne également l'environnement racine, ce qui signifie que votre fichier .bashrc (de l'utilisateur) est ignoré. C'est comme devenir root sans se connecter explicitement en tant que root. De plus, vous n'avez pas non plus besoin de saisir le mot de passe de l'utilisateur root.

Important :Veuillez noter qu'il existe un su commande qui vous permet également de changer d'utilisateur (par défaut, elle vous permet de devenir root). Cette commande nécessite que vous saisissiez le mot de passe "root". Pour éviter cela, vous pouvez également l'exécuter avec sudo ('sudo su'); dans ce cas, il vous suffira d'entrer votre mot de passe de connexion. Cependant, 'su' et 'sudo su' ont des différences sous-jacentes - pour les comprendre et en savoir plus sur la façon dont 'sudo -i' se compare à eux, rendez-vous ici.

Conclusion

J'espère qu'à présent, vous avez au moins compris l'idée de base derrière sudo et comment vous modifiez son comportement par défaut. Essayez les réglages /etc/sudoers que nous avons expliqués ici, passez également par la discussion du forum (liée dans le dernier paragraphe) pour obtenir plus d'informations sur la commande sudo.


Ubuntu
  1. Un guide du terminal Linux pour les débutants

  2. Comment installer MongoDB sur Ubuntu 18.04 - Guide pour les débutants

  3. Installer PostgreSQL sur Ubuntu 20.04 - Guide étape par étape ?

  4. Installer Apache Subversion sur Ubuntu 20.04 LTS - Guide étape par étape ?

  5. Ubuntu - Exécuter la commande au démarrage avec sudo

Guide Ubuntu 22.04

Définir une adresse IP statique sur Ubuntu :un guide pour les débutants

Comment installer l'interface graphique sur le serveur Ubuntu (un guide facile)

Correction de l'erreur "Aucun adaptateur Wi-Fi trouvé" sur Ubuntu

20 commandes Ubuntu de base pour les débutants

Commande ping dans Ubuntu 22.04