◆超級用戶權限與受權apache
●創建多個超級用戶bash
很多新系統管理員認爲root用戶是惟一的超級用戶,其實root只是系統默認的超級用戶的名稱,root並不是由於它叫root而成爲超級用戶的。隨便打開一個/etc/passwd文件的例子,你就會發現以下幾行:3d
root:asiewhgYfaoO/J:0:0:root:/root:/bin/tcsh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
lanf:Yuao56Ioyefg:0:0:bluewind:/home/bluewind:/bin/bash
jake:gUyfaiIodashfj:501:501:jake cheng:/home/jake:/bin/tcsh
apache:!!:502:502::/usr/local/apache:/bin/false日誌
能夠看到,root的UID和GID都被設置爲0了。實際上,超級用戶的充要條件就是UID和GID都等於0。也就是說,任何用戶,只要它的UID和GID都爲0,就與常被稱爲root超級用戶沒有什麼兩樣了。好比上面那個例子裏面的lanf,也是一個超級用戶。blog
因此,能夠將任何普通用戶變成超級用戶。可是,這樣作並無好處,不少時候這都會增長系統的隱患。除非在組織中須要多個系統管理員管理同一個系統,這就須要有多個超級用戶賬號。這有利於各個管理員明確責任,經過日誌知道不一樣的人分別作過什麼事。ci
還有一種狀況,也可能出現多個超級用戶賬號,那就是黑客入侵後設置一個看起來象普通賬號的用戶,卻修改了UID和GID使之爲0。這樣根本就不須要知道 root用戶密碼,就能夠執行超級用戶權限了。而從咱們的系統管理員的一方來講,咱們不可能時刻注意passwd文件的變化的,沒有那個時間也沒有那個精 力。這時只好編寫一個腳原本幫助監視,例如:io
/bin/grep ‘0:0’ /etc/passwd |awk ‘BEGIN{FS=」:」}
{print $1}’|mail –s 「`date +」%D%T」`」rootawk
這是一個很小的腳本程序,使用了一些常規的命令來查看/etc/passwd文件,把UID和GID爲0的行寄給root用戶。把這個腳本放在/etc/cron.daily文件中讓cron運行,root將天天收到一封信,報告當前的超級用戶。配置
實際上,因爲PAM(可插入驗證模塊)的限制,在telnet上是不容許超級用戶登入的,也就是說,黑客修改了本身的UID和GID後,想再次登錄從而 得到超級用戶的權限的話,不修改/etc/seuretty文件是不可能的——除非你傻到本身添加了僞TTY設備ROOT用戶登錄權限。通常可讓超級用 戶先用普通用戶賬號登錄,再su(su命令相關內容請參考本站命令查詢部分)。date
●爲普通用戶分配特權
使用sudo命 令能夠容許普通用戶執行超級用戶才能執行的命令。不管是基於信任的創建須要時間,仍是基因而否存在這種必要,咱們都不會把超級用戶的全部權限輕易許人的。 這是網管工做的原則。因此,當一些用戶必須訪問某些內容時,咱們能夠配置sudo以容許單獨的普通用戶運行特權命令。
sudo命令容許已經在/etc/sudoers文件中指定的用戶運行超級用戶命令。例如,一個已經得到許可的普通用戶能夠運行:
sudo vi /etc/passwd
實際上,sudo的配置徹底可讓咱們指定某個列入/etc/sudoers文件的普通用戶能夠作什麼、不能夠作什麼。/etc/sudoers的配置行以下:
> 空行或註釋行(以#字符打頭):無用行。
> 可選的主機別名行:用來建立主機列表的簡稱。必須以Host_Alias關鍵詞開頭,列表中的主機必須用逗號隔開。例如:
Host_Alias REDHAT=binbu,qd
其中binbu和qd是倆主機名,你能夠用REDHAT(別名)統稱它們。
>可選的用戶別名行:用來建立用戶列表的簡稱。用戶別名行必須以User_Alias關鍵詞開頭,列表中的用戶名必須以逗號隔開。其格式同主機別名行。
>可選的命令別名行:用來建立命令列表的簡稱。必須以Cmnd_alias開頭,列表中的命令必須用逗號隔開。
>可選的運行方式別名行:也是用來建立用戶列表的簡稱。不一樣的是,使用這樣的別名能夠告訴sudo程序以列表中某一用戶的身份來運行程序。
>必要的用戶訪問說明行:用戶訪問的說明語法以下:
user host= [run as user ] command list
在user處指定一個真正的用戶名或定義過的別名,一樣的,host也能夠是一個真正的主機名或者定義過的主機別名。默認狀況下,sudo執行的全部命 令都是以root身份執行。若是你想使用其餘身份能夠指定。至於command list能夠是以逗號分隔的命令列表,也能夠是一個已經定義過的別名。例如:
lanf binbu=/sbin/shutdown
這一句說明lanf能夠在binbu主機上運行關機命令。
注意:
一、能夠在一行定義多個別名,中間用:隔開。
二、能夠在命令或命令別名以前加上!號,使該命令或命令別名無效。
三、有兩個關鍵詞:ALL 和NOPASSWD。ALL意味着「全部文件」(全部主機或全部命令),NOPASSWD意味着不用密碼。
下面是一個sudoers文件的例子:
#sudoers files
#User alias specification
User_Alias ADMIN=yourid:POWERUSER=hisid,herid
#user privilege specification
ADMIN ALL=ALL
POWERUSER ALL=ALL,!/bin/su
第三行定義了兩個別名ADMIN和POWERUSER,第五行說明在全部主機上ADMIN均可以以root身份執行全部命令。第六行給POWERUSER除了運行su命令外同等ADMIN的權限。