将 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
内置的控件