Ubuntu進入root許可權命令——sudo和su命令詳解 ubuntu使用者管理
sudo意思就是super-user do,讓目前使用者暫時以管理員的身份root來執行這條命令。
su是用來改變目前使用者的,su root,就是將目前使用者切換為root,用了su root之後,下面所有的命令就可以不用打sudo了,因為目前使用者已經是管理員root了。
root
使用者為根使用者,也就是 系統管理員
擁有全部許可權
一個使用者只能擁有一個 GID
,但是還可以歸屬於其它附加群組
使用者管理的重要設定檔: /etc/passwd 使用者名稱 密碼位 UID 歸屬GID 姓名 $HOME目錄 登入Shell/etc/shadow 使用者名稱 已加密密碼 密碼改動資訊 密碼原則/etc/group 群組名 密碼位 GID 組內使用者/etc/gshadow 群組密碼相關檔案,不重要/etc/sudoers 使用者名稱 許可權定義 許可權[/pre]可以使用 pwconv
命令建立影子密碼,將 /etc/passwd
檔案中的密碼轉換到 /etc/shadow
檔案 su [使用者名稱]
切換到其它使用者,預設切換到root使用者。提示密碼為將切換使用者密碼 -f 快速切換,忽略設定檔-l 重新登入-m ,-p 不更改環境變數-c <命令> 切換後執行命令,並退出切換
sudo [命令]
以其它使用者的身份執行命令,預設以root的身份執行。提示密碼為目前使用者密碼 -s 切換為root shell-i 切換為root shell,並初始化-u <使用者名稱|UID> 執行命令的身份-l 顯示自己的許可權
passwd [使用者名稱]
設定使用者密碼
-d 清除密碼
-l 鎖定使用者-e 使密碼到期,在下次登入時更改密碼-S 顯示密碼認證資訊-x <天數> 密碼到期,最大使用時間-n <天數> 凍結密碼,最小使用時間-s 更改登入Shell-f 更改使用者資訊
樣本: $passwdChanging password for user(current) UNIX password: 原密碼Enter new UNIX password: 新密碼Retype new UNIX password: 確認新密碼[/pre chsh [-s <Shell>] [使用者名稱]
更改登入Shell |
1.sudo的預設配置
默 認時,Ubuntu為
sudo提供了一個基本的配置,該配置儲存在/etc目錄下的sudoers檔案中。在修改該設定檔時,務必使用visudo工具
來進行編輯,因為該工具會自動對配置文法進行嚴格檢查,如果發現錯誤,在儲存退出時給出警告,並提示你哪段配置出錯,從而確保該設定檔的正確性。相反,
如果使用其它的文本編輯程式的話,一旦出錯,就會給系統帶來嚴重的後果。下面給出的是Ubuntu預設的/etc/sudoers檔案內容:#
User privilege specificationroot ALL=(ALL) ALL# Members of the admin
group may gain root privileges%admin ALL=(ALL) ALL
下面對以上配置做簡要說明:
第
一項配置的作用,是允許root使用者使用sudo命令變成系統中任何其它類型的使用者。第二個配置規定,管理組中的所有成員都能以root的身份執行所有命
令。因此,在預設安裝的Ubuntu系統中,要想作為root身份來執行命令的話,只要在sudo後面跟上欲執行的命令即可。下面用一個例子加以說明,如
果您想執行apt-get update的話,應當在命令列中鍵入以下內容:$ sudo apt-get update
2.設定檔文法詳解
接下來,我們用一個執行個體來詳細解釋/etc/sudoers檔案的配置文法,請看下面的例子:jorge ALL=(root) /usr/bin/find, /bin/rm
上面的第一欄規定它的適用對象:使用者或組,就本例來說,它是使用者jorge。此外,因為系統中的組和使用者可以重名,要想指定該規則的適用對象是組而 非使用者的話,組對象的名稱一定要用百分比符號%開頭。
第二欄指定該規則的適用主機。當我們在多個系統之間部署sudo環境時,這一欄格外有用,這裡的ALL代表所有主機。但是,對於案頭系統或不想將 sudo部署到多個系統的情況,這一欄就換成相應的主機名稱。
第三欄的值放在括弧內,指出第一欄規定的使用者能夠以何種身份來執行命令。本例中該值設為root,這意味著使用者jorge能夠以root使用者的身份 來運行後面列出的命令。該值也可以設成萬用字元ALL,jorge便能作為系統中的任何使用者來執行列出的命令了。
最 後一欄(即/usr/bin/find,
/bin/rm)是使用逗號分開的命令表,這些命令能被第一欄規定的使用者以第三欄指出的身份來運行它們。本例中,該配置允許jorge作為超級使用者運行
/usr/bin/find和 /bin/rm這兩個命令。需要指出的是,這裡列出的命令一定要使用絕對路徑。
3.sudo命令的使用方法
現在的問題是,使用者jorge怎樣利用分配給他的許可權呢?其實很簡單,只要在命令列模式下使用sudo命令
加上他想啟動並執行程式就可以了,比如:jorge@Ubuntu:~$ sudo find . ! -name '*.avi' -exec rm -f //{//} //;
倘若jorge企圖執行/etc/sudoers檔案規定之外的程式(比如find 或 rm)的話,sudo命令便會以失敗而告終,並給出警告資訊,指出他無權以超級使用者身份來運行這些命令。
要想以非root使用者身份來運行命令,必須使用-u選項來指定想要作為的使用者;否則的話,sudo會預設為root使用者,比如要想以fred身份來 執行ls命令,就應該這樣:$ sudo -u fred ls /home/fred
就
像您看到的那樣,我們可以利用這些規則為系統建立具體的角色。例如,要讓一個組負責帳戶管理,你一方面不想讓這些使用者具備完全的root存取權限,另一方
面還得讓他們具有增加和刪除使用者的權利,那麼我們可以在系統上建立一個名為accounts的組,然後把那些使用者添加到這個組裡。之後,再使用
visudo為/etc/sudoers添加下列內容:%accounts ALL=(root) /usr/sbin/useradd,
/usr/sbin/userdel, /usr/sbin/usermod
現在好了,accounts組中的任何成員都能運行useradd、userdel和usermod命令了。如果過一段時間後,您發現該角色還需要 其他工具,只要在該表的尾部將其添上就行了。這樣真是方便極了!
需
要注意的是,當我們為使用者定義可以啟動並執行命令時,必須使用完整的命令路徑。這樣做是完全出於安全的考慮,如果我們給出的命令只是簡單的userad而非
/usr/sbin/useradd,那麼使用者有可能建立一個他自己的指令碼,也叫做userad,然後放在它的本地路徑中,如此一來他就能夠通過這個名為
useradd的本地指令碼,作為root來執行任何他想要的命令了。這是相當危險的!
sudo命令的另一個便捷的功能,是它能夠指出哪些
命令在執行時不需要輸入密碼。這很有用,尤其是在非互動式指令碼中以超級使用者的身份來運行某些命令的時候。例如,想要讓使用者作為超級使用者不必輸入密碼就能執
行kill命令,以便使用者能立刻殺死一個失控的進程。為此,在命令列前邊加上NOPASSWD:屬性即可。例如,可以在/etc/sudoers檔案中加
上下面一行,從而讓jorge獲得這種權力:jorge ALL=(root) NOPASSWD: /bin/kill,
/usr/bin/killall
這樣一來,jorge就能運行以下命令,作為root使用者來殺死失控的rm進程了。jorge@Ubuntu:~$ sudo killall rm
6.如何啟用root帳戶
通過以上介紹,我們發現sudo的確很好用,但是如果您早就習慣了在root下工作,想回味一下過去的感覺該怎麼辦呢?很簡單,只要為root設定 一個root密碼就行了:$ sudo passwd root
好了,現在您能直接作為root登入了。