有什么方法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