2014年6月4日

sudo的PATH重置問題

sudo在執行的時候預設會重置PATH環境變數
而不是使用root的PATH環境變數.

例.以root帳號開啟終端機(需先修改PATH讓他跟預設不同)
$env
PATH=/root/cbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

$sudo env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

看出差別了嗎?
root帳號有我自己加進去的/root/cbin
而用sudo去執行就沒有,因為他會重置成/etc/login.defs裡面的設定

方法1:在.bashrc設定alias,在sudo時帶入PATH環境變數(僅套用至目前帳號) 
$nano ~/.bashrc
加入以下這行
alias sudo='sudo env PATH=$PATH'

方法2:直接修改login.defs(影響全系統)
$nano /etc/login.defs

在這兩行修改成自己想要的
ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH        PATH=/usr/local/bin:/usr/bin:/bin:/usr/games

方法3:關閉重置環境變數的設定(影響全系統) 
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults    !env_reset


方法4:設定保留PATH環境變數的設定(影響全系統) 
$visudo
打開sudo設定檔,加入或修改以下這行
Defaults    env_keep = "PATH"