使用 sudo 可以获得什么环境?

使用 sudo 可以获得什么环境?

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

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

我以为 sudo 以 root 身份运行,因此获得了 root 的环境。 bash 在 sudo 下执行的方式与在 root 或普通用户下执行的方式是否有不同?

编辑:

我最近一直在使用sudo -i,但最近它引起了问题,因为我当前的工作目录被设置为/root.这符合预期(有点),但我仍然不明白为什么 sudo 不能识别我的可执行文件/usr/local/bin

编辑:

我正在运行 Fedora 15。

答案1

我不知道 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 文件更改。

答案2

你可以用类似的东西很容易地检查这一点

比较输出

sudo env 
env

还有像这样的事情

sudo whoami 
whoami

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

答案3

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

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

答案4

您可以调整sudoenv_keep参数以包含PATH,但您应该记住这样做的安全隐患。

visudo

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

另外,您可以通过将文件添加到/etc/profile.d.

例如:

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

相关内容