Imaginez ce scénario. Vous gérez un serveur Linux auquel plusieurs utilisateurs accèdent. Tous les utilisateurs ont sudo
droits. Vous souhaitez tester certaines commandes Linux avec différents utilisateurs. Comment feriez-vous cela? Connectez-vous en tant qu'un utilisateur et testez les commandes, puis déconnectez-vous et reconnectez-vous en tant qu'un autre utilisateur et testez les commandes ? Oui, c'est une façon de le faire. Cependant, il existe un moyen simple d'exécuter des commandes en tant qu'autre utilisateur via sudo sous Linux. Lisez la suite pour le savoir.
Pour les besoins de ce guide, j'ai créé deux comptes d'utilisateurs à savoir "senthil" et "kumar" dans ma machine de test AlmaLinux 8. Je vais utiliser "senthil" comme utilisateur actuel et "kumar" comme utilisateur cible.
Je veux que l'utilisateur "senthil" puisse exécuter n'importe quelle commande en tant qu'utilisateur "kumar" sur n'importe quel hôte, sans se connecter en tant que "kumar". Entendu? Eh bien, laissez-moi vous montrer un exemple.
Exécuter des commandes en tant qu'autre utilisateur via Sudo
Je suis actuellement connecté en tant qu'utilisateur "senthil". Laissez-moi vous montrer l'utilisateur actuellement connecté avec whoami
commande.
$ whoami senthil
Maintenant, je vais lancer un simple "echo
" commande avec sudo
en tant qu'utilisateur cible "kumar" en étant connecté en tant que "senthil":
$ sudo -u kumar bash -c 'echo "My Username is $USER, and my user ID is $UID"'
Vous serez invité à entrer le mot de passe de l'utilisateur actuel (c'est-à-dire "senthil" dans ce cas). Une fois authentifié, le echo
La commande sera exécutée en tant qu'utilisateur "kumar" et affichera le nom d'utilisateur et l'ID utilisateur du "kumar".
Exemple de résultat :
[sudo] password for senthil: My Username is kumar, and my user ID is 1001
Ce que nous venons de faire en fait, c'est que nous avons exécuté le "echo
" commande en tant qu'utilisateur "kumar" alors que nous nous sommes connectés en tant que "senthil". C'est pourquoi vous voyez le nom d'utilisateur et l'identifiant d'utilisateur de kumar, mais pas ceux de senthil.
Vérifions si l'uid de l'utilisateur "kumar" est correct avec id
commande.
$ id kumar uid=1001(kumar) gid=1001(kumar) groups=1001(kumar),10(wheel)
Oui, l'uid de kumar est correct dans les deux sorties.
Ici, le -u
flag est utilisé pour exécuter la commande donnée en tant qu'un autre utilisateur (c'est-à-dire kumar dans ce cas) et bash -c
est utilisé pour mentionner le nom de la commande. Vous devez mentionner la commande entre apostrophes.
Si vous n'utilisez pas bash -c
l'option echo
renverra le nom d'utilisateur et l'uid de l'utilisateur actuel au lieu de l'utilisateur cible.
$ sudo -u kumar echo "My Username is $USER, and my user ID is $UID"
My Username is senthil, and my user ID is 1000
De même, vous pouvez exécuter n'importe quelle commande en tant qu'utilisateur différent.
Veuillez noter que dans notre exemple de commande précédent, je n'ai pas entré sudo
mot de passe de l'utilisateur cible. Pourquoi? Parce que l'echo
la commande ne nécessite pas sudo
le mot de passe.
Si vous exécutez une commande qui nécessite sudo
autorisation en tant qu'autre utilisateur, vous devez entrer le mot de passe. Voici un autre exemple.
$ sudo -u kumar bash -c 'sudo dnf --refresh update'
Exemple de résultat :
[sudo] password for senthil: [sudo] password for kumar: AlmaLinux 8 - BaseOS 344 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 388 B/s | 4.7 kB 00:12 AlmaLinux 8 - Extras 316 B/s | 3.9 kB 00:12 Dependencies resolved. Nothing to do. Complete!
Avez-vous remarqué que j'ai saisi sudo
mot de passe pour les deux utilisateurs ? Oui. Parce que nous exécutons "sudo dnf update
", qui nécessite des privilèges élevés. C'est pourquoi il est nécessaire d'entrer le sudo
mot de passe de l'utilisateur cible. Pour les commandes normales, par ex. ls
, uname
etc., nous n'avons pas besoin de saisir le mot de passe de l'utilisateur cible.
Pas seulement les commandes Linux, vous pouvez également appliquer cette méthode pour exécuter des scripts. Supposons que vous souhaitiez exécuter un script de sauvegarde enregistré dans le $HOME
répertoire d'un autre utilisateur. Vous pouvez simplement exécuter le script à partir de l'utilisateur actuel en tant qu'autre utilisateur en utilisant cette commande :
$ sudo -u kumar bash -c '~/backup_script_name'
Exécuter des commandes sans mot de passe Sudo
Parfois, vous pouvez être dans une situation où vous ne voulez pas entrer le mot de passe sudo pour chaque commande. Dans de tels cas, vous pouvez ignorer l'invite de mot de passe pour des commandes spécifiques en ajoutant NOPASSWD
option dans /etc/sudoers
fichier.
Supposons que vous souhaitiez autoriser certains utilisateurs à exécuter n'importe quel dnf commande sans mot de passe sudo. Pour ce faire, trouvez d'abord le chemin du dnf
commande utilisant which
ou whereis
commandes.
$ which dnf /usr/bin/dnf
$ whereis dnf dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz
Comme vous pouvez le voir, le chemin exécutable de dnf
la commande est /usr/bin/dnf
.
Maintenant, éditez /etc/sudoers
fichiers à l'aide de la commande :
$ sudo visudo
Attention : Veuillez noter que vous ne devez pas modifier manuellement les sudoers
fichier à l'aide de n'importe quel éditeur de texte. Utilisez toujours visudo
commande pour éditer en toute sécurité les sudoers
fichier.
Ajoutez la ligne suivante à la fin du fichier pour permettre à l'utilisateur appelé "kumar" d'exécuter dnf
commandes sans mot de passe sudo.
kumar ALL=NOPASSWD:/usr/bin/dnf
Enregistrez le fichier et quittez.
Désormais, l'utilisateur "kumar" peut exécuter dnf
commandes sans sudo
mot de passe.
[[email protected] ~]$ sudo -u kumar bash -c 'sudo dnf --refresh update' [sudo] password for senthil: AlmaLinux 8 - BaseOS 358 B/s | 4.3 kB 00:12 AlmaLinux 8 - AppStream 324 B/s | 4.7 kB 00:14 AlmaLinux 8 - Extras 302 B/s | 3.9 kB 00:13 Dependencies resolved. Nothing to do. Complete!
Voir? Nous n'avons pas besoin d'entrer sudo
mot de passe pour "kumar".
Pour révoquer ce comportement, supprimez simplement la ligne ci-dessus.
Avertissement : Vous devez être très prudent lors de l'application de cette méthode. Cette méthode peut être utilisée à la fois à des fins productives et destructrices. Par exemple, si vous autorisez les utilisateurs à exécuter 'rm'
commande sans sudo
mot de passe, ils pourraient accidentellement ou intentionnellement supprimer des fichiers importants. Ne le faites que si cela est vraiment nécessaire.
Conclusion
Dans ce bref tutoriel, nous avons expliqué comment autoriser les utilisateurs à exécuter des commandes en tant qu'autre utilisateur via sudo sous Linux. Nous avons également appris à désactiver l'invite de mot de passe sudo pour certains utilisateurs lors de l'exécution de commandes spécifiques en modifiant sudoers
fichier.
Comme je l'ai prévenu, vous devez être prudent lorsque vous testez cette méthode sur un système de production. Vous pouvez, sans le savoir, autoriser un utilisateur à exécuter une commande nuisible (par exemple, rm
) sans avoir à entrer le mot de passe sudo. Vous devez toujours être prudent lorsque vous testez ce type d'astuces Linux.
Lire connexe :
- Exécuter des commandes sur des systèmes Linux distants via SSH
- Comment exécuter des commandes particulières sans mot de passe Sudo sous Linux