Linux

為什麼通過 sudo 和 su 執行時 PATH 變數不同?

  • July 25, 2019

在我的 Fedora 虛擬機上,使用我的使用者帳戶執行時/usr/local/bin,我的路徑中有:

[justin@justin-fedora12 ~]$ env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin

同樣在執行時su

[justin@justin-fedora12 ~]$ su -
Password: 
[root@justin-fedora12 justin]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin

但是,通過執行時sudo,此目錄不在路徑中:

[root@justin-fedora12 justin]# exit
[justin@justin-fedora12 ~]$ sudo bash
[root@justin-fedora12 ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin

為什麼執行時路徑會有所不同 via sudo

看看/etc/sudoers。Fedora(以及 RHEL,以及 Ubuntu 和類似系統)中的預設文件包括以下行:

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

這可以確保在 sudo 下執行二進製文件時您的路徑是乾淨的。這有助於防止出現此問題中提到的一些問題。如果您沒有/sbin並且/usr/sbin在自己的路徑中,這也很方便。

該命令su -將執行 root 使用者配置文件並採用該使用者的環境,包括路徑等sudo,但不會這樣做。

如果您想sudo表現得像,請su -使用sudo -i [command將執行使用者配置文件的選項

如果你想su -表現得像sudo那麼不要使用連字元 - 只需使用su [command]

引用自:https://unix.stackexchange.com/questions/8646