如何在Fabric中为sudo添加PATH变量

时间:2012-11-19 08:53:35

标签: path fabric

当我尝试使用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命令添加路径变量吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

  1. 当以root用户身份运行时,应始终提供可执行文件的完整路径,以避免将特洛伊木马推入您的路径中。

  2. 通过export设置环境变量仅适用于当前 shell会话 - 这是sudo调用的会话。执行命令(在这种情况下为export)后,shell将退出,并使用它获取环境变量。下次执行sudo时,会设置一个新的shell(使用默认环境),它对您以前的export一无所知。

  3. 配置文件/etc/sudoers通常包含Defaults env_reset之类的条目,其效果是调用环境中设置的环境变量已复制到sudo调用的环境中,因此在当前环境中调用export然后执行sudo也无效。这是出于安全原因(参考文献1)在上面完成的。

  4. 可以通过/etc/sudoers设置env_keep以对3进行例外处理。有关详细信息,请参阅man sudoers。但是,请参阅1) -

  5. -Esudo个选项,可以保留来电者的环境(包括例如扩展PATH),但这需要SETENV/etc/sudoers中设置。同样,请参阅man sudoers了解详细信息,并注意1)。

答案 1 :(得分:-1)

使用

sudo('PATH=$PATH:/new/path/to/add/install/bin commad')