我读到man sudo
以下内容:
--preserve-env
向安全策略表明用户希望保留其现有的环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。
但我想知道,即使我没有这个许可,是什么阻止我跑步
sudo env MY_VAR=$MY_VAR <cmd>
?
我读到man sudo
以下内容:
--preserve-env
向安全策略表明用户希望保留其现有的环境变量。如果用户没有保护环境的权限,安全策略可能会返回错误。
但我想知道,即使我没有这个许可,是什么阻止我跑步
sudo env MY_VAR=$MY_VAR <cmd>
?
有趣的问题。首先,手动设置环境很乏味,所以
--preserve-env
显然更好。对于安全方面: sudo 配置可以禁止您使用 sudo 执行,
env
或者更好地只允许运行不包含env
.我会考虑使用 sudoer 配置,它不限于作为完全 root 访问的有限命令列表。这不仅仅是
env
。为什么不做呢sudo bash -c 'export MY_VAR="$MY_VAR"; exec <cmd>'
。这与您不应逃脱的受限 shell 类似。如果您不严格限制可以运行的内容,则可能有一条逃生路线。我认为 sudoer 手册页的这一部分支持这一点:
因此,如果允许用户使用所有命令,包括
env
他/她也可以(默认情况下)使用--preserve-env
. 如果配置仅允许特定命令,则默认为 NOSETENV,因此用户既不能--preserve-env
也不能env
调用来绕过它。TL;DR:您不太可能缺乏使用权限
--preserve-env
但能够使用env
.