sudo 從哪裡取得目前登入的使用者名稱?

sudo 從哪裡取得目前登入的使用者名稱?

當我以root身份登入並su-ing到另一個用戶後嘗試“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 權限,則 sudo su newuser 似乎也應該起作用。 sudo su 的作用是什麼?

答案1

在 中su - username,連字符表示複製使用者的環境,即從 讀取預設 shell 和工作目錄,並且源自/etc/passwd使用者的任何登入設定檔(例如)。~/.profile簡而言之,您幾乎獲得了與正常登入相同的環境。 (雖然新用戶可能不擁有該終端,導致 screen 等程式失敗。)

不使用連字符,將導致您或多或少保留調用的用戶的環境su,包括將您留在同一工作目錄中,您可能沒有權限。

su如果 root 使用者呼叫它,則不會要求輸入密碼,因此如果您先使用sudo(或su) 成為 root,則無需密碼即可成為任何其他使用者。

相關內容