UNIX $USER and $LOGNAME environment variables

Tags
shell scripts

 
Thread Tools Search this Thread
# 1  
Old 04-16-2018
UNIX $USER and $LOGNAME environment variables

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.



# 2  
Old 04-16-2018
Quote:
Originally Posted by lsatenstein
[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:

Code:
sudo su - root -c /some/command -abc arg1 arg2

its call could be turned into:

Code:
chUser="$(id -un)"
sudo su - root -c /some/command -abc "$chUser" arg1 arg2

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?

I hope this helps.

bakunin
# 3  
Old 04-16-2018
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

function 1
function 2
function 4.
function ...

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)

Thank you for the response.
# 4  
Old 04-17-2018
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.

|
Thread Tools Search this Thread
Search this Thread:
Advanced Search

More UNIX and Linux Forum Topics You Might Find Helpful
Doing math using user defined input and system environment variables saravanapandi Shell Programming and Scripting 3 02-01-2014 12:46 AM
Environment Variables angshuman HP-UX 0 01-25-2014 06:45 AM
Run script through cron with user environment variables gacanepa Shell Programming and Scripting 2 12-17-2013 10:02 AM
Environment Variables sai_2507 HP-UX 1 05-29-2012 04:43 AM
Environment variables rwa25 Shell Programming and Scripting 5 04-28-2012 03:57 AM
Using Datastage environment variables in Unix script bghosh Shell Programming and Scripting 1 02-29-2012 07:18 AM
Unix $USER and $LOGNAME environment variables royalibrahim Shell Programming and Scripting 7 01-20-2011 06:18 AM
Environment variables sravani UNIX for Dummies Questions & Answers 6 10-20-2010 11:22 AM
using environment variables lassimanji Shell Programming and Scripting 2 04-29-2009 03:58 PM
environment variables radhika03 Shell Programming and Scripting 3 01-22-2007 01:58 PM
by using c++ how to set environment variables in unix sada@123 UNIX for Advanced & Expert Users 1 03-21-2006 01:59 AM
help..Environment variables... sekar sundaram UNIX for Dummies Questions & Answers 3 08-30-2005 04:35 AM
environment variables spavlov UNIX for Dummies Questions & Answers 3 08-20-2003 10:49 AM
environment variables Esaia Programming 2 02-20-2003 08:19 PM
what is the use of Environment variables indianguru UNIX for Dummies Questions & Answers 2 07-24-2001 10:41 PM