[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: whoami problem when two or more users have the same uid
From: |
flaviano petrocchi |
Subject: |
Re: whoami problem when two or more users have the same uid |
Date: |
Mon, 11 Aug 2008 08:56:49 +0200 |
Thanks for your explanation Bob. I will keep root above my other user in the
passwd file, so that all the scripts out there will continue to work properly.
Best regards.
Flaviano
2008/8/10 Bob Proulx <address@hidden>:
> First, thank you for making this suggestion. However I do not believe
> this to be a deficency of the whoami command. This is expected
> behavior in the GNU and Unix systems.
>
> flaviano petrocchi wrote:
>> I use an alternate root user with login capabilities, created with
>> "useradd -u 0 -o -g 0 -G 0 -m -s /bin/bash superuser".
>
> Note that you are simply creating a new way to log into the account.
> You are not creating a new account. You are simply enabling a new way
> to log into the existing root superuser account. I think that is a
> key point. It isn't a separate account. This isn't even a documented
> behavior as far as I know. It is simply the way the implementation
> has always worked.
>
>> If I login with superuser, whoami returns root or superuser
>> depending on which user comes before in the /etc/passwd file.
>
> Yes. That is because the password file defines the mapping from uid
> to name. The first one in the file defines the name. This is the way
> it has always worked. For decades.
>
>> echo $USER instead always returns the correct user name.
>
> Caution here. The USER variable is sometimes overridden by the
> operating system. In particular Red Hat overrides USER and LOGNAME
> from their original settings in /etc/profile.
>
> Traditionally LOGNAME referred to the name the user used to log into
> the system. (This was also available with 'who am i' too.) RH breaks
> this by setting both LOGNAME and USER to the output of 'id -un'.
> Other systems that I am familiar with (Debian, Ubuntu, SuSE, HP-UX,
> Solaris) do not override the value.
>
>> I think whoami should always report the correct name maybe
>
> The disagreement here is on the "correct" name. The correct name is
> the named defined for the current effective user id from the password
> database (not necessarily the /etc/passwd file for example if NIS/YP
> or LDAP is in use). The correct name is not the $USER nor $LOGNAME
> since those might be changed and invalid in the environment.
>
>> retrieving the USER environment variable instead of parsing the
>> passwd file. Those who use whoami to check if a user is root should
>> instead use id -u and check if the uid is 0.
>
> The 'whoami' command must map the current user id to the associated
> name. Otherwise too much system breakage would occur. For example
> contemplate the following:
>
> $ USER=foo whoami
> foo
>
> That wouldn't be good. If a script desires to use $USER then the
> script should simply use $USER instead of calling 'whoami'. Also
> although I admit that while I usually use 'whoami' in my scripts the
> standard POSIX standard method would be to use 'id -un'.
>
> Note that 'whoami' is a BSD derived utility and isn't standardized by
> POSIX. BSD therefore is the reference for the behavior of this
> command. This has decades of legacy behavior and therefore it really
> isn't practical to try to change the behavior now. Instead new
> behavior should be part of a new command. But in this case what you
> wish is easily available simply by using the $USER value directly so
> there really isn't a need to put this in a command at all.
>
> See also the 'logname' and 'who am i' commands.
>
> Bob
>