path - 如何在 Fabric 中将 PATH 变量添加到 sudo

标签 path fabric

当我尝试使用fabric 远程部署Apache 服务器时,我遇到了一个问题。我尝试首先使用 sudo() 向 PATH 变量添加新路径,然后我也尝试使用 sudo() 回显 $PATH。但是,我发现新路径似乎根本没有添加到 PATH 中。结果,我无法通过 sudo() 执行该路径中的 bin。

[name@IP:port] Executing task 'reboot'
[name@IP:port] sudo: export PATH=$PATH:/new/path/to/add/install/bin
[name@IP:port] out: sudo password: 

[name@IP:port] sudo: echo $PATH
[name@IP:port] out: sudo password:
[name@IP:port] out: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

谁能告诉我如何在 Fabric 中为 sudo 命令添加路径变量?提前致谢。

最佳答案

  1. 在以 root 身份运行时始终提供可执行文件的完整路径应该是一种习惯,以避免将特洛伊木马程序推送到您的 PATH 中。

  2. 通过 export 设置环境变量仅适用于当前 shell session - 这是由 sudo 调用的 session 。一旦你的命令(export,在本例中)被执行,shell 退出,并带走你的环境变量。下次您执行 sudo 时,会设置一个新的 shell(具有默认环境),它对您之前的 export 一无所知。

  3. 配置文件 /etc/sudoers 通常包含一个条目,如 Defaults env_reset,其作用是在 调用中设置环境变量 环境不会复制到 sudo 调用的环境中,因此在您当前的环境中调用 export然后 执行 sudo 也不起作用。这样做是出于安全原因(上面的引用文献 1)。

  4. 可以通过 env_keep 设置 /etc/sudoers 来对 3) 进行异常(exception)处理。有关详细信息,请参阅 man sudoers。但是,请参阅 1) - 这不是一个好主意。

  5. sudo 有一个 -E 选项,它允许保留调用者的环境(包括例如扩展的 PATH) ,但这需要在 /etc/sudoers 中设置 SETENV。再次重申,有关详细信息,请参阅 man sudoers,并注意 1).

关于path - 如何在 Fabric 中将 PATH 变量添加到 sudo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13450358/

相关文章:

python - 在 Fabric 任务中使用环境相关的 Django 设置

python - 如何将自定义选项传递给 fab 命令

eclipse - 如何获取Scala中的项目路径?

ssh - Fabric 似乎启动了 apache2,但没有启动

dll - VB6:获取DLL的当前路径

c# - 项目文件的文件路径?

python - 嵌套结构连接

windows - Curl for Windows - curl 无法打开文件 C :\test. txt

python - 将 conda 添加到我的环境变量或路径?