Ubuntu的sudo與su命令使用與開啓root賬戶 2012-04-30

今天介紹兩個Ubuntu命令: sudo 和 su

sudo意思就是super-user do,讓當前用戶暫時以管理員的身份root來執行這條命令。

su是用來改變當前用戶的,su root,就是將當前用戶切換爲root,用了su root以後,下面全部的命令就能夠不用打sudo了,由於當前用戶已是管理員root了。

Ubuntu有一個不同凡響的特色,那就是初次 使用時,你沒法做爲root來登陸系統,爲何會這樣?這就要從系統的安裝提及。對於其餘Linux系統來講,通常在安裝過程就設定root密碼,這樣用 戶就能用它登陸root賬戶或使用su命令轉換到超級用戶身份。與之相反,Ubuntu默認安裝時,並無給root用戶設置口令,也沒有啓用root賬 戶。問題是要想做爲root用戶來運行命令該怎麼辦呢?不要緊,咱們可使用sudo命令達此目的。

sudo是linux下經常使用的容許普 通用戶使用超級用戶權限的工具,該命令爲管理員提供了一種細顆粒度的訪問控制方法,經過它人們既能夠做爲超級用戶又能夠做爲其它類型的用戶來訪問系統。這 樣作的好處是,管理員可以在不告訴用戶root密碼的前提下,授予他們某些特定類型的超級用戶權限,這正是許多系統管理員所求之不得的。

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登陸了。
相關文章
相關標籤/搜索