`/etc/sudoers` -- 只为一个命令指定 `env_keep`?

sim*_*mon 24 sudo

有什么方法可以指定sudo只为指定的命令保留某些环境变量吗?出于某些目的,我想要我的$HOMEenv。运行某些命令时保留的变量。出于其他目的和其他命令,我希望它重置。这可以做到/etc/sudoers吗?

编辑:

谢谢你的回答。我想知道我是否可以问一个后续问题,即“那么,为什么这不起作用?”

在我尝试开始工作的示例中,我想sudo nano阅读我的$HOME/.nanorc. 如果我使用这个:

Defaults:simon env_keep=HOME
Run Code Online (Sandbox Code Playgroud)

它完美地工作。如果我使用这个:

Defaults!/bin/nano env_keep=HOME
Run Code Online (Sandbox Code Playgroud)

或这个:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME
Run Code Online (Sandbox Code Playgroud)

它根本不起作用。关于为什么的任何建议?(顺便说一句,我正在进行 Debian 测试。)

(注意:我不认为它是nano特定的,顺便说一句——我可以用一个简单的echos的单行 bash 脚本重现这种行为$HOME)。

Gil*_*il' 26

env_keep仅覆盖/path/to/command(当通过任何规则调用时,由任何用户调用)和用户joe(无论他正在运行什么命令):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME
Run Code Online (Sandbox Code Playgroud)

您可以使用-=+=来删除或添加一个条目到env_keep列表中。


Arr*_*ter 7

Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME
Run Code Online (Sandbox Code Playgroud)

这些行来自我自己,/etc/sudoers以纠正pbuilder查找$HOME其用户配置文件但必须以 root 身份运行的问题(将其移动到/root有点违背同时拥有系统和用户配置文件的目的)。