Unix系統(tǒng)安全必讀
本文從系統(tǒng)管理員的角度討論安全問題.系統(tǒng)管理員是管理系統(tǒng)的人:啟動系統(tǒng),停止系統(tǒng)運行,安裝新軟件,增加新用戶,刪除老用戶,以及完成保持系統(tǒng)發(fā)展和運行的日常事務(wù)工作。
1.安全管理
安全管理主要分為四個方面:
(1)防止未授權(quán)存取:這是計算機安全最重要的問題:未被使用系統(tǒng)的人進入系統(tǒng).用戶意識,良好的口令管理(由系統(tǒng)管理員和用戶雙方配合),登錄活動記錄和報告,用戶和網(wǎng)絡(luò)活動的周期檢查,這些都是防止未授權(quán)存取的關(guān)鍵。
(2)防止泄密:這也是計算機安全的一個重要問題.防止已授權(quán)或未授權(quán)的用戶相互存取相互的重要信息.文件系統(tǒng)查帳,su登錄和報告,用戶意識,加密都是防止泄密的關(guān)鍵。
(3)防止用戶拒絕系統(tǒng)的管理:這一方面的安全應(yīng)由操作系統(tǒng)來完成.一個系統(tǒng)不應(yīng)被一個有意試圖使用過多資源的用戶損害.不幸的是,Unix不能很好地限制用戶對資源的使用,一個用戶能夠使用文件系統(tǒng)的整個磁盤空間,而UNIX基本不能阻止用戶這樣做.系統(tǒng)管理員最好用PS命令,記帳程序df和du周期地檢查系統(tǒng).查出過多占用CUP的進程和大量占用磁盤的文件。
(4)防止丟失系統(tǒng)的完整性:這一安全方面與一個好系統(tǒng)管理員的實際工作(例如:周期地備份文件系統(tǒng),系統(tǒng)崩潰后運行fsck檢查,修復(fù)文件系統(tǒng),當(dāng)有新用戶時,檢測該用戶是否可能使系統(tǒng)崩潰的軟件)和保持一個可靠的操作系統(tǒng)有關(guān)(即用戶不能經(jīng)常性地使系統(tǒng)崩潰).
本文其余部分主要涉及前兩個問題,第三個問題在"安全查帳"一節(jié)討論。
2.超級用戶
一些系統(tǒng)管理命令只能由超級用戶運行.超級用戶擁有其他用戶所沒有的特權(quán),超級用戶不管文件存取許可方式如何,都可以讀,寫任何文件,運行任何程序。系統(tǒng)管理員通常使用命令: /bin/su 或以 root 進入系統(tǒng)從而成為超級用戶.在后面文章中以#表示應(yīng)敲入必須由超級用戶運行的命令,用 $表示應(yīng)敲入由所有其他用戶運行的命令。
3.文件系統(tǒng)安全
(1)Unix文件系統(tǒng)概述
UNIX文件系統(tǒng)是UNIX系統(tǒng)的心臟部分,提供了層次結(jié)構(gòu)的目錄和文件.文件系統(tǒng)將磁盤空間劃分為每1024個字節(jié)一組,稱為塊(block)(也有用512字節(jié)為一塊的,如:SCO XENIX).編號從0到整個磁盤的最大塊數(shù).全部塊可劃分為四個部分,塊0稱為引導(dǎo)塊,文件系統(tǒng)不用該塊;塊1稱為專 用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其它兩部分的大小.從塊2開始是i節(jié)點表,i節(jié)點表中含有i節(jié)點,表的塊數(shù)是可變的,后面將做討論.i節(jié)點表之后是空閑存儲塊(數(shù)據(jù)存儲塊),可用于存放文件內(nèi)容.文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)是十分不同的,邏輯結(jié)構(gòu)是用戶敲入cat命令后所看到的文件,用戶可得到表示文件內(nèi)容的字符流.物理結(jié)構(gòu)是文件實際上如何存放在磁盤上的存儲格式.用戶認為自己的文件是邊疆的字符流,但實際上文件可能并不是以邊疆的方式存放在磁盤上的,長于一塊的文件通常將分散地存放在盤上.然而當(dāng)用戶存取文件時,UNIX文件系統(tǒng)將以正確的順序取各塊,給用戶提供文件的邏輯結(jié)構(gòu).當(dāng)然,在UNIX系統(tǒng)的某處一定會有一個表,告訴文件系統(tǒng)如何將物理結(jié)構(gòu)轉(zhuǎn)換為邏輯結(jié)構(gòu).這就涉及到i節(jié)點了.i節(jié)點是一個64字節(jié)長的表,含有有關(guān)一個文件的信息,其中有文件大小,文件所有者,文件存取許可方式,以及文件為普通文件,目錄文件還是特別文件等.在i節(jié)點中最重要的一項是磁盤地址表.該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出一個至多10塊長的文件的邏輯結(jié)構(gòu),文件將以塊號在磁盤地址表中出現(xiàn)的順序依次取相應(yīng)的塊。
當(dāng)文件長于10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長于266塊的文件(272,384字節(jié)).如果文件大于266塊,磁盤地址表的第十二項給出一個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊,塊中含256個塊號,這些塊號才用于取文件的內(nèi)容.磁盤地址中和第十三項索引尋址方式與第十二項類似,只是多一級間接索引。
這樣,在Unix系統(tǒng)中,文件的最大長度是16,842,762塊,即17,246,988,288字節(jié),有幸是是UNIX系統(tǒng)對文件的最大長度(一般為1到2M字節(jié))加了更實際的限制,使用戶不會無意中建立一個用完整個磁盤窨所有塊的文件.文件系統(tǒng)將文件名轉(zhuǎn)換為i節(jié)點的方法實際上相當(dāng)簡單.一個目錄實際上是一個含有目錄表的文件:對于目錄中的每個文件,在目錄表中有一個入口項,入口項中含有文件名和與文件相應(yīng)的i節(jié)點號.當(dāng)用戶敲入cat xxx時,文件系統(tǒng)就在當(dāng)前目錄表中查找名為xxx的入口項,得到與文件xxx相應(yīng)的i節(jié)點號,然后開始取含有文件xxx的內(nèi)容的塊。
(2)保持系統(tǒng)安全
. 考慮系統(tǒng)中一些關(guān)鍵的薄弱環(huán)節(jié):
a. 系統(tǒng)是否有MODEM?電話號碼是否公布
b. 系統(tǒng)是否連接到?還有什么系統(tǒng)也連接到該網(wǎng)絡(luò)
c. 系統(tǒng)管理員是否使用未知來處或來處不可靠的程序
d. 系統(tǒng)管理員是否將重要信息放在系統(tǒng)中
e. 系統(tǒng)的用戶是熟悉系統(tǒng)的使用還是新手
f. 用戶是否很重視關(guān)心安全
g. 用戶的管理部門是否重視安全
. 保持系統(tǒng)文件安全的完整性.檢查所有系統(tǒng)文件的存取許可,任何具有SUID許可的程序都是非法者想偷換的選擇對象.
. 要特別注意設(shè)備文件的存取許可.
. 要審查用戶目錄中具有系統(tǒng)ID/系統(tǒng)小組的SUID/SGID許可的文件.
. 在未檢查用戶的文件系統(tǒng)的SUID/SGID程序和設(shè)備文件之前,不要安裝用戶的文件系統(tǒng).
. 將磁盤的備份存放在安全的地方.
. 設(shè)置口令時效,如果能存取UNIX的源碼,將加密口令和信息移到僅對root可讀的文件中,并修改系統(tǒng)的口令處理子程序.這樣可增加口令的安全.修改passwd,使passwd能刪去口令打頭和末尾的數(shù)字,然后根據(jù)spell詞典和/etc/passwd中用戶的個人信息,檢查用戶的新口令,也檢查用戶新口令中子串等于登錄名的情況.如果新口令是spell詞典中的單詞,或/etc/passwd中的入口項的某項值,或是登錄名的子串,passwd將不允許用戶改變口令.
. 記錄本系統(tǒng)的用戶及其授權(quán)使用的系統(tǒng).
. 查出久未使用的登錄戶頭,并取消該戶頭.
. 確保沒有無口令的登錄戶頭.
. 啟動記帳系統(tǒng).
. 查出不尋常的系統(tǒng)使用情況,如大量的占用磁盤,大量的使用CPU時間,大量的進程,大量的使用su的企圖,大量無效的登錄,大量的到某一系統(tǒng)的網(wǎng)絡(luò)傳輸,奇怪的uucp請求.
. 修改shell,使其等待了一定時間而無任務(wù)時終止運行.
. 修改login,使其打印出用戶登錄的最后時間,三次無效登錄后,將通訊線掛起,以便系統(tǒng)管理員能檢查出是否有人試圖非法進入系統(tǒng).確保login不讓root在除控制臺外的任何地方登錄.
. 修改su,使得只有root能以過期口令通過su進入某一戶頭.
. 當(dāng)安裝來源不可靠的軟件時,要檢查源碼和makefile文件,查看特殊的子程序調(diào)用或命令.
. 即使是安裝來源可靠的軟件,也要檢查是否有SUID(SGID)程序,確認這些許可的確是必要的.如果可能,不要讓這些程序具有系統(tǒng)ID(或組)的SUID(SGID)許可,而應(yīng)該建立一個新用戶(或給)供該軟件運行.
. 如果系統(tǒng)在辦公室中,門應(yīng)上鎖,將重要數(shù)據(jù)保存在軟盤上或帶上,并鎖起來.
. 將secure,perms和任何其它做安全檢查的shell程序存取許可置為僅執(zhí)行,更好的是將這些shell程序存于可拆卸的介質(zhì)上.
. 記住,只要系統(tǒng)有任何人都可調(diào)用的撥號線,系統(tǒng)就不可能真正的安全.系統(tǒng)管理員可以很好地防止系統(tǒng)受到偶然的破壞.但是那些有耐心,有計劃,知道自己在干什么的破壞者,對系統(tǒng)直接的有預(yù)謀的攻擊卻常常能成功.
. 如果系統(tǒng)管理員認為系統(tǒng)已經(jīng)泄密,則應(yīng)當(dāng)設(shè)法查出肇事者.若肇事者是本系統(tǒng)的用戶,與用戶的管理部門聯(lián)系,并檢查該用戶的文件,查找任何可疑的文件,然后對該用戶的登錄小心地監(jiān)督幾個星期.如果肇事者不是本系統(tǒng)的用戶,可讓本公司采取合法的措施,并要求所有的用戶改變口令,讓用戶知道出了安全事故,用戶們應(yīng)當(dāng)檢查自己的文件是否有被竄改的跡象.如果系統(tǒng)管理員認為系統(tǒng)軟件已被更改了,就應(yīng)當(dāng)從原版系統(tǒng)帶(或;軟盤)上重裝入所有系統(tǒng)軟件,保持系統(tǒng)安全比道歉更好.
(3)設(shè)備文件
Unix系統(tǒng)與邊在本系統(tǒng)上的各種設(shè)備之間的通訊,通過特別文件來實現(xiàn)就程序而言,磁盤是文件,MODEM是文件,甚至內(nèi)存也是文件.所有連接到系統(tǒng)上的設(shè)備都在/dev目錄中有一個文件與其對應(yīng).當(dāng)在這些文件上執(zhí)行I/O操作時,由UNIX系統(tǒng)將I/O操作轉(zhuǎn)換成實際設(shè)備的動作.例如,文件/dev/mem是系統(tǒng)的內(nèi)存,如果cat這個文件,實際上是在終端顯示系統(tǒng)的內(nèi)存.為了安全起見,這個文件對普通用戶是不可讀的.因為在任一給定時間,內(nèi)存區(qū)可能含有用戶登錄口令或運行程序的口令,某部分文件的編輯緩沖區(qū),緩沖區(qū)可能含有用ed -x命令解密后的文本,以及用戶不愿讓其他人存取的種種信息.在/dev中的文件通常稱為設(shè)備文件,用ls /dev命令可以看看系統(tǒng)中的一些設(shè)備:
acuo 呼叫自動撥號器
console 系統(tǒng)控制臺
dsknn 塊方式操作磁盤分區(qū)
kmem 核心內(nèi)存
mem 內(nèi)存
lp 打印機
mto 塊方式操作磁帶
rdsknn 流方式操作的磁盤分區(qū)
rmto 流方式操作的磁帶
swap 交換區(qū)
syscon 系統(tǒng)終端
ttynn 終端口
x25 網(wǎng)絡(luò)端口
等等
(4)/etc/mknod命令
用于建立設(shè)備文件.只有root能使用這個命令建立設(shè)備文件.其參數(shù)是文件名,字母c或b分別代表字符特別文件或塊特別文件,主設(shè)備號,次設(shè)備號.塊特別文件是像磁帶,磁盤這樣一些以塊為單位存取數(shù)據(jù)的設(shè)備.字符特別文件是如像終端,打印機,MODEM,或者其它任何與系統(tǒng)通訊時,一次傳輸一個字符的設(shè)備,包括模仿對磁盤進行字符方式存取的磁盤驅(qū)動器.主設(shè)備號指定了系統(tǒng)子程序(設(shè)備驅(qū)動程序),當(dāng)在設(shè)備上執(zhí)行I/O時,系統(tǒng)將調(diào)用這個驅(qū)動程序.調(diào)用設(shè)備驅(qū)動程序時,次設(shè)備號將傳遞給該驅(qū)動程序(次設(shè)備規(guī)定具體的磁盤驅(qū)動器,帶驅(qū)動器,信號線編號,或磁盤分區(qū)).每種類型的設(shè)備一般都有自己的設(shè)備驅(qū)動程序.
文件系統(tǒng)將主設(shè)備號和次設(shè)備號存放在i節(jié)點中的磁盤地址表內(nèi),所以沒有磁盤空間分配給設(shè)備文件(除i節(jié)點本身占用的磁盤區(qū)外).當(dāng)程序試圖在設(shè)備文件上執(zhí)行I/O操作時,系統(tǒng)識別出該文件是一個特別文件,并調(diào)用由主設(shè)備號指定的設(shè)備驅(qū)動程序,次設(shè)備號作為調(diào)用設(shè)備驅(qū)動程序的參數(shù).
(5)安全考慮
將設(shè)備處理成文件,使得Unix程序獨立于設(shè)備,即程序不必一定要了解正使用的設(shè)備的任何特性,存取設(shè)備也不需要記錄長度,塊大小,傳輸速度,網(wǎng)絡(luò)協(xié)議等這樣一些信息,所有煩人的細節(jié)由設(shè)備驅(qū)動程序去關(guān)心考慮,要存取設(shè)備,程序只須打開設(shè)備文件,然后作為普通的UNIX文件來使用.從安全的觀點來看這樣處理很好,因為任何設(shè)備上進行的I/O操作只經(jīng)過了少量的渠道(即設(shè)備文件).用戶不能直接地存取設(shè)備.所以如果正確地設(shè)置了磁盤分區(qū)的存取許可,用戶就只能通過UNIX文件系統(tǒng)存取磁盤.文件系統(tǒng)有內(nèi)部安全機制(文件許可).不幸的是,如果磁盤分區(qū)設(shè)備得不正確,任何用戶都能夠?qū)懸粋€程序讀磁盤分區(qū)中的每個文件,作法很簡單:讀一i節(jié)點,然后以磁盤地址表中塊號出現(xiàn)的順序,依次讀這些塊號指出的存有文件內(nèi)容的塊.故除了root以外,決不要使盤分區(qū)對任何人可寫.因為所有者,文件存取許可方式這樣一些信息存放于i節(jié)點中,任何人只要具有已安裝分區(qū)的寫許可,就能設(shè)置任何文件的SUID許可,而不管文件的所有者是誰,也不必用chmod()命令,還可避過系統(tǒng)建立的安全檢查.
以上所述對內(nèi)存文件mem,kmem和對換文件swap也是一樣的.這些文件含有用戶信息,一個"耐心"的程序可以將用戶信息提取出來.要避免磁盤分區(qū)(以及其它設(shè)備)可讀可寫,應(yīng)當(dāng)在建立設(shè)備文件前先用umask命令設(shè)置文件建立屏蔽值.
一般情況下,UNIX系統(tǒng)上的終端口對任何人都是可寫的,從而使用戶可以用write命令發(fā)送信息.雖然write命令易引起安全方面的問題,但大多數(shù)用戶覺得用write得到其他用戶的信息很方便,所以系統(tǒng)將終端設(shè)備的存取許可設(shè)置成對所有用戶可寫.
/dev目錄應(yīng)當(dāng)是755存取許可方式,且屬root所有.
不允許除root外的任何用戶讀或?qū)懕P分區(qū)的原則有一例外,即一些程序(通常是數(shù)據(jù)庫系統(tǒng))要求對磁盤分區(qū)直接存取,解決這個問題的經(jīng)驗的盤分區(qū)應(yīng)當(dāng)由這種程序?qū)S?不安裝文件系統(tǒng)),而且應(yīng)當(dāng)告知使用這種程序的用戶,文件安全保護將由程序自己而不是Unix文件系統(tǒng)完成.
(6)find命令
find命令用于搜索目錄樹,并對目錄樹上的所有文件執(zhí)行某種操作,參數(shù)是目錄名表(指出從哪些起點開始搜索),還可給出一個或多個選項,規(guī)定對每個文件執(zhí)行什么操作.
find . -print 將列出當(dāng)前工作目錄下的目錄樹的每一個文件.find / -user bob -print 將列出在系統(tǒng)中可找到的屬于bob用戶的所有文件.
find /usr/bob -perm 666 -print 將列出/usr/bob目錄樹下所有存取許可為666的文件.若將666改為-666則將列出所有具有包含了666在內(nèi)的存取許可方式的文件(如777).
find /usr/bob -type b -print 將列出/usr/bob目錄樹下所有塊特別文件(c為字符特別文件).
find / -user root -perm -4000 -exec ls -l {} ; 是一個較復(fù)雜一點的命令,-exec COMMAND ;允許對所找到的每個文件運行指定的命令COMMAND.若COMMAND中含有{},則{}將由find所找到的文件名替換.COMMAND必須以;結(jié)束.
以上舉例介紹find的用法,各選項可組合使用以達到更強的功能.
(7)secure程序
系統(tǒng)管理員應(yīng)當(dāng)做一個程序以定期檢查系統(tǒng)中的各個系統(tǒng)文件,包括檢查設(shè)備文件和SUID,SGID程序,尤其要注意檢查SUID,SGID程序,檢查/etc/passwd和/etc/group文件,尋找久未登錄的戶頭和校驗各重要文件是否被修改.(源程序清單將在今后發(fā)表)
(8)ncheck命令
用于檢查文件系統(tǒng),只用一個磁盤分區(qū)名作為參數(shù),將列出i節(jié)點號及相應(yīng)的文件名.i節(jié)點相同的文件為建鏈文件.注意:所列出的清單文件名與mount命令的第一個域相同的文件名前部分將不會列出來.因為是做文件系統(tǒng)內(nèi)部的檢查,ncheck并不知道文件系統(tǒng)安裝點以上部分的目錄.也可用此命令來搜索文件系統(tǒng)中所有的SUID和SGID程序和設(shè)備文件,使用-s選項來完成此項功能
(9)安裝和拆卸文件系統(tǒng)
Unix文件系統(tǒng)是可安裝的,這意味著每個文件系統(tǒng)可以連接到整個目錄樹的任意節(jié)點上(根目錄總是被安裝上的).安裝文件系統(tǒng)的目錄稱為安裝點./etc/mount命令用于安裝文件系統(tǒng),用這條命令可將文件系統(tǒng)安裝在現(xiàn)有目錄結(jié)構(gòu)的任意處.
安裝文件系統(tǒng)時,安裝點的文件和目錄都是不可存取的,因此未安裝文件系統(tǒng)時,不要將文件存入安裝點目錄.文件系統(tǒng)安裝后,安裝點的存取許可方式和所有者將改變?yōu)樗惭b的文件根目錄的許可方式和所有者.
安裝文件系統(tǒng)時要小心:安裝點的屬性會改變!還要注意新建的文件,除非新文件系統(tǒng)是由標準文件建立的,系統(tǒng)標準文件會設(shè)置適當(dāng)?shù)拇嫒≡S可方式,否則新文件系統(tǒng)的存取許可將是777!
可用-r選項將文件系統(tǒng)安裝成只讀文件系統(tǒng).需要寫保護的帶驅(qū)動器和磁盤應(yīng)當(dāng)以這種方式來安裝.
不帶任何參數(shù)的/etc/mount可獲得系統(tǒng)中所安裝的文件系統(tǒng)的有關(guān)信息.包括:文件系統(tǒng)被安裝的安裝點目錄,對應(yīng)/dev中的哪個設(shè)備,只讀或可讀寫,安裝時間和日期等.
從安全的觀點來講,可安裝系統(tǒng)的危險來自用戶可能請求系統(tǒng)管理員為其安裝用戶自己的文件系統(tǒng).如果安裝了用戶的文件系統(tǒng),則應(yīng)在允許用戶存取文件系統(tǒng)前,先掃描用戶的文件系統(tǒng),搜索SUID/SGID程序和設(shè)備文件.在除了root外任何人不能執(zhí)行的目錄中安裝文件系統(tǒng),用find命令或secure列出可疑文件,刪除不屬用戶所有的文件的SUID/SGID許可.
用戶的文件系統(tǒng)用完后,可用umount命令卸下文件系統(tǒng).并將安裝點目錄的所有者改回root,存取許可改為755.
(10)系統(tǒng)目錄和文件
UNIX系統(tǒng)中有許多文件不允許用戶寫,如:/bin,/usr/bin,/usr/lbin,/etc/passwd,/usr/lib/crontab,/unix,/etc/rc,/etc/inittab這樣一些文件和目錄(大多數(shù)的系統(tǒng)目錄),可寫的目錄允許移動文件,會引起安全問題.系統(tǒng)管理員應(yīng)經(jīng)常檢查系統(tǒng)文件和目錄的許可權(quán)限和所有者.可做一個程序根據(jù)系統(tǒng)提供的規(guī)則文件(在/etc/permlist文件中)所描述的文件所有者和許可權(quán)規(guī)則檢查各文件.(源程序清單將在今后發(fā)表)
注意:如果系統(tǒng)的安全管理不好,或系統(tǒng)是新安裝的,其安全程序不夠高,可以用make方式在安全強的系統(tǒng)上運行上述程序,將許可規(guī)則文件拷貝到新系 統(tǒng)來,再以設(shè)置方式在新系統(tǒng)上運行上述程序,就可提高本系統(tǒng)的安全程序.但要記住,兩個系統(tǒng)必須運行相同的Unix系統(tǒng)版本
4.作為root運行的程序
在UNIX系統(tǒng)中,有些程序由系統(tǒng)作為root進程運行.這些程序并不總是具有SUID許可,因為其不少程序僅由root運行,系統(tǒng)管理員需要清楚這些程序做什么,以及這些程序還將運行其它什么程序.
(1)啟動系統(tǒng)
當(dāng)某些UNIX系統(tǒng)(如SCO UNIX/XENIX)啟動時,是以被稱為單用戶的方式運行,在這種方式中普通用戶不能登錄,唯有的進程是init,swapper,以及一些由系統(tǒng)管理員從控制臺運行的進程.UNIX系統(tǒng)的單用戶方式啟動,使系統(tǒng)管理員能在允許普通用戶登錄以前,先檢查系統(tǒng)操作,確保系統(tǒng)一切正常,當(dāng)系統(tǒng)處于單用戶方式時,控制臺作為超級用戶,命令揭示是"#",有些UNIX系統(tǒng)不要確認超級用戶口令就認可控制臺是root,給出#提示符.這就可能成為一個安全問題.
(2)init進程
UNIX系統(tǒng)總是以某種方式或稱為某種級運行,系統(tǒng)有若干種運行級,這些運行級由init進程控制.UNIX系統(tǒng)啟動時以單用戶方式運行,也叫1級或S級.對于其他用戶登錄進入系統(tǒng),UNIX有一種多用戶運行方式,也叫2級init進程控制系統(tǒng)運行級,它讀入文件/etc/inittab,該文件詳細地規(guī)定了哪些進程在哪一級運行.當(dāng)root敲入init n(數(shù)字),系統(tǒng)就進入n級.init讀該文件以確定終止哪些進程,啟動哪些進程.
有效的運行級的數(shù)值是從0到6與s.
注意:由init建立的進程以UID為0運行(root)從/etc/inittab運行的程序也作為root運行,所以系統(tǒng)管理員要確保自己知道/etc/inittab中的程序做什么工作,確保這些程序以及這些程序所在的目錄直到/和/etc/inittab除root外無人可寫.
(3)進入多用戶
當(dāng)Unix系統(tǒng)進入多用戶方式時,將寢化一系列事件,接著開始執(zhí)行g(shù)ettys,允許其他用戶登錄進入系統(tǒng).如果再看看/etc/inittab文件,會看到gettys定義在運行級2,至少三個shell程/etc/brc,/etc/bcheckrc,/etc/rc*也定義在運行級2.這些程序都在gettys啟動前運行.這些shell程序作為root運行,也不能僅對root可寫還應(yīng)當(dāng)檢查shell程序運行的命令,因為這些命令也將作為root運行.
(4)shutdown命令
用shutdown命令關(guān)系統(tǒng),shutdown shell程序發(fā)送警告通知所有用戶離開系統(tǒng),在"給定的期限時間"到了后,就終止進程,拆卸文件系統(tǒng),進入單用戶方式或關(guān)機狀態(tài).一旦進入單用戶方式,所有的gettys停止運行,用戶再不能登錄.
進入關(guān)機狀態(tài)后可將系統(tǒng)關(guān)電.
shutdown僅能由作為root登錄的用戶從系統(tǒng)控制臺上運行.所以任何的shutdown運行的命令僅能對root可寫.
(5)系統(tǒng)V的cron程序
cron在UNIX系統(tǒng)是多用戶方式時運行,根據(jù)規(guī)定的時間安排執(zhí)行指定的命令,每隔一分鐘檢查一次文件/usr/lib/crontab,尋找是否有應(yīng)當(dāng)運行的程序?
如果找到要運行的程序,就運行該程序,否則睡眠等待一分鐘.實際的/usr/lib/crontab用于根據(jù)全天的規(guī)則時間表運行程序,也可在夜晚運行白天不愿運行怕降低其他用戶速度的程序.通常由cron運行的程序是如記帳,存文件這樣的程序.cron一般在系統(tǒng)進入多用戶后由/etc/rc啟動,當(dāng)shutdown運行killall命令時便終止運行.由cron運行的程序作為root,所以應(yīng)當(dāng)注意放什么程序在crontab中,還要確保/usr/lib/crontab和該表中列出的任何程序?qū)θ魏稳瞬豢蓪?
如果用戶需要由cron執(zhí)行一個程序,系統(tǒng)管理員可用su命令在crontab表中建立一個入口,使用戶的程序不能獲得root的權(quán)限.
