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 的作用是什么?为什么非 root 用户使用带有连字符的 sudo su - newuser 很重要?

答案1

在 中su - username,连字符表示复制用户的环境,即从 读取默认 shell 和工作目录,并且源自/etc/passwd用户的任何登录配置文件(例如)。~/.profile简而言之,您几乎获得了与正常登录相同的环境。 (虽然新用户可能不拥有该终端,导致 screen 等程序失败。)

不使用连字符,将导致您或多或少保留调用的用户的环境su,包括将您留在同一工作目录中,您可能没有权限。

su如果 root 用户调用它,则不会要求输入密码,因此如果您首先使用sudo(或su) 成为 root,则无需密码即可成为任何其他用户。

相关内容