我为 sudo 设置了一个别名:
alias sudo='sudo PATH=$MY_PATH'
我通过运行检查了它是否运行良好sudo printenv PATH
。
但是,运行时遇到错误sudo su - USER2
。
sudo:抱歉,您无权设置以下环境变量:PATH
我可以通过运行找到解决方法sudo -i su - USER2
,但我想知道为什么会发生此错误。
我提到https://www.sudo.ws/man/1.8.28/sudoers.man.html#Denied_command_log_entries但无法找到原因。
抱歉,您无权设置以下环境变量
用户在命令行上指定了 sudoers 不允许的环境变量。
为什么仅在使用命令时 PATH 才会被 sudoers 拒绝su
?
任何链接或评论均表示感谢。
答案1
您甚至可以在 sudoers 文件中解决这个问题。
我需要执行命令
sudo ACCEPT_EULA=Y apt install -y msodbcsql18 mssql-tools18
我通过将其设置为 sudoers.d/file 解决了这个问题
byznys_mail_sender ALL=NOPASSWD:SETENV: /usr/bin/apt install -y msodbcsql18 mssql-tools18
SETENV 是其中的关键。它允许用户修改环境。https://www.sudo.ws/docs/man/1.8.32/sudoers.man/#SETENV
答案2
Sudo 限制了用户可以设置的环境变量,因为环境变量会影响程序的行为。PATH
这尤其危险,因为它可能会导致执行不同的程序。当用户只有权限运行特定命令时,这很重要,但当用户有权限运行任意命令时,这无关紧要。
如果您有权限运行任意命令,一个简单的解决方法就是运行env
。
sudo env PATH="$MY_PATH" …
设置PATH
然后调用su - USER2
是没有意义的:su -
通常会覆盖(或者有时只是扩展)PATH
,所以你不会得到正常的环境USER2
。此外,sudo su - USER2
这是不必要的复杂化,因为sudo -i -u USER2
会这样做。