ubuntu用戶管理sudo意思就是super-user do,讓當前用戶暫時以管理員的身份root來執(zhí)行這條命令。 su是用來改變當前用戶的,su root,就是將當前用戶切換為root,用了su root之后,下面所有的命令就可以不用打sudo了,因為當前用戶已經(jīng)是管理員root了。 root 用戶為根用戶,也就是 系統(tǒng)管理員 擁有全部權限一個用戶只能擁有一個 GID ,但是還可以歸屬于其它附加群組
1.sudo的缺省配置 默 認時,Ubuntu為 sudo提供了一個基本的配置,該配置保存在/etc目錄下的sudoers文件中。在修改該配置文件時,務必使用visudo工具 來進行編輯,因為該工具會自動對配置語法進行嚴格檢查,如果發(fā)現(xiàn)錯誤,在保存退出時給出警告,并提示你哪段配置出錯,從而確保該配置文件的正確性。相反, 如果使用其它的文本編輯程序的話,一旦出錯,就會給系統(tǒng)帶來嚴重的后果。下面給出的是Ubuntu默認的/etc/sudoers文件內(nèi)容:# User privilege specificationroot ALL=(ALL) ALL# Members of the admin group may gain root privileges%admin ALL=(ALL) ALL 下面對以上配置做簡要說明: 第 一項配置的作用,是允許root用戶使用sudo命令變成系統(tǒng)中任何其它類型的用戶。第二個配置規(guī)定,管理組中的所有成員都能以root的身份執(zhí)行所有命 令。因此,在默認安裝的Ubuntu系統(tǒng)中,要想作為root身份來執(zhí)行命令的話,只要在sudo后面跟上欲執(zhí)行的命令即可。下面用一個例子加以說明,如 果您想執(zhí)行apt-get update的話,應當在命令行中鍵入以下內(nèi)容:$ sudo apt-get update 2.配置文件語法詳解 接下來,我們用一個實例來詳細解釋/etc/sudoers文件的配置語法,請看下面的例子:jorge ALL=(root) /usr/bin/find, /bin/rm 上面的第一欄規(guī)定它的適用對象:用戶或組,就本例來說,它是用戶jorge。此外,因為系統(tǒng)中的組和用戶可以重名,要想指定該規(guī)則的適用對象是組而 非用戶的話,組對象的名稱一定要用百分號%開頭。 第二欄指定該規(guī)則的適用主機。當我們在多個系統(tǒng)之間部署sudo環(huán)境時,這一欄格外有用,這里的ALL代表所有主機。但是,對于桌面系統(tǒng)或不想將 sudo部署到多個系統(tǒng)的情況,這一欄就換成相應的主機名。 第三欄的值放在括號內(nèi),指出第一欄規(guī)定的用戶能夠以何種身份來執(zhí)行命令。本例中該值設為root,這意味著用戶jorge能夠以root用戶的身份 來運行后面列出的命令。該值也可以設成通配符ALL,jorge便能作為系統(tǒng)中的任何用戶來執(zhí)行列出的命令了。 最 后一欄(即/usr/bin/find, /bin/rm)是使用逗號分開的命令表,這些命令能被第一欄規(guī)定的用戶以第三欄指出的身份來運行它們。本例中,該配置允許jorge作為超級用戶運行 /usr/bin/find和 /bin/rm這兩個命令。需要指出的是,這里列出的命令一定要使用絕對路徑。 3.sudo命令的使用方法 現(xiàn)在的問題是,用戶jorge怎樣利用分配給他的權限呢?其實很簡單,只要在命令行模式下使用sudo命令 加上他想運行的程序就可以了,比如:jorge@Ubuntu:~$ sudo find . ! -name '*.avi' -exec rm -f \\{\\} \\; 倘若jorge企圖執(zhí)行/etc/sudoers文件規(guī)定之外的程序(比如find 或 rm)的話,sudo命令便會以失敗而告終,并給出警告信息,指出他無權以超級用戶身份來運行這些命令。 要想以非root用戶身份來運行命令,必須使用-u選項來指定想要作為的用戶;否則的話,sudo會默認為root用戶,比如要想以fred身份來 執(zhí)行l(wèi)s命令,就應該這樣:$ sudo -u fred ls /home/fred 就 像您看到的那樣,我們可以利用這些規(guī)則為系統(tǒng)創(chuàng)建具體的角色。例如,要讓一個組負責帳戶管理,你一方面不想讓這些用戶具備完全的root訪問權限,另一方 面還得讓他們具有增加和刪除用戶的權利,那么我們可以在系統(tǒng)上創(chuàng)建一個名為accounts的組,然后把那些用戶添加到這個組里。之后,再使用 visudo為/etc/sudoers添加下列內(nèi)容:%accounts ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod 現(xiàn)在好了,accounts組中的任何成員都能運行useradd、userdel和usermod命令了。如果過一段時間后,您發(fā)現(xiàn)該角色還需要 其他工具,只要在該表的尾部將其添上就行了。這樣真是方便極了! 需 要注意的是,當我們?yōu)橛脩舳x可以運行的命令時,必須使用完整的命令路徑。這樣做是完全出于安全的考慮,如果我們給出的命令只是簡單的userad而非 /usr/sbin/useradd,那么用戶有可能創(chuàng)建一個他自己的腳本,也叫做userad,然后放在它的本地路徑中,如此一來他就能夠通過這個名為 useradd的本地腳本,作為root來執(zhí)行任何他想要的命令了。這是相當危險的! sudo命令的另一個便捷的功能,是它能夠指出哪些 命令在執(zhí)行時不需要輸入密碼。這很有用,尤其是在非交互式腳本中以超級用戶的身份來運行某些命令的時候。例如,想要讓用戶作為超級用戶不必輸入密碼就能執(zhí) 行kill命令,以便用戶能立刻殺死一個失控的進程。為此,在命令行前邊加上NOPASSWD:屬性即可。例如,可以在/etc/sudoers文件中加 上下面一行,從而讓jorge獲得這種權力:jorge ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall 這樣一來,jorge就能運行以下命令,作為root用戶來殺死失控的rm進程了。jorge@Ubuntu:~$ sudo killall rm 6.如何啟用root帳戶 通過以上介紹,我們發(fā)現(xiàn)sudo的確很好用,但是如果您早就習慣了在root下工作,想回味一下過去的感覺該怎么辦呢?很簡單,只要為root設置 一個root密碼就行了:$ sudo passwd root 好了,現(xiàn)在您能直接作為root登錄了。 |