GNU/Linux >> Tutoriels Linux >  >> AlmaLinux

Exécutez des commandes en tant qu'autre utilisateur via Sudo sous Linux

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

AlmaLinux
  1. Comment créer un utilisateur Sudo dans Rocky Linux 8

  2. Comment puis-je exécuter une série de commandes dans un sous-shell bash en tant qu'autre utilisateur utilisant sudo ?

  3. Comment limiter les commandes utilisateur sous Linux

  4. Comment afficher l'historique des commandes d'un autre utilisateur sous Linux ?

  5. Exécutez la commande cd en tant que superutilisateur sous Linux

Tapez les commandes Linux en majuscules pour les exécuter en tant qu'utilisateur Sudo

Comment exécuter des commandes particulières sans mot de passe Sudo sous Linux

Comment créer un utilisateur Sudo dans Ubuntu Linux

Comment exécuter des commandes Sudo sans mot de passe

Comment exécuter un alias avec Sudo sous Linux

Comment exécuter les commandes sudo sans mot de passe