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

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

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

编辑:

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

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

Defaults:simon env_keep=HOME

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

Defaults!/bin/nano env_keep=HOME

或这个:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

它根本不起作用。关于原因有什么建议吗? (顺便说一句,我正在进行 Debian 测试。)

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

答案1

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

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

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

答案2

Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

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

答案3

男人须藤:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

因此,是的,您可以在 /etc/sudoers.conf 中使用env_reset,env_keep和 来做到这一点。env_check

相关内容