linuxbashunixsudosu

How do you find the original user through multiple sudo and su commands?


When running a script via sudo or su I want to get the original user. This should happen regardless of multiple sudo or su runs inside of each other and specifically sudo su -.


Solution

  • Results:

    Use who am i | awk '{print $1}' OR logname as no other methods are guaranteed.

    Logged in as self:

    evan> echo $USER
    evan
    evan> echo $SUDO_USER
    
    evan> echo $LOGNAME
    evan
    evan> whoami
    evan
    evan> who am i | awk '{print $1}'
    evan
    evan> logname
    evan
    evan>
    

    Normal sudo:

    evan> sudo -s
    root> echo $USER
    root
    root> echo $SUDO_USER
    evan
    root> echo $LOGNAME
    root
    root> whoami
    root
    root> who am i | awk '{print $1}'
    evan
    root> logname
    evan
    root>
    

    sudo su - :

    evan> sudo su -
    [root ]# echo $USER
    root
    [root ]# echo $SUDO_USER
    
    [root ]# echo $LOGNAME
    root
    [root ]# whoami
    root
    [root ]# who am i | awk '{print $1}'
    evan
    [root ]# logname
    evan
    [root ]#
    

    sudo su -; su tom :

    evan> sudo su -
    [root ]# su tom
    tom$ echo $USER
    tom
    tom$ echo $SUDO_USER
    
    tom$ echo $LOGNAME
    tom
    tom$ whoami
    tom
    tom$ who am i | awk '{print $1}'
    evan
    tom$ logname
    evan
    tom$