如何覆盖 sudo 中的 PATH 环境变量?

如何覆盖 sudo 中的 PATH 环境变量?

我在 中设置了 PATH /etc/profile。在一般用户的情况下没有任何问题,但是在 中成为 root 权限后 PATH 就不行了sudo

即使我成为 的 root 权限,您该怎么做才能覆盖PATH设置的?/etc/profilesudo

答案1

出于安全原因,Sudo 会重置 PATH 以及许多其他环境变量。除非您运行 ,否则 /etc/profile 中的设置无关紧要sudo -i

sudo 手册页中的“安全说明”部分提供了有关安全隐患的见解,以及在您了解这样做的含义后,必须在 /etc/sudoers 文件中修改这些限制的选项。

答案2

/etc/profile 不会改变 root 的路径(安全...)

您必须单独进行设置,(例如在 root 的 ~/.bash_profile 中)

答案3

更新:

如果您想在使用 sudo 或 sudo -i 时将特定 PATH 添加到“root”帐户的默认 PATH:

使用 Ubuntu 10.04.x LTS:

相应地修改/etc/环境etc/login.defs文件。

使用 Ubuntu 12.04.x LTS:

相应地修改/etc/环境/etc/login.defs文件线默认 secure_path/etc/sudoers文件(使用 visudo)。

如果您使用的是 GUI,并且不习惯在文本模式下使用 nano 编辑器,请使用以下命令通过 gedit 编辑 /etc/sudoers 文件:

sudo EDITOR=gedit visudo

当您保存 /etc/sudoers 文件时,visudo 将检查您修改的语法。

如果一切正常,您将返回到终端会话。

如果有错误,请按字母“e”再次编辑/etc/sudoers文件,并更正您的修改。

我还没有尝试过 Ubuntu 12.10,但我猜测(并且希望)它与 Ubuntu 12.04.x 是一样的!

干杯。

答案4

如果您的 Linux 发行版启用了安全策略插件,则可以在您的文件中PATH覆盖它,因此您需要通过编辑它并将其添加到列表中。secure_pathsudoerssudo visudo

您可以通过以下方式检查是否确实如此:

$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

或者一次性使用,尝试:

sudo "PATH=$PATH" foo

看:为什么通过 sudo 和 su 运行时 PATH 变量不同?在Unix SE

相关内容