2010年8月13日 星期五

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裡面的設定

$cat /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



所以接下來有幾種解決的方法

方法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"

沒有留言:

張貼留言