|
Unix中賦予用戶特殊權(quán)限 在Unix系統(tǒng)中,管理員往往不只是一個人,若每位管理員都用root身份進行管理工作,根本無法弄清楚誰該做什么。所以最好的方式是:管理員當系統(tǒng)的root,然后創(chuàng)建一些普通用戶,分配一部分系統(tǒng)管理工作給他們。
在Unix系統(tǒng)中,管理員往往不只是一個人,若每位管理員都用root身份進行管理工作,根本無法弄清楚誰該做什么。所以最好的方式是:管理員當系統(tǒng)的root,然后創(chuàng)建一些普通用戶,分配一部分系統(tǒng)管理工作給他們。
我們不可以使用su讓他們直接變成root,因為這些用戶都必須知道root的密碼,這種方法很不安全,而且也不符合我們的分工需求。一般的做法是利用權(quán)限的設(shè)置,依工作性質(zhì)分類,讓特殊身份的用戶成為同一工作組,并設(shè)置工作組權(quán)限。例如:要wwwadm這位用戶負責管理網(wǎng)站數(shù)據(jù),一般Apache Web Server的進程httpd的所有者是www,您可以設(shè)置用戶wwwadm與www為同一工作組,并設(shè)置Apache默認存放網(wǎng)頁目錄/usr/local/httpd/htdocs的工作組權(quán)限為可讀、可寫、可執(zhí)行,這樣屬于此工作組的每位用戶就都可以進行網(wǎng)頁的管理了。 但這并不是最好的解決辦法,例如管理員想授予一個普通用戶關(guān)機的權(quán)限,這時使用上述的辦法就不是很理想。這時您也許會想,我只讓這個用戶以root身份執(zhí)行shutdown命令就行了。完全正確!可惜在通常的Unix系統(tǒng)中無法實現(xiàn)這一功能,不過已經(jīng)有了工具可以實現(xiàn)這樣的功能—sudo。 sudo通過維護一個特權(quán)到用戶名映射的數(shù)據(jù)庫將特權(quán)分配給不同的用戶,這些特權(quán)可由數(shù)據(jù)庫中所列的一些不同的命令來識別。為了獲得某一特權(quán)項,有資格的用戶只需簡單地在命令行輸入sudo與命令名之后按照提示再次輸入口令(用戶自己的口令,不是root用戶口令)。例如,sudo允許普通用戶格式化磁盤,但是卻沒有賦予其他的root用戶特權(quán)。 sudo是一個免費軟件,我們可以從網(wǎng)址:http://www./sudo/下載它的最新版本,也可以獲得關(guān)于sudo的很多有用的文檔資料,在筆者撰寫本文時它的最新版本為sudo-1.6.6.tar.gz,執(zhí)行如下步驟進行安裝: # gzip -d sudo-1.6.6.tar.gz(解壓縮) # tar xvf sudo-1.6.6.tar(解包) # cd sudo-1.6.6 # ./configure (搜集系統(tǒng)的各項信息,配置Makefile文件,為實際編譯做準備) # make(編譯) # make install(安裝) 這是sudo源代碼版本的安裝步驟,您也可以去下載sudo的二進制安裝包,如Solaris的package包或Linux的rpm包等,這里不再贅述。 sudo工具由文件/etc/sudoers進行配置,該文件包含所有可以訪問sudo工具的用戶列表并定義了他們的特權(quán)。一個典型的/etc/sudoers條目如下: liming ALL=(ALL) ALL 這個條目使得用戶liming作為超級用戶訪問所有應(yīng)用程序,如用戶liming需要作為超級用戶運行命令,他只需簡單地在命令前加上前綴sudo。因此,要以root用戶的身份執(zhí)行命令format,liming可以輸入如下命令: # sudo /usr/sbin/format 注意:命令要寫絕對路徑,/usr/sbin默認不在普通用戶的搜索路徑中,可以加入此路徑:PATH=$PATH:/usr/sbin;export PATH。 另外,不同系統(tǒng)命令的路徑不盡相同,可以使用命令“whereis 命令名”來查找其路徑。 這時會顯示下面的輸出結(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正確地輸入了口令,命令format將會以root用戶身份執(zhí)行。 注意:配置文件/etc/sudoers必須使用命令/usr/local/sbin/visudo來編輯。只要把相應(yīng)的用戶名、主機名和許可的命令列表以標準的格式加入到文件/etc/sudoers并保存就可以生效 本文來自[Svn中文網(wǎng)]轉(zhuǎn)發(fā)請保留本站地址:http://www./unix/2010030524530.html
再看一個例子:
管理員需要允許“baoshi”用戶在主機“sun”上執(zhí)行“reboot”和“shutdown”命令,在/etc/sudoers中加入: baoshi sun=/usr/sbin/reboot,/usr/sbin/shutdown 注意:命令一定要使用絕對路徑,避免其他目錄的同名命令被執(zhí)行,造成安全隱患。 然后保存退出,baoshi用戶想執(zhí)行reboot命令時,只要在提示符下運行下列命令: $ sudo /usr/sbin/reboot 輸入正確的密碼,就可以重啟服務(wù)器了。 如果您想對一組用戶進行定義,可以在組名前加上%,對其進行設(shè)置,如: %cuug ALL=(ALL) ALL 另外,還可以利用別名來簡化配置文件。別名類似組的概念,有用戶別名、主機別名和命令別名。多個用戶可以首先用一個別名來定義,然后在規(guī)定他們可以執(zhí)行什么命令的時候使用別名就可以了,這個配置對所有用戶都生效。主機別名和命令別名也是如此。注意使用前先要在/etc/sudoers中定義:User_Alias、Host_Alias、Cmnd_Alias項,在其后面加入相應(yīng)的名稱就可以了,也以逗號分隔開,舉例如下: Host_Alias SERVER=no1 User_Alias ADMINS=liming,baoshi Cmnd_Alias SHUTDOWN=/usr/sbin/halt,/usr/sbin/shutdown,/usr/sbin/reboot ADMIN SERVER=SHUTDOWN 再看這個例子: ADMINS ALL=(ALL) NOPASSWD: ALL 表示允許ADMINS不用口令執(zhí)行一切操作,其中“NOPASSWD:”項定義了用戶執(zhí)行操作時不需要輸入口令。 sudo命令還可以加上一些參數(shù)執(zhí)行,完成一些輔助的功能,如: $ sudo -l 會顯示出類似這樣的信息: User liming may run the following commands on this host: (root) /usr/sbin/reboot 說明用戶liming被root允許執(zhí)行/usr/sbin/reboot命令。這個參數(shù)可以使用戶查看自己目前可以在sudo中執(zhí)行哪些命令,方便使用。 在命令提示符下鍵入sudo命令會列出所有參數(shù),其他一些參數(shù)如下: -V 顯示版本編號; -h 顯示sudo命令的使用參數(shù); -v 因為sudo在第一次執(zhí)行時或是在N分鐘內(nèi)沒有執(zhí)行(N預(yù)設(shè)為5)會問密碼,這個參數(shù)是重新做一次確認,如果超過N分鐘,也會問密碼; -k 將會強迫使用者在下一次執(zhí)行sudo時詢問密碼(不論有沒有超過N分鐘); -b 將要執(zhí)行的指令放在背景中執(zhí)行; -p prompt 可以更改問密碼的提示語,其中%u會代換為使用者的賬號名稱,%h會顯示主機名稱; -u username/#uid 不加此參數(shù),代表要以root的身份執(zhí)行指令,而加了此參數(shù),可以以username的身份執(zhí)行指令(#uid為該username的UID); -s 執(zhí)行環(huán)境變數(shù)中的 SHELL 所指定的 shell ,或是 /etc/passwd 里所指定的 shell ; -H 將環(huán)境變數(shù)中的HOME(宿主目錄)指定為要變更身份的使用者的宿主目錄(如不加-u參數(shù)就是系統(tǒng)管理者root); 要以系統(tǒng)管理者身份(或以-u更改為其他人)執(zhí)行的指令。 本文來自[Svn中文網(wǎng)]轉(zhuǎn)發(fā)請保留本站地址:http://www./unix/2010030524530_2.html |
|
|