为什么给 sudo su 提供环境变量会失败?

为什么给 sudo su 提供环境变量会失败?

将 PATH 变量放入sudo su - USER发生错误:

USER1@SERVER:~:$ sudo PATH=$PATH su - USER2
sudo: sorry, you are not allowed to set the following environment variables: PATH

手动的

用户在命令行上指定了 sudoers 不允许的环境变量。

似乎不允许给出环境变量。

但是,当我尝试使用其他命令时,

USER1@SERVER:~:$ sudo PATH=$PATH printenv PATH
{PATH OF USER1}
USER1@SERVER:~:$ sudo PATH=$PATH -su USER2
USER2@SERVER:~:$

提供环境变量不会产生任何错误。

我知道还有其他好的方法来切换到 USER2,但我想通过弄清楚为什么会发生这种情况来更多地了解 sudo/sudoers。

为什么运行正常sudo PATH=$PATH su - USER2却出错sudo PATH=$PATH -su USER2了?


/etc/sudoers 中的一些行可能相关。

Cmnd_Alias SU = /usr/bin/sudoedit, /usr/sbin/visudo, /sbin/sulogin, /sbin/sushell
Cmnd_Alias SWITCH = !/bin/su, !/bin/su -, /bin/su [-] *, !/bin/su - *root, !/bin/su root
...
Defaults    env_reset
Defaults    env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR ..." # doesn't contain PATH / I found that putting env variables of this list doesn't make an error.
...
USER1 ALL=(ALL) NOPASSWD: ALL, !SU, SWITCH, !KRNMOD, !SHUTDOWN, !REBOOT, !HALT, !INIT
[USER1@SERVER ~]$ sudo -l
Matching Defaults entries for USER1 on SERVER:
    syslog=auth, log_year, logfile=/var/log/sudo.log, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS MAIL PS1 PS2 QTDIR USERNAME LANG
    LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS
    _XKB_CHARSET XAUTHORITY"

User USER1 may run the following commands on SERVER:
    (ALL) NOPASSWD: ALL, !/usr/bin/sudoedit, !/usr/sbin/visudo, !/sbin/sulogin, !/sbin/sushell, !/bin/su, !/bin/su -, /bin/su [-] *, !/bin/su - *root, !/bin/su root,
        !/sbin/insmod, !/sbin/rmmod, !/sbin/depmod, !/sbin/modprobe, !/sbin/shutdown, !/sbin/poweroff, !/usr/bin/reboot, !/usr/bin/consolehelper, !/usr/bin/halt, !/sbin/init

答案1

关于包含PATH拒绝您的命令的错误实际上有点误导。

根本错误在于您的定义拒绝了sudo su - USER2,因此无论您尝试定义什么变量,您仍将被拒绝访问。只是提供了不同的错误消息。

尽管如此,这个问题几乎完全无关紧要,因为你的sudoers定义中有一个明显的漏洞,允许一个简单的逃避根源:

sudo -s

此时,你可以做任何你喜欢的事情,而不必考虑sudo内置的控件

相关内容