Aperçu
sudo signifie superutilisateur faire . Il permet aux utilisateurs autorisés d'exécuter la commande en tant qu'un autre utilisateur. Un autre utilisateur peut être un utilisateur régulier ou un superutilisateur. Cependant, la plupart du temps, nous l'utilisons pour exécuter une commande avec des privilèges élevés.
La commande sudo fonctionne conjointement avec les politiques de sécurité, la politique de sécurité par défaut est sudoers et elle est configurable via /etc/sudoers dossier. Ses politiques de sécurité sont hautement extensibles. On peut développer et distribuer ses propres politiques sous forme de plugins.
En quoi c'est différent de su
Sous GNU/Linux, il existe deux façons d'exécuter une commande avec des privilèges élevés :
- Utiliser su commande
- Utiliser sudo commande
su signifie changer d'utilisateur . En utilisant su, nous pouvons passer à l'utilisateur root et exécuter la commande. Mais il y a peu d'inconvénients avec cette approche.
- Nous devons partager le mot de passe root avec un autre utilisateur.
- Nous ne pouvons pas donner un accès contrôlé car l'utilisateur root est un superutilisateur
- Nous ne pouvons pas auditer ce que fait l'utilisateur.
sudo résout ces problèmes de manière unique.
- Tout d'abord, nous n'avons pas besoin de compromettre le mot de passe de l'utilisateur root. L'utilisateur régulier utilise son propre mot de passe pour exécuter la commande avec des privilèges élevés.
- Nous pouvons contrôler l'accès de l'utilisateur sudo, ce qui signifie que nous pouvons restreindre l'utilisateur à n'exécuter que certaines commandes.
- En plus de cela, toutes les activités de l'utilisateur sudo sont enregistrées, nous pouvons donc toujours vérifier quelles actions ont été effectuées. Sur GNU/Linux basé sur Debian, toutes les activités sont enregistrées dans /var/log/auth.log fichier.
Les sections ultérieures de ce didacticiel éclairent ces points.
Travailler avec sudo
Maintenant, nous avons une bonne compréhension de sudo. Mettons-nous la main à la pâte avec la pratique. Pour la démonstration, j'utilise Ubuntu. Cependant, le comportement avec une autre distribution devrait être identique.
Autoriser l'accès sudo
Ajoutons un utilisateur régulier en tant qu'utilisateur sudo. Dans mon cas, le nom d'utilisateur est linuxtechi
1) Modifiez le fichier /etc/sudoers comme suit :
$ sudo visudo
2) Ajoutez la ligne ci-dessous pour autoriser l'accès sudo à l'utilisateur linuxtechi :
linuxtechi ALL=(ALL) ALL
Dans la commande ci-dessus :
- linuxtechi indique le nom d'utilisateur
- Tout d'abord demande à ALL d'autoriser l'accès sudo depuis n'importe quel terminal/machine
- Deuxièmement (ALL) indique à la commande sudo d'être autorisée à s'exécuter en tant qu'utilisateur quelconque
- Le troisième ALL indique que toutes les commandes peuvent être exécutées en tant que root
Exécuter la commande avec des privilèges élevés
Pour exécuter la commande avec des privilèges élevés, ajoutez simplement le mot sudo à la commande comme suit :
$ sudo cat /etc/passwd
Lorsque vous exécutez cette commande, elle vous demandera le mot de passe de linuxtechi et non le mot de passe de l'utilisateur root.
Exécuter la commande en tant qu'un autre utilisateur
En plus de cela, nous pouvons utiliser sudo pour exécuter la commande en tant qu'autre utilisateur. Par exemple, dans la commande ci-dessous, l'utilisateur linuxtechi exécute la commande en tant qu'utilisateur devesh :
$ sudo -u devesh whoami [sudo] password for linuxtechi: devesh
Comportement de commande intégré
L'une des limitations de sudo est que la commande intégrée de Shell ne fonctionne pas avec. Par exemple, l'historique est intégré à la commande, si vous essayez d'exécuter cette commande avec sudo, l'erreur de commande introuvable sera signalée comme suit :
$ sudo history [sudo] password for linuxtechi: sudo: history: command not found
Accéder au shell racine
Pour surmonter le problème ci-dessus, nous pouvons accéder au shell root et exécuter n'importe quelle commande à partir de là, y compris celle intégrée de Shell.
Pour accéder au shell root, exécutez la commande ci-dessous :
$ sudo bash
Après avoir exécuté cette commande, vous remarquerez que le signe d'invite se transforme en caractère dièse (#).
Recettes
Dans cette section, nous discuterons de quelques recettes utiles qui vous aideront à améliorer votre productivité. La plupart des commandes peuvent être utilisées pour effectuer des tâches quotidiennes.
Exécuter la commande précédente en tant qu'utilisateur sudo
Supposons que vous vouliez exécuter la commande précédente avec des privilèges élevés, alors l'astuce ci-dessous sera utile :
$ sudo !4
La commande ci-dessus exécutera la 4ème commande de l'historique avec des privilèges élevés.
Si vous souhaitez exécuter la commande précédente avec les privilèges root à l'aide de la commande sudo, utilisez la commande suivante,
$ sudo !!
commande sudo avec Vim
Plusieurs fois, nous modifions les fichiers de configuration du système et lors de la sauvegarde, nous nous rendons compte que nous avons besoin d'un accès root pour le faire. Parce que cela, nous pouvons perdre nos changements. Il n'y a pas lieu de paniquer, nous pouvons utiliser la commande ci-dessous dans Vim pour sortir de cette situation :
:w !sudo tee %
Dans la commande ci-dessus :
- Les deux-points (:) indiquent que nous sommes en mode ex de Vim
- Le point d'exclamation (!) indique que nous exécutons une commande shell
- sudo et tee sont les commandes shell
- Le signe de pourcentage (%) indique toutes les lignes à partir de la ligne actuelle
Exécuter plusieurs commandes à l'aide de sudo
Jusqu'à présent, nous n'avons exécuté qu'une seule commande avec sudo, mais nous pouvons exécuter plusieurs commandes avec. Séparez simplement les commandes à l'aide d'un point-virgule (;) comme suit :
$ sudo -- bash -c 'pwd; hostname; whoami'
Dans la commande ci-dessus :
- Le double tiret (–) arrête le traitement des commutateurs de ligne de commande
- bash indique le nom du shell à utiliser pour l'exécution
- Les commandes à exécuter sont suivies de l'option –c
Exécuter la commande sudo sans mot de passe
Lorsque la commande sudo est exécutée pour la première fois, elle demandera un mot de passe et, par défaut, le mot de passe sera mis en cache pendant les 15 prochaines minutes. Cependant, nous pouvons remplacer ce comportement et désactiver l'authentification par mot de passe à l'aide du mot-clé NOPASSWD comme suit :
linuxtechi ALL=(ALL) NOPASSWD: ALL
Restreindre l'utilisateur à exécuter certaines commandes
Pour fournir un accès contrôlé, nous pouvons restreindre l'utilisateur sudo à n'exécuter que certaines commandes. Par exemple, la ligne ci-dessous permet l'exécution des commandes echo et ls uniquement
linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
Ajouter une ligne ou une chaîne de texte à un fichier à l'aide de la commande sudo
Il existe certains scénarios dans lesquels nous devons ajouter quelques lignes à un fichier existant avec un utilisateur local disposant des droits sudo,
$ echo 'chaîne de texte' | sudo tee -a
L'exemple est montré ci-dessous :
[email protected]:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a /etc/apt/sources.list deb http://ftp.de.debian.org/debian buster main contrib [email protected]:~$
Autre moyen d'ajouter des lignes ou du texte à un fichier existant à l'aide de la commande sudo,
sudo sh -c 'echo "deb http://ftp.de.debian.org/debian buster main contrib" >> /etc/apt/sources.list'
Insights sur sudo
Laissez-nous en savoir plus sur la commande sudo pour en savoir plus.
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 145040 Jun 13 2017 /usr/bin/sudo
Si vous observez attentivement les autorisations de fichiers, setuid bit est activé sur sudo. Lorsqu'un utilisateur exécute ce binaire, il s'exécutera avec les privilèges de l'utilisateur propriétaire du fichier. Dans ce cas, il s'agit de l'utilisateur root.
Pour le démontrer, nous pouvons utiliser la commande id comme suit :
$ id uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)
Lorsque nous exécutons la commande id sans sudo, l'identifiant de l'utilisateur linuxtechi sera affiché.
$ sudo id uid=0(root) gid=0(root) groups=0(root)
Mais si nous exécutons la commande id avec sudo, l'identifiant de l'utilisateur root sera affiché.
Conclusion
Le point à retenir de cet article est que sudo offre un accès plus contrôlé aux utilisateurs réguliers. En utilisant ces techniques, plusieurs utilisateurs peuvent interagir avec GNU/Linux de manière sécurisée.
Lire aussi :Comment créer des liens matériels et logiciels (liens symboliques) sur les systèmes Linux