sudo:抱歉,您无权设置以下环境变量

sudo:抱歉,您无权设置以下环境变量

我为 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会这样做。

相关内容