Joh*_*unt 6 bash sudo environment-variables
我有一个设置几个环境变量的脚本,然后最后使用 sudo 调用另一个脚本。
使用 sudo 运行的脚本必须能够获取这些变量,而且我并不总是确定这些变量是什么。
有没有办法配置这个 sudoers 条目以允许命令完全访问调用者环境变量?
%deploy ALL=NOPASSWD: /bin/build.sh
Run Code Online (Sandbox Code Playgroud)
当我从我的脚本运行 sudo 命令时:
sudo -E build.sh "$@"
Run Code Online (Sandbox Code Playgroud)
我得到:
sudo: sorry, you are not allowed to preserve the environment
Run Code Online (Sandbox Code Playgroud)
谷歌搜索我只找到了保留特定变量的方法,而不仅仅是所有变量。
在测试了第一个答案并仍然得到 后sudo: sorry, you are not allowed to preserve the environment
,我决定四处寻找更好的解决方案。
经过一番测试后,我发现重要的选项是setenv
.
Defaults!/bin/build.sh setenv
Run Code Online (Sandbox Code Playgroud)
为了使其更安全,我们可以添加一些设置:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
Defaults!/bin/build.sh setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
%deploy ALL=(ALL) NOPASSWD: /bin/build.sh *
Run Code Online (Sandbox Code Playgroud)