web-dev-qa-db-fra.com

Identifier l'utilisateur dans un script Bash appelé par sudo

Si je crée le script /root/bin/whoami.sh contenant:

#!/bin/bash
whoami

et ce script est appelé par un utilisateur avec un Sudo correctement configuré, il indiquera

root

Existe-t-il un moyen rapide d'obtenir l'utilisateur réel dans un script, ou devrai-je recourir à des paramètres en passant ce nom d'utilisateur?

94
quadmore

$ Sudo_USER ne fonctionne pas si vous utilisez Sudo su -.
Il nécessite également plusieurs vérifications - si $USER == 'root' puis obtenez $Sudo_USER.

Au lieu de la commande whoami utilisez who am i. Cela exécute la commande who filtrée pour la session en cours. Il vous donne plus d'informations que nécessaire. Donc, faites cela pour obtenir uniquement l'utilisateur:

who am i | awk '{print $1}'

Alternativement (et plus simplement), vous pouvez utiliser logname. Cela fait la même chose que la déclaration ci-dessus.

Cela vous donne le nom d'utilisateur qui s'est connecté à la session.

Ceux-ci fonctionnent indépendamment de Sudo ou Sudo su [whatever]. Il fonctionne également quel que soit le nombre d'appels de su et Sudo.

120
evan

Je pense que $ Sudo_USER est valide.

#!/bin/bash
echo $Sudo_USER
whoami
49
Brandon Horsley

Voici comment obtenir le nom d'utilisateur de la personne qui a appelé le script, peu importe si Sudo ou non:

if [ $Sudo_USER ]; then user=$Sudo_USER; else user=`whoami`; fi

ou une version plus courte

[ $Sudo_USER ] && user=$Sudo_USER || user=`whoami`
12
Alexei Tenitski

who am i | awk '{print $1}' n'a pas fonctionné pour moi mais who|awk '{print $1}' servira le travail

2
Srinivas

Bizarrement, le système fait la distinction entre ID réels et effectifs , mais je ne trouve aucun programme qui exporte cela au niveau du shell.

1
msw

Utilisation de whoami, who am i, who, id ou $Sudo_USER n'est pas ici.

En fait, who n'est jamais une solution à la question, car il ne listera que les utilisateurs connectés, ce qui pourrait être des dizaines ...

À mes yeux, la seule réponse valable est l'utilisation de logname.

J'espère que cela t'aides

Rob

0
Rob