全面解析Linux特殊用戶(hù)權(quán)限的分配
對(duì)于比較大的系統(tǒng),Linux管理員會(huì)有多人,Linux特殊用戶(hù)權(quán)限的分配就是必須來(lái)做的,如果每股而安利員都用root來(lái)登錄,那么系統(tǒng)管理將變得十分的不安全和可靠。可有將Linux特殊用戶(hù)權(quán)限分配給普通用戶(hù)來(lái)解決這個(gè)問(wèn)題。
我們不可以使用su讓他們直接變成root,因?yàn)檫@些用戶(hù)都必須知道root的密碼,這種方法很不安全,而且也不符合我們的分工需求。一般的做法是利用權(quán)限的設(shè)置,依工作性質(zhì)分類(lèi),讓特殊身份的用戶(hù)成為同一個(gè)工作組,并設(shè)置工作組權(quán)限。例如:要wwwadm這位用戶(hù)負(fù)責(zé)管理網(wǎng)站數(shù)據(jù),一般Apache Web Server的進(jìn)程httpd的所有者是www,您可以設(shè)置用戶(hù)wwwadm與www為同一工作組,并設(shè)置Apache默認(rèn)存放網(wǎng)頁(yè)目錄/usr/local/httpd/htdocs的工作組權(quán)限為可讀、可寫(xiě)、可執(zhí)行,這樣屬于此工作組的每位用戶(hù)就可以進(jìn)行網(wǎng)頁(yè)的管理了。
但這并不是最好的解決辦法,例如管理員想授予一個(gè)普通用戶(hù)關(guān)機(jī)的權(quán)限,這時(shí)使用上述的辦法就不是很理想。這時(shí)您也許會(huì)想,我只讓這個(gè)用戶(hù)可以以root身份執(zhí)行shutdown命令就行了。完全沒(méi)錯(cuò),可惜在通常的Linux系統(tǒng)中無(wú)法實(shí)現(xiàn)這一功能,不過(guò)已經(jīng)有了工具可以實(shí)現(xiàn)這樣的功能——sudosudo通過(guò)維護(hù)一個(gè)特權(quán)到用戶(hù)名映射的數(shù)據(jù)庫(kù)將特權(quán)分配給不同的用戶(hù),這些特權(quán)可由數(shù)據(jù)庫(kù)中所列的一些不同的命令來(lái)識(shí)別。為了獲得某一特權(quán)項(xiàng),有資格的用戶(hù)只需簡(jiǎn)單地在命令行輸入sudo與命令名之后,按照提示再次輸入口令(用戶(hù)自己的口令,不是root用戶(hù)口令)。例如,sudo允許普通用戶(hù)格式化磁盤(pán),但是卻沒(méi)有賦予其他的root用戶(hù)特權(quán)。
1、sudo工具由文件/etc/sudoers進(jìn)行配置,該文件包含所有可以訪問(wèn)sudo工具的用戶(hù)列表并定義了他們的特權(quán)。一個(gè)典型的/etc/sudoers條目如下:
liming ALL=(ALL) ALL
這個(gè)條目使得用戶(hù)liming作為超級(jí)用戶(hù)訪問(wèn)所有應(yīng)用程序,如用戶(hù)liming需要作為超級(jí)用戶(hù)運(yùn)行命令,他只需簡(jiǎn)單地在命令前加上前綴sudo。因此,要以root用戶(hù)的身份執(zhí)行命令format,liming可以輸入如下命令:
# sudo /usr/sbin/useradd sam
注意:命令要寫(xiě)絕對(duì)路徑,/usr/sbin默認(rèn)不在普通用戶(hù)的搜索路徑中,或者加入此路徑:PATH=$PATH:/usr/sbin;export PATH。另外,不同系統(tǒng)命令的路徑不盡相同,可以使用命令“whereis 命令名”來(lái)查找其路徑。
這時(shí)會(huì)顯示下面的輸出結(jié)果:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
#1) Respect the privacy of others.
#2) Think before you type.
Password:
如果liming正確地輸入了口令,命令useradd將會(huì)以root用戶(hù)身份執(zhí)行。
注意:配置文件/etc/sudoers必須使用命令 Visudo來(lái)編輯。
只要把相應(yīng)的用戶(hù)名、主機(jī)名和許可的命令列表以標(biāo)準(zhǔn)的格式加入到文件/etc/sudoers,并保存就可以生效,再看一個(gè)例子。
2、例子:管理員需要允許gem用戶(hù)在主機(jī)sun上執(zhí)行reboot和shutdown命令,在/etc/sudoers中加入:
gem sun=/usr/sbin/reboot,/usr/sbin/shutdown
注意:命令一定要使用絕對(duì)路徑,以避免其他目錄的同名命令被執(zhí)行,從而造成安全隱患。
然后保存退出,gem用戶(hù)想執(zhí)行reboot命令時(shí),只要在提示符下運(yùn)行下列命令:
]$ sudo /usr/sbin/reboot
輸入正確的密碼,就可以重啟服務(wù)器了。
如果您想對(duì)一組用戶(hù)進(jìn)行定義,可以在組名前加上%,對(duì)其進(jìn)行設(shè)置,如:
%cuug ALL=(ALL) ALL
3、另外,還可以利用別名來(lái)簡(jiǎn)化配置文件。別名類(lèi)似組的概念,有用戶(hù)別名、主機(jī)別名和命令別名。多個(gè)用戶(hù)可以首先用一個(gè)別名來(lái)定義,然后在規(guī)定他們可以執(zhí)行什么命令的時(shí)候使用別名就可以了,這個(gè)配置對(duì)所有用戶(hù)都生效。主機(jī)別名和命令別名也是如此。注意使用前先要在/etc/sudoers中定義:User_Alias, Host_Alias, Cmnd_Alias項(xiàng),在其后面加入相應(yīng)的名稱(chēng),也以逗號(hào)分隔開(kāi)就可以了,舉例如下:
Host_Alias SERVER=no1
User_Alias ADMINS=liming,gem
Cmnd_Alias SHUTDOWN=/usr/sbin/halt,/usr/sbin/shutdown,/usr/sbin/reboot
ADMINS SERVER=SHUTDOWN
4、再看這個(gè)例子:
ADMINS ALL=(ALL) NOPASSWD: ALL
表示允許ADMINS不用口令執(zhí)行一切操作,其中“NOPASSWD:”項(xiàng)定義了用戶(hù)執(zhí)行操作時(shí)不需要輸入口令。
5、sudo命令還可以加上一些參數(shù),完成一些輔助的功能,如
$ sudo –l
會(huì)顯示出類(lèi)似這樣的信息:
User liming may run the following commands on this host:
(root) /usr/sbin/reboot
說(shuō)明root允許用戶(hù)liming執(zhí)行/usr/sbin/reboot命令。這個(gè)參數(shù)可以使用戶(hù)查看自己目前可以在sudo中執(zhí)行哪些命令。
6、在命令提示符下鍵入sudo命令會(huì)列出所有參數(shù),其他一些參數(shù)如下:
-V 顯示版本編號(hào)。
-h 顯示sudo命令的使用參數(shù)。
-v 因?yàn)閟udo在第一次執(zhí)行時(shí)或是在N分鐘內(nèi)沒(méi)有執(zhí)行(N預(yù)設(shè)為5)會(huì)詢(xún)問(wèn)密碼。這個(gè)參數(shù)是重新做一次確認(rèn),如果超過(guò)N分鐘,也會(huì)問(wèn)密碼。
-k 將會(huì)強(qiáng)迫使用者在下一次執(zhí)行sudo時(shí)詢(xún)問(wèn)密碼(不論有沒(méi)有超過(guò)N分鐘)。
-b 將要執(zhí)行的命令放在背景執(zhí)行。
-p prompt 可以更改問(wèn)密碼的提示語(yǔ),其中%u會(huì)替換為使用者的賬號(hào)名稱(chēng),%h會(huì)顯示主機(jī)名稱(chēng)。
-u username/#uid 不加此參數(shù),代表要以root的身份執(zhí)行命令,而加了此參數(shù),可以以u(píng)sername的身份執(zhí)行命令(#uid為該username的UID)。
-s 執(zhí)行環(huán)境變量中的 SHELL 所指定的 Shell ,或是 /etc/passwd 里所指定的 Shell。
-H 將環(huán)境變量中的HOME(宿主目錄)指定為要變更身份的使用者的宿主目錄。(如不加-u參數(shù)就是系統(tǒng)管理者root。)
要以系統(tǒng)管理者身份(或以-u更改為其他人)執(zhí)行的命令。
Linux特殊用戶(hù)權(quán)限的分配可以幫助我們更好、更安全的管理系統(tǒng)。
【編輯推薦】