Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Identify user in a Bash script called by sudo

Tags:

linux

bash

sudo

People also ask

How do I list sudo commands for a user?

Method 1: Using sudo -l or --list. As per the man page, sudo can be used with -l or --list to get the list of allowed and forbidden commands for any particular user. If the user deepak does not has sudo privilege, you will end up with a password prompt.


$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.


I think $SUDO_USER is valid.

#!/bin/bash
echo $SUDO_USER
whoami

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`

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


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

LOCAL_USER_ID=$(id -u $(logname))