概要:在linux上進行有關許可權的操作時,往往會碰到這樣的問題:1)為什麼安裝軟體需要在apt-get之前加上sudo。剛剛安裝完畢,再次運行apt-get卻不需要再在前面加sudo。2)為何有時運行sudo command的時候顯示user is not in the sudoers。3)su和sudo有什麼不同。4)多人使用同一台主機,在授權很多使用者具有root許可權的時候如何保證安全性。本文將主要為你解答上述問題。
1.su
su–運行替換使用者和組標識的shell,修改有效使用者標識和組標識為USER的.
1.1對比su與su– root(後者等於su-)
執行個體比較:
hyk@hyk-linux:~$su
Password:(注意,切換以後的pwd並沒有改變)
root@hyk-linux:/home#echo $HOME
/root
root@hyk-linux:/home#exit(後面顯示exit)
exit
hyk@hyk-linux:~$su - root
Password:(切換以後pwd改變了)
root@hyk-linux:~#echo $HOME
/root
root@hyk-linux:~#exit(後面顯示logout)
logout
從以上執行個體,看出:su-,以root身份登入,執行實際使用者login以後的所有操作(包括環境變數的設定等);而前者只是簡單的使用者切換,pwd等資訊。
1.2su的缺點
1)不安全su工具在多人蔘與的系統管理中,並不是最好的選擇,su只適用於一兩個人蔘與管理的系統,畢竟su並不能讓普通使用者受限的使用;超級使用者root密碼應該掌握在少數使用者手中。
2)麻煩:需要把root密碼告知每個需要root許可權的人。
2.sudo
2.1sudo的出現背景
由於su對切換到超級許可權使用者root後,許可權的無限制性,所以su並不能擔任多個管理員所管理的系統。如果用su來切換到超級使用者來管理系統,也不能明確哪些工作是由哪個管理員進行的操作。特別是對於伺服器的管理有多人蔘與管理時,最好是針對每個管理員的技術特長和管理範圍,並且有針對性的下放給許可權,並且約定其使用哪些工具來完成與其相關的工作,這時我們就有必要用到sudo。
通過sudo,我們能把某些超級許可權有針對性的下放,並且不需要普通使用者知道root密碼,所以sudo相對於許可權無限制性的su來說,還是比較安全的,所以sudo也能被稱為受限制的su;另外sudo是需要授權許可的,所以也被稱為授權許可的su;
sudo執行命令的流程是目前使用者切換到root(或其它指定切換到的使用者),然後以root(或其它指定的切換到的使用者)身份執行命令,執行完成後,直接退回到目前使用者;而這些的前提是要通過sudo的設定檔/etc/sudoers來進行授權;
注意:
hyk@hyk-linux:~$sudo apt-get install aaaa
[sudo]password for hyk:
看到沒有,執行sudo的時候,我們需要輸入的是目前使用者hyk的密碼,而不是root密碼。
2.2Sudo的特性:
§sudo能夠限制使用者只在某台主機上運行某些命令。
§sudo提供了豐富的日誌,詳細地記錄了每個使用者幹了什麼。它能夠將日誌傳到中心主機或者Log Service器。
§sudo使用時間戳檔案來執行類似的“檢票”系統。當使用者調用sudo並且輸入它的密碼時,使用者獲得了一張存活期為5分鐘的票(這個值可以在編譯的時候改變)。也就是說,我剛剛輸入了sudocat /etc/issue 然後可以再次只需要輸入cat/etc/issue即可,不需要再次輸入sudo。
§sudo的設定檔是sudoers檔案,它允許系統管理員集中的系統管理使用者的使用許可權和使用的主機。它所存放的位置預設是在/etc/sudoers,屬性必須為0411。
2.3.sudo的使用
許可權:在/etc/sudoers中有出現的使用者
使用方式:sudo-V
sudo-h
sudo-l
sudo-v
sudo-k
sudo-s
sudo-H
sudo[ -b ] [ -p prompt ] [ -u username/#uid] -s
用法:sudocommand
說明:以系統管理者的身份執行指令,也就是說,經由sudo所執行的指令就好像是root親自執行
參數:
-V顯示版本編號
-h會顯示版本編號及指令的使用方式說明
-l顯示出自己(執行sudo的使用者)的許可權
-v因為sudo在第一次執行時或是在N分鐘內沒有執行(N預設為五)會問密碼,這個參數是重新做一次確認,如果超過N分鐘,也會問密碼
-k將會強迫使用者在下一次執行