sudo は現在ログインしているユーザー名をどこから取得するのでしょうか?

sudo は現在ログインしているユーザー名をどこから取得するのでしょうか?

root としてログインし、別のユーザーに su した後、「sudo su -」ではなく「sudo su」を実行しようとすると、新しいユーザーとして sudo を実行しようとしますが、root 経由で...

と入力するとenv、環境にはまだ username=root が表示されます。sudo は現在ログインしているユーザーではなく、環境パラメータを参照しているのでしょうか?

[oracle@tst-01]$ sudo su grid
Sorry, user oracle is not allowed to execute '/bin/su grid' as root on tst-01.testdomain.com.
[oracle@tst-01]$ env
HOSTNAME=tst-01.testdomain.com
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
QTDIR=/usr/lib64/qt-3.3
USER=oracle
SUDO_USER=ujjain
USERNAME=root
MAIL=/var/spool/mail/ujjain
PATH=/usr/lib/oracle/10.2.0.4/client64/bin:/usr/lib/oracle/10.2.0.4/client64/bin:/sbin:/bin:/usr/sbin:/usr/bin
PWD=/home/ujjain
LANG=en_US.utf8
HOME=/opt/apps/oracle
SUDO_COMMAND=/bin/su
SHLVL=2
LOGNAME=oracle
CVS_RSH=ssh
LESSOPEN=|/usr/bin/lesspipe.sh %s
SUDO_GID=3000
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
G_BROKEN_FILENAMES=1
_=/bin/env
[oracle@tst-01 ujjain]$ sudo su - grid
[grid@tst-01 ~]$ 

sudo が現在ログインしているユーザーに新しいユーザーへの sudo 権限があるかどうかだけを確認する場合は、sudo su newuser も機能するはずです。sudo su は何をするのでしょうか。また、非ルート ユーザーがハイフン付きの sudo su - newuser を使用することが重要なのはなぜですか。

答え1

ではsu - username、ハイフンはユーザーの環境が複製されることを意味します。つまり、デフォルトのシェルと作業ディレクトリは から読み込まれ/etc/passwd、ユーザーのログイン設定ファイル (例~/.profile) がソース化されます。つまり、通常どおりログインした場合とほぼ同じ環境が得られます。(ただし、新しいユーザーが端末を所有していない場合は、screen などのプログラムが失敗する可能性があります。)

ハイフンを使用しないと、 を呼び出したユーザーの環境がほぼ維持されsu、同じ作業ディレクトリに残され、権限がない可能性があります。

suルートユーザーが起動した場合はパスワードを要求されません。そのため、最初にsudo(またはsu) を使用してルートになった場合は、他のユーザーになるときにパスワードは必要ありません。

関連情報