分享一個解決 sudo 命令找不到環(huán)境變量的小技巧


點擊「閱讀原文」查看良許原創(chuàng)精品視頻。
作者:Mike
來自:奇妙的Linux世界
點擊「閱讀原文」查看良許原創(chuàng)精品視頻。
作者:Mike
來自:奇妙的Linux世界
如何解決 sudo 命令找不到環(huán)境變量的問題
在通過 sudo 運行命令時,系統(tǒng)會默認重置環(huán)境變量為安全的環(huán)境變量,也就是說,先前設置的變量都會失效,只有少數(shù)配置文件中指定的環(huán)境變量能夠保存下來。
sudo 的配置文件是 /etc/sudoers,需要 root 權限才能讀取,運行以下命令:
$ sudo sed '/^#/d;/^$/d' /etc/sudoerssudo 的配置如下圖所示:

sudo 配置文件
請注意:
第 3 行的
Defaults env_reset表示默認會重置環(huán)境變量,因此自定義的變量會在sudo環(huán)境中失效,也就不會獲取正確的變量值。第 4 行至第 8 行的
env_keep配置項,用于保留部分環(huán)境變量不被重置,需要保留的變量就寫入雙引號之中。第 9 行的
secure_path配置項,其中包含的路徑將被當做sudo環(huán)境的PATH變量使用,如果在sudo環(huán)境無法找到某些命令,那么可以將這些命令的路徑加入該配置項之中。
綜上所述,sudo 命令找不到環(huán)境變量或命令的問題,有三種解決方法:
sudo -E
加上 -E ?選項后,用戶可以在 sudo ?執(zhí)行時保留當前用戶已存在的環(huán)境變量,不會被 sudo 重置。另外,如果用戶對于指定的環(huán)境變量沒有權限,則會報錯。
修改 sudo 配置文件
在內部測試機器中,安全性要求不高,總是需要加上 -E 參數(shù)來執(zhí)行腳本,這個安全設定也不是很方便。因此,可以通過修改 /etc/sudoers 文件的 env_keep 和 secure_path 配置項,來指定 sudo 環(huán)境中需要保留的環(huán)境變量和路徑。
當然你也可以用更簡單粗暴的方式:直接將 Defaults env_reset 改成 Defaults !env_reset 來取消掉對 PATH 變量的重置,然后在 .bashrc 中最后添加 alias sudo='sudo env PATH=$PATH'。這樣 sudo 執(zhí)行命令時所搜尋的路徑就是系統(tǒng)的 PATH 變量中的路徑,如果你想添加其他變量方法也是類似。
手動添加變量
手動在腳本中設置所需的變量,在執(zhí)行 sudo 腳本前先將所需要的變量寫入到需要執(zhí)行的腳本開頭。
參考文檔
https://www.google.com
http://ghoulich.xninja.org/2017/05/09/how-to-find-env-variables-when-exec-sudo-commands/
http://www.ibm.com/developerworks/cn/aix/library/au-sudo/index.html

本公眾號全部博文已整理成一個目錄,請在公眾號里回復「m」獲取! 推薦閱讀:
5T技術資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內回復「1024」,即可免費獲取!!
