sudo可以在什么环境下使用?


15

当我运行sudo时,我的环境到底发生了什么?

当我运行时sudo command,似乎看不到我或root的环境。例如,我的两个路径都包含/usr/local/bin,但是如果我尝试在没有完整路径的情况下运行程序之一,则它将失败。

我以为sudo是root用户,因此得到了root用户的环境。bash在sudo下执行的方式与root或普通用户下执行的方式不同吗?

编辑:

sudo -i最近一直在使用,但是最近由于我当前的工作目录设置为,导致了问题/root。这是符合预期的(sorta),但是我仍然不明白为什么sudo无法识别中的可执行文件/usr/local/bin

编辑:

我正在运行Fedora 15。


您正在使用什么操作系统(如果是Linux,使用什么发行版)?有太多(多种)配置方法PATH,有时很难找到谁最后覆盖了它。可能是某些系统设置(例如,在PAM中),sudo本身或后续的配置文件脚本。
吉尔(Gilles)'所以

@吉尔斯-好点。我添加了我的操作系统。我只是在Fedora上才真正注意到这一点(我曾经使用过Ubuntu),但是我认为那是因为它们没有增加很多便利设置。
beatgammit 2011年

Answers:


6

我不知道Fedora的默认设置,但在Debian上sudo默认使用secure_path默认值的选项/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

这意味着每次使用时sudo,路径都会更改为该值;但是,当您使用时sudo -i,该路径将在此之后由root用户的RC文件更改。


我不知道该secure_path选项。默认值不包括/usr/local/bin在我的安装中。谢谢,这确实有助于清除内容!
Beatgammit

4

您可以使用以下方法轻松检查此问题

比较来自的输出

sudo env 
env

和类似的东西

sudo whoami 
whoami

这样,您可以尝试找出设置中缺少的内容。


酷,对此一无所知。无论如何,/usr/local/bin它不在我的sudo env中,但是在我的root env和用户env中。为什么是这样?
beatgammit

sudo whoami返回root,如预期的那样。是什么导致我的sudo env与我的root env不同?
beatgammit 2011年

不知道,但是在某处一定缺少一些设置,通常包括/ usr / local / bin。也许您在某些configfile中错误地清除了$ PATH env?
约翰

sudo是否源于/root/.bashrc?那是我添加/usr/local/bin到root的路径的地方(不幸的是,我必须手动执行此操作)?
Beatgammit

我认为您应该修改shell的全局配置,看看会发生什么。如果您正在运行bash,它将类似于/etc/bash.bashrc
Johan

2

sudo -i命令模拟初始登录。在我的Debian系统上,它还指出:

这意味着Shell将读取特定于登录的资源文件,例如.profile或.login。如果指定了命令,则将其传递到外壳程序以执行。否则,将执行交互式外壳程序。sudo尝试在运行外壳程序之前更改为该用户的主目录。它还会初始化环境,使DISPLAY和TERM保持不变,设置HOME,MAIL,SHELL,USER,LOGNAME和PATH,以及Linux和AIX系统上/ etc / environment的内容。所有其他环境变量将被删除。


0

您可以调整sudoenv_keep参数以包括PATH,尽管您应牢记这样做的安全隐患。

visudo

...将启动您的$EDITOR,然后您可以根据需要对Defaults env_keep =... 进行更改。

另外,您可以通过将文件添加到来将/ usr / local / bin添加到系统路径/etc/profile.d

例如:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF

sudo对进行了特殊处理,PATH因此您不应该这样做。
Arrowmaster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.