按此前往linux完整教學目錄
一般使用者變換成root身分,以執行某些命令:
在Linux中,有些命令需要root身分才能執行。某些一般使用者被允許可以暫時變換為root來執行命令(執行命令前,需輸入本身的密碼),命令執行完後又馬上恢復原來身分。
(1) 其用法為:
sudo [-b] [-u 帳號] 命令
其中,中括號[]內的選項可寫可不寫,說明如下:
※ -b:表示將命令放到背景下執行,也就是說其執行過程不會顯示在螢幕上。此項若不寫,表示將放到前景下執行,也就是說其執行過程會顯示在螢幕上。
※ -u 帳號:表示變換為該帳號之身分來執行命令,而所有的權限也會變更為該帳號之身分的權限。通常用在需變換為系統帳號的身分時。此項若不寫,表示要變換為root身分。
(2) 並不是所有的使用者都被允許使用上述的sudo指令,畢竟這幾乎等於是獲得了root的身分與權限。被允許使用sudo指令的使用者,會被記錄在/etc/sudoers這個檔案中(當然,這檔案只有root才能更改)。這個檔案的紀錄格式,說明如下:
每一行中,若以井字號#為開頭,表示該行為註解。非註解的行,每行代表一個使用者,寫法為:
使用者帳號 使用者主機名稱=(可變換的使用者帳號) 指令句
※ 使用者帳號:表示這個帳號可以使用sudo指令。若此項為%群組,表示該群組成員可使用sudo指令。
※ 使用者主機名稱:若該使用者目前登入的主機是使用者主機名稱,那就允許其使用sudo指令。若此項為ALL,表示在任何主機登入都可使用sudo指令。
※ 可變換的使用者帳號:表示可以用sudo變換的對象之帳號。若此項為ALL,表示可以變換為任何對象。
※ 命令句:表示可以使用sudo來執行的命令。要注意,命令本身必須寫為該執行檔的絕對路徑(如mkdir要寫為/bin/mkdir)。若此項為ALL,表示所有形式的命令句都可用sudo來執行。若此項以驚嘆號!為開頭,表示這是不允許使用sudo來執行的命令句之寫法。若此項只有寫命令執行檔的絕對路徑,表示任何以該命令開頭的命令句都可用sudo來執行。另外,此項的寫法可用正規表示法來寫。
在/etc/sudoers中,通常預設有:
root ALL=(ALL) ALL #表示root可以用sudo切換為任何人、執行任何指令
%sudo ALL=(ALL) ALL #表示sudo這個群組的成員,可以用sudo切換為任何人、執行任何指令
%admin ALL=(ALL) ALL #表示admin或是Administrator這個群組的成員,可以用sudo切換為任何人、執行任何指令
除了預設之外,其他在應用上的範例如:
kkk ALL=(root) /user/bin/passwd, !/user/bin/passwd root
表示使用者kkk可以在任何主機登入時用sudo切換為root,但是不能用sudo更改root本身的密碼,只能用sudo更改其他人的密碼。
※ 註:上述,/user/bin/passwd和!/user/bin/passwd root這兩個子項用逗號,隔開,而這兩者是有衝突的。若兩者有衝突的話,寫在後面的子項,其效力就能蓋過其前面子項的效力。因此,若上述的範例寫成:
kkk ALL=(root) !/user/bin/passwd root, /user/bin/passwd
那就表示kkk可以用sudo來使用passwd開頭的一切命令句來更改任何人的密碼,自然包括root的密碼。因為/user/bin/passwd的效力把!/user/bin/passwd root覆蓋掉了!
(3) 要修改/etc/sudoers這個檔案的內容,可以輸入:visudo。
(4) 使用者在使用sudo指令之後若有輸入本身密碼,則若要在5分鐘之內再次使用sudo指令,就不必再次輸入密碼,直接就可執行。
上一篇:linux 使用者身分變換
下一篇:linux 檔案管理