[LEFT]I have some comments about a previously closed topic whose name is the same as above
Omitted from the discussion was the situation with a "sudo command or sudo within a script".
There is an inconsistency between systems. On some systems $LOGNAME is invariant, on others,
on RedHat sudo su and echo $LOGNAME reports the name of the person invoking sudo.
on SUSE, sudo su and echo $LOGNAME reports root. $LOGNAME and $USER report root
Here is a workaround that I discovered and propose:
sudo xxx or sudo su sets up an environment variable SUDO_USER, SUDO_UID,SUDO_GID, and SUDO_COMMAND
It always reports the name of the logon invoking sudo (the caller)
What happens when I sudo su and as root su a third_user?
my system says $LOGNAME and $USER contain the "third_user" id. But
SUDO was invariant
I did not check what happens if the third_user issues as I have liimited my admin logon to one ID.
Please evaluate this posting and re-open that above mentioned topic to see if it is worth merging them together.
I have no idea which thread you are referring to, perhaps you can provide a link to this thread?
Anyway, variables like "$LOGNAME" or "$USER" may be common but are in no way standardised (and even less is their content) and hence it is bad practice to rely on any of them. I suggest you use the id command to get the current user ID.
If you want a script you call via sudo to know from which UID it has been called use an argument to do so. Consider this template command:
and subsequently you could inspect the arguments inside /some/command to find out by whom you have been called. Wouldn't that be a more robust way than to rely on some variables which may be defined readonly on one system and different on another?
Its 5pm in Montreal. I will do my due diligence tomorrow AM.
It looks interesting
My original problem was a script that had multiple functions such as
The script invokes functions 1,2,3,... and I needed to do sudo for function 4 and continue with function 5..end
I am aware that I cannot sudo a function so, I have been trying other techniques to achieve what needs to be done. This research led to this posting.
the sudo'd function needs to know who invoked sudo in a consistent manner. I found it different between different vendors of Linux (SUSE and RedHat)
Traditionally there was a difference between SysV su and BSD su, only the latter sets USER (and LOGNAME does not exist).
Portable is only su - that is a kind of login shell that sets LOGNAME (if exists) and USER.
GNU/Linux started more BSD-compatible, but later partly changed to Posix that is more similar to SysV.
So yes, it is a mess, and sudo, being a kind of su, makes it even worse.