home products tech support contact us

 Linux 技術支援    ⇒   基礎篇    進階篇    補腦篇    指令索引    中⇒ENG
版權所有, 引用請註明出處

 sudo

1.0 sudo 越俎代庖
       visudo 修改 /etc/sudoers
       /etc/sudoers 設定檔
           Alias 別名設定
           TAG 標籤設定
       sudo 使用範例


 
1.0 sudo 越俎代庖

有時系統管理員太忙分身乏術,有些工作事實上可請別人代勞,如帳號管理工作可請人資部人員來管理。雖簡單的用指令 su 可讓代勞人員變更為系統管理員來處理,但 su 最大問題是要把密碼要告訴代理人員;所以可能會造成安全上的問題。

有沒辦法讓代理人員執行某一必要任務時才拿到軍符提昇權限至最高指揮官等級的〝root〞但又不至於到〝將在外軍令有所不從〞不受控的地步?是有這東西就是 sudo (superuser do)指令。

系統管理員可利用 sudo 釋出部分的權限給代理人員來分擔工作,這些代理人員又叫〝sudoer〞,而 sudosu 相比特點有 : 總之 sudo 特點為可不用繳械把系統管理員密碼給代理人,而代理人員又可〝越俎代庖〞執行部分系統管理員才可執行的指令,但又可防止代理人員〝功高震主〞如自行篡改〝root〞帳號密碼或不小心把系統給弄的一團亂。

因系統無法預測系統管理員要分權給誰和釋出多少權限,故預設的情形一般的帳號是無法使用 sudo 的(〝root〞除外),要使用 sudo 系統管理員要編輯 sudoer 列表〝/etc/sudoers〞後才能使用(使用 sudo 的用戶叫做〝sudoer〞)。


^ back on top ^

sudo 使用範例
sudo 指令用法比起其設定檔〝/etc/sudoers〞相對簡單多了,用法如下:
語法:sudo [-otpiton][--option] [USER_NAME][COMMAND]
指令名稱/功能/命令使用者 選項 功能
sudo/
(superuser do)/
Any
-b 在背景執行指令
-E 保留目前使用者的環境變數
-H 將 HOME 環境變數設為新身份的 HOME 環境變數
-k 再執行 sudo 時需要輸入自己的密碼
-l (小寫的 L)列出被分權的指令
-p [%u][%h][%H] 
改變詢問密碼的提示符號,可接的選項有:
〝%u〞:以使用者為提示符號
〝%h〞:以主機名稱為提示符號
〝%H〞:以主機名稱 + domain 名稱為提示符號
-u <帳號> 以指定的帳號執行指令(無此選項時預設是 root )
-v 再延長密碼有效期限 5 分鐘
-V 顯示版本訊息
--help 指令自帶說明


例:
$ sudo -l ←如忘了有那些指令可透過 sudo 執行,用選項〝-l〞就對了
User aaa may run the following commands on this hust:
     (root) /sbin/shutdown /sbin/halt
$ sudo -u lee cp fileA fileB ←雖〝sudo〞大部分是執行〝root〞授權的指令,如要指定其他授權者可用選項〝-u〞。此例〝fileB〞的檔案擁有者會變〝lee〞所有,可用於如要把某檔複製給別人修改時

其他比較不常用的用法如下:

例:
$ sudo -k ←下次再執行 sudo 時一定要輸入密碼
$ sudo -p %u /sbin/shutdown -k now ←以使用者名稱為密碼提示符號
$ sudo -H -u smith ←HOME 環境變數設為新身份〝smith〞的 HOME 環境變數
$ sudo cd /root ←利用 sduo 執行〝cd〞指令看看
sudo: cd: command not found ←sudo 是不支援 Shell 內建指令的(〝cd〞指令為 Shell 內建)

最後例子說明了 sudo 是不支援 shell 內建的指令的(可用 type 查詢指令是否為 shell 內建的),如 user 想透過 sudo cd 偷偷進入 /root 等軍事重地是行不通的。

另外〝/etc/sudoers〞如設定如下:
kevin         SERVERS=(root)        ALL

例中對帳號〝kevin〞的指令的授權用〝ALL〞是非常危險的,因只要此 user 下 sudo susudo /bin/bash 立刻就黃袍加身篡位成 Superuser。


^ back on top ^


 


 
[註]:Fedora 如沒有產生記錄檔〝/var/log/sudo.log〞,請在〝/etc/sudoers〞追加如下設定:
# Defaults specification
Defaults syslog=auth
Defaults log_year, logfile=/var/log/sudo.log

[註1A]:預設為間隔 5 分鐘內操作 sudo 就不用再輸入密碼。