分类: LINUX
2009-04-20 17:32:58
建议首先看一下/etc/sudoers内的说明及举例
由於一開始系統預設僅有 root 可以執行 sudo ,因此底下的範例我們先以 root 的身份來執行,等到談到 visudo 時,再以一般使用者來討論其他 sudo 的用法吧!
[root@www ~]# sudo [-b] [-u 新使用者帳號] [-c 指令串 | 指令] 選項與參數: -b :將後續的指令放到背景中讓系統自行執行,而不與目前的 shell 產生影響 -u :後面可以接欲切換的使用者,若無此項則代表切換身份為 root 。 -c :若有一連續的指令 (&&, ||, ;) 欲執行,可用 -c "指令串" 處理。 範例一:你想要以 sshd 的身份在 /tmp 底下建立一個名為 mysshd 的檔案 [root@www ~]# sudo -u sshd touch /tmp/mysshd [root@www ~]# ll /tmp/mysshd -rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshd # 特別留意,這個檔案的權限是由 sshd 所建立的情況喔! 範例二:你想要以 vbird1 的身份建立 ~vbird/www 並於其中建立 index.html 檔案 [root@www ~]# sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \ > echo 'This is index.html file' > index.html" [root@www ~]# ll -a ~vbird1/www drwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 . drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 .. -rw-r--r-- 1 vbird1 vbird1 24 Feb 28 17:51 index.html # 要注意,建立者的身份是 vbird1 ,且我們使用 sh -c "一串指令" 來執行的!
sudo 可以讓你切換身份來進行某項任務,例如上面的兩個範例。範例一中,我們的 root 使用 sshd 的權限去進行某項任務! 要注意,因為我們無法使用『 su - sshd 』去切換系統帳號 (因為系統帳號的 shell 是 /sbin/nologin), 這個時候 sudo 真是他 X 的好用了!立刻以 sshd 的權限在 /tmp 底下建立檔案!查閱一下檔案權限你就瞭解意義啦! 至於範例二則更使用多重指令串 (透過分號 ; 來延續指令進行),使用 sh -c 的方法來執行一連串的指令, 如此真是好方便!
但是 sudo 預設僅有 root 能使用啊!為什麼呢?因為 sudo 的執行是這樣的流程:
visudo 與 /etc/sudoers
除了 root 之外的其他帳號,若想要使用 sudo 執行屬於 root 的權限指令,則 root 需要先使用 visudo 去修改 /etc/sudoers ,讓該帳號能夠使用全部或部分的 root 指令功能。為什麼要使用 visudo 呢?這是因為 /etc/sudoers 是有設定語法的,如果設定錯誤那會造成無法使用 sudo 指令的不良後果。因此才會使用 visudo 去修改, 並在結束離開修改畫面時,系統會去檢驗 /etc/sudoers 的語法就是了。
單一使用者可進行 root 所有指令,與 sudoers 檔案語法:
假如我們要讓 vbird1 這個帳號可以使用 root 的任何指令,那麼可以簡單的這樣進行修改即可:
[root@www ~]# visudo ....(前面省略).... root ALL=(ALL) ALL <==找到這一行,大約在 76 行左右 vbird1 ALL=(ALL) ALL <==這一行是你要新增的! ....(前面省略).... |
使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令 root ALL=(ALL) ALL <==這是預設值 那個 ALL 是特殊的關鍵字,代表任何身份、主機或指令的意思。所以,我想讓 vbird1 可以進行任何身份的任何指令, 就如同上表特殊字體寫的那樣,其實就是複製上述預設值那一行,再將 root 改成 vbird1 即可啊! 此時『vbird1 不論來自哪部主機登入,他可以變換身份成為任何人,且可以進行系統上面的任何指令』之意。 修改完請儲存後離開 vi,並以 vbird1 登入系統後,進行如下的測試看看: |
root@www ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) /usr/bin/passwd <==最後指令務必用絕對路徑
@www ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/paswd [A-Za-z]*, \
!/usr/bin/passwd root
透過別名建置 visudo:
root@www ~]# visudo <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, \
!/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM