当我运行 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
您可以调整sudo
的env_keep
参数以包含PATH
,但您应该记住这样做的安全隐患。
visudo
...将启动您的,然后您可以根据情况$EDITOR
对...进行更改。Defaults env_keep =
另外,您可以通过将文件添加到/etc/profile.d
.
例如:
cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF