1. 程式人生 > >Ubuntu進入root許可權命令——sudo和su命令詳解

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: 確認新密碼[/prechsh [-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命令
加上他想執行的程式就可以了,比如:
[email protected]
:~$ 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程序了。
[email protected]
:~$ sudo killall rm

6.如何啟用root帳戶
通過以上介紹,我們發現sudo的確很好用,但是如果您早就習慣了在root下工作,想回味一下過去的感覺該怎麼辦呢?很簡單,
只要為root設定一個root密碼就行了:$ sudo passwd root
好了,現在您能直接作為root登入了。

【設定Ubuntu的root密碼】

Ubuntu安裝後root不能夠登入的並且也是沒有預設的密碼的,因為你還沒給root設定密碼,你第一個user是在 admin組,所以他可以給root設定密碼。
給root使用者設定密碼。具體步驟是開啟終端(應用程式--附件--終端),然後輸入下面的命令: sudo passwd root
回車後會出現讓你輸入密碼和確認密碼,例如這樣
[sudo] password for you :---> 輸入你的密碼(你現在這個使用者的密碼),不回顯
Enter new UNIX password: --- > 設定root 密碼
Retype new UNIX password: --> 重複這樣
這樣你的root的密碼設定好了。

第二步就是要啟用root使用者,因為root預設是不啟用的。所以要系統>系統管理>登入視窗)
點“安全”選項頁,把“允許本地管理員登入”前的複選框給勾起來就可以了。
然後登出後就可以登入了!
sudo passwd root
sudo gedit /etc/gdm/gdm.conf
AllowRoot=false變成AllowRoot=true
Ctrl+Q
退出重新登入。

3 關閉:sudo passwd -l root


比如最近不得不用的Ubuntu由於它在安裝過程中是不設定root的密碼,所以顯然使用時也就無法以root登入,而且因為沒有初始密碼,也無法通過"su“切換到root。這樣做法雖然避免了因為許可權過高導致系統篡改的問題,而且需要使用超級使用者許可權時可以使用“sudo”,但是使用起來還是覺得不好玩。以下是解決方法:

1、設定root密碼:
(1)利用安裝時的管理員帳戶登陸Ubuntu
(2)開啟終端並執行命令:sudo passwd root,設定root的密碼,重複密碼。
這樣在終端就可以用su切換到root咯。
*注:如果不想切換到root,可以用sudo passwd -l root遮蔽root帳號的使用。

2、支援root登入GUI:
通過修改/etc/gdm/gdm.conf檔案來允許root直接登入,在該檔案中找到 AllowRoot=false 將其改為 AllowRoot=true 切換使用者就可以了。