#1 Le 15/11/2016, à 15:54
- fnux
[Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
Bonjour,
Lorsque je lance un script bash avec la commande sudo (par exemple sudo ./monscript.sh), la variable $USER devient "root" et c'est normal.
Ma question est donc la suivante :
Dans ce script, est-il alors possible de récupérer le nom de l'utilisateur qui a lancé la commande sudo ./monscript ?
Si oui, comment faire ?
Merci d'avance de vos suggestions car je suis coincé.
Cordialement.
Dernière modification par fnux (Le 15/11/2016, à 22:25)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.
Hors ligne
#2 Le 15/11/2016, à 16:14
- kholo
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
salut
comme ça par exemple :
sudo ./monscript.sh $USER
exemple monscript.sh
#!/bin/bash
echo "user coutant : $USER"
echo "l'utilisateur qui a lancé ce programme est $1"
exit 0
Dernière modification par kholo (Le 15/11/2016, à 17:50)
Hors ligne
#3 Le 15/11/2016, à 16:17
- bbtux2
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
bonjour,
Dans le fichier "/var/log/auth.log", tu doit avoir une ligne qui se crée où tu as l'user (bruno) et le nom de la commande.
bruno@luke:~$ sudo tail -f /var/log/auth.log
donne
Nov 15 16:09:54 luke sudo: bruno : TTY=pts/1 ; PWD=/home/bruno ; USER=root ; COMMAND=/usr/bin/tail -f /var/log/auth.log
Hors ligne
#4 Le 15/11/2016, à 17:25
- erresse
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
Salut,
Il faut utiliser les variables d'environnement spéciales : $SUDO_USER, $SUDO_GROUP, etc... qui renvoient les informations relatives à l'utilisateur qui a lancé la commande "sudo".
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#5 Le 15/11/2016, à 17:32
- kholo
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
Salut,
Il faut utiliser les variables d'environnement spéciales : $SUDO_USER, $SUDO_GROUP, etc... qui renvoient les informations relatives à l'utilisateur qui a lancé la commande "sudo".
elles n'existent pas par défaut !?
Hors ligne
#6 Le 15/11/2016, à 17:48
- erresse
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
Je viens de faire le test :
totor@totor-mate:~/Bureau$ ./test
user=totor
sudo_user=
totor@totor-mate:~/Bureau$ sudo ./test
[sudo] Mot de passe de totor :
user=root
sudo_user=totor
totor@totor-mate:~/Bureau$
Chez moi ça marche et je n'ai rien installé de particulier...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#7 Le 15/11/2016, à 18:10
- ar barzh paour
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
@kholo
dans le post 3 bbtux2 t'as donné une réponse
grep "./monscript.sh" /var/log/auth.log | awk {'print $1 " " $2 " " $3 " " $6}'
devrait te donner la(/les) réponse
(donne la date et l'utilisateur)
Dernière modification par ar barzh paour (Le 15/11/2016, à 18:13)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#8 Le 15/11/2016, à 20:17
- fnux
Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?
Bonsoir,
Merci à tous et en particulier à erresse car la variable $SUDO_USER (que je ne connaissais pas) répond très exactement à mon besoin.
Encore merci.
D'ailleurs, voici un petit script de test :
#!/bin/sh
#
# Script: test_sudo.sh
# UpDate: November 18, 2016
# Release: r02
# Author: Fnux
# e-mail: fnux.fl@gmail.com
# Licence: CC-By-Sa
#
# Goal of this script: Check the use of sudo, su - or su when starting the script.
# --------------------------------------------------------------------------------
#
# Check the use of sudo, su or su - to allow executing the complete script.
#
check_priviledges()
{
clear
$ECHO "\n${BLUE}Hello ${GREEN}$ME${BLUE}"
if [ "$ME" != "root" ]
then
$ECHO "${RED}WARNING\n-------\n"
case $VENDOR in
'Debian'|'elementary'|'LMDE'|'Mint'|'Ubuntu'|'Zorin')
$ECHO "${RED}This script can't be used without the root privileges (i.e.${BACK} [sudo]${RED} or ${BACK}[su]${RED}).\n\n${GREEN}Please restart the script with the command: ${BACK}[sudo ./test_sudo.sh]${GREEN} or start\na ${RED}root session${GREEN} using ${BACK}[su]${GREEN}, then start ${BACK}[./test_sudo.sh]\n\n${BLUE}Goodbye.\n${BACK}$dlgline\n";;
*)
$ECHO "${RED}This script can't be used without the root privileges (${BACK}[su -]${RED}).\n\n${GREEN}Please start a ${RED}root session${GREEN} using ${BACK}[su -]${GREEN} and not ${RED}([su])${GREEN} then goto\nthe folder where you've installed this script and start ${BACK}[./test_sudo.sh]\n\n${BLUE}Goodbye.\n${BACK}$dlgline\n";;
esac
exit
fi
while [ "$MYUSERNAME" = "" ]
do
$ECHO "\n${RED}WARNING\n-------\n\n${RED}You're using the root account priviledges.\n\nSo, I can't get your account user name and this script needs this information\nto continue.\n"
$ECHO -n ${YELLOW}
read -p "Please enter your account user name to continue: ? " MYUSERNAME
if [ "$MYUSERNAME" = "" ]
then
$ECHO "\n${GREEN}Your account user name still is empty!\n"
$ECHO -n ${YELLOW}
read -p "Do you want to enter your account user name to continue: (empty return = Yes)? " RESPONSE_RETRY
if [ "$RESPONSE_RETRY" = "" ] || [ "$RESPONSE_RETRY" = "Y" ] || [ "$RESPONSE_RETRY" = "y" ]
then
ME_SUDO=""
clear
else
$ECHO "\n${RED}This script can't continue without knowing your user name.${BLUE}\n\nGoodbye.\n${BACK}$dlgline"
exit
fi
else
ME_SUDO=$MYUSERNAME
$ECHO "\n${BLUE}Hello ${GREEN}$ME_SUDO${BLUE} using ${RED}$ME${BLUE} privileges.\n\nThank you to the Ubuntu community helping me to solve this problem.\n\nGoodbye.\n${BACK}$dlgline\n"
fi
done
}
# --------------------------------------------------------------------------------
#
# get the OS vendor name
#
get_osname()
{
if [ -e /etc/arch-release ]
then
VENDOR="Arch"
elif [ -e /etc/fedora-release ]
then
VENDOR="Fedora"
elif [ -e /etc/centos-release ]
then
VENDOR="CentOS"
elif [ -e /etc/redhat-release ]
then
VENDOR="RedHat"
elif [ "$VENDOR" = "" ]
then
VENDOR=$(lsb_release -si)
fi
if [ "$VENDOR" = "LinuxMint" ]
then
VENDOR="Mint"
fi
if [ "$VENDOR" = "ManjaroLinux" ]
then
VENDOR="Manjaro"
fi
if [ "$VENDOR" = "arch" ]
then
VENDOR="Arch"
fi
}
# --------------------------------------------------------------------------------
#
# get the OS vendor name
#
get_osname
# --------------------------------------------------------------------------------
#
# set the variables used in this script
#
set_variables()
{
ME=$USER
ME_SUDO=$SUDO_USER
#
# assign prompt colors
#
RED="\033[01;31m"
GREEN="\033[01;32m"
YELLOW="\033[01;33m"
BLUE="\033[01;34m"
PINK="\033[01;35m"
CIAN="\033[01;36m"
WHITE="\033[01;37m"
BACK="\033[0m"
#
dlgline="\n--------------------------------------------------------------------------------"
#
# set the $ECHO command for the difference of sh and bash with different distros
#
if [ "$VENDOR" = "Debian" ] || [ "$VENDOR" = "Mint" ] || [ "$VENDOR" = "Ubuntu" ] || [ "$VENDOR" = "elementary" ] || [ "$VENDOR" = "Zorin" ]
then
ECHO="echo "
else
ECHO="echo -e "
fi
}
# --------------------------------------------------------------------------------
#
# Start the script
#
clear
set_variables
check_priviledges
exit
# --------------------------------End of the script -----------------------------
Merci de vos éventuels commentaires à propos de ce script.
Cordialement.
Dernière modification par fnux (Le 18/11/2016, à 19:35)
N'engage pas un débat lors d'un dîner car celui qui n'a pas faim aura le dernier mot. - R. Whately
FWPBLA - The Froggies West Palm Beach Linux Association.
Hors ligne