Identify user in a Bash script called by sudo

前端 未结 7 1972
闹比i
闹比i 2020-12-07 14:39

If I create the script /root/bin/whoami.sh containing:

#!/bin/bash
whoami

and this script is called by a user with a properly

相关标签:
7条回答
  • 2020-12-07 14:50

    Using whoami, who am i, who, id or $SUDO_USER isn't right here.

    Actually, who is never a solution to the question, as it will only list the logged in users, which might be dozens...

    In my eyes, the only valuable answer is the use of logname.

    Hope this helps

    Rob

    0 讨论(0)
  • 2020-12-07 14:50

    If it's the UID you're looking for (useful for docker shenanigans), then this works:

    LOCAL_USER_ID=$(id -u $(logname))
    
    0 讨论(0)
  • 2020-12-07 14:52

    Here is how to get the username of the person who called the script no matter if sudo or not:

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

    or a shorter version

    [ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
    
    0 讨论(0)
  • 2020-12-07 14:53

    I think $SUDO_USER is valid.

    #!/bin/bash
    echo $SUDO_USER
    whoami
    
    0 讨论(0)
  • 2020-12-07 14:59

    who am i | awk '{print $1}' didn't work for me but who|awk '{print $1}' will serve the job

    0 讨论(0)
  • 2020-12-07 15:01

    $SUDO_USER doesn't work if you are using sudo su -.
    It also requires multiple checks - if $USER == 'root' then get $SUDO_USER.

    Instead of the command whoami use who am i. This runs the who command filtered for the current session. It gives you more info than you need. So, do this to get just the user:

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

    Alternatively (and simpler) you can use logname. It does the same thing as the above statement.

    This gives you the username that logged in to the session.

    These work regardless of sudo or sudo su [whatever]. It also works regardless of how many times su and sudo are called.

    0 讨论(0)
提交回复
热议问题