Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/11/2016, à 16:54

fnux

[Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?

Bonjour, smile

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é. hmm

Cordialement.

Dernière modification par fnux (Le 15/11/2016, à 23: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, à 17: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, à 18:50)

Hors ligne

#3 Le 15/11/2016, à 17: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, à 18: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 résolu, 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, à 18:32

kholo

Re : [Résolu] Récupérer le $USER du lancement d'un script malgré sudo ?

erresse a écrit :

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, à 18: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 résolu, 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, à 19: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, à 19:13)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 21: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. big_smile

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, à 20: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