如何覆盖sudo中的PATH环境variables?

我在/etc/profile设置了PATH。 在一般用户的情况下,我没有任何问题,但是当我成为sudo的根权限时,PATH不会去。

你会怎样重写由/etc/profile设置的PATH ,即使我成为sudoroot权限?

由于安全原因,Sudo会重置PATH以及许多其他环境variables。 不pipe你在/ etc / profile中设置了什么,除非你运行sudo -i

安全注意事项下的sudo手册页提供了有关安全隐患的信息,以及在了解这样做的含义之后,您必须在/ etc / sudoers文件中修改这些限制的选项。

root的path不会被/ etc / profile(security …)改变

你必须单独设置它(例如在root的〜/ .bash_profile中)

更新:

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

Ubuntu 10.04.x LTS:

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

使用Ubuntu 12.04.x LTS:

相应地修改/ etc / environment/etc/login.defs文件以及 / etc / sudoers文件的defaults secure_path (使用visudo)。

如果您使用的是GUI,但对文本模式下的nano编辑器不熟悉,请使用以下命令使用gedit编辑/ etc / sudoers文件:

sudo编辑= gedit visudo

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

如果一切正常,您将返回terminal会话。

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

我没有尝试使用Ubuntu 12.10,但我猜(和希望)这是一样的东西比Ubuntu 12.04.x!

干杯。

如果您的Linux发行版启用了安全策略插件, PATH可以被sudoers文件中的secure_path覆盖,所以您需要通过sudo 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运行PATHvariables不同? 在Unix SE