[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 安全技術 > 系統 > 正文
linux系統安全(一)
本文出自:http://www.xici.net 作者:大鷹 (2001-08-01 09:00:00)
1.安全管理 

安全管理主要分為四個方面: 

(1)防止未授權存取:這是計算機安全最重要的問題:未被使用系統的人進入系 

統.用戶意識,良好的口令管理(由系統管理員和用戶雙方配合),登錄活動 

記錄和報告,用戶和網絡活動的周期檢查,這些都是防止未授權存取的關鍵. 

(2)防止泄密:這也是計算機安全的一個重要問題.防止已授權或未授權的用戶 

相互存取相互的重要信息.文件系統查帳,su登錄和報告,用戶意識,加密都 

是防止泄密的關鍵. 

(3)防止用戶拒絕系統的管理:這一方面的安全應由操作系統來完成.一個系統 

不應被一個有意試圖使用過多資源的用戶損害.不幸的是,UNIX不能很好地 

限制用戶對資源的使用,一個用戶能夠使用文件系統的整個磁盤空間,而 

UNIX基本不能阻止用戶這樣做.系統管理員最好用PS命令,記帳程序df和du 

周期地檢查系統.查出過多佔用CUP的進程和大量佔用磁盤的文件. 

(4)防止丟失系統的完整性:這一安全方面與一個好系統管理員的實際工作(例 

如:周期地備份文件系統,系統崩潰運行fsck檢查,修復文件系統,當有新 

用戶時,檢測該用戶是否可能使系統崩潰的軟件)和保持一個可靠的操作系 

統有關(即用戶不能經常性地使系統崩潰). 

本文其余部分主要涉及前兩個問題,第三個問題在"安全查帳"一節討論. 


.超級用戶 




一些系統管理命令只能由超級用戶運行.超級用戶擁有其他用戶所沒有的特 

權,超級用戶不管文件存取許可方式如何,都可以讀,寫任何文件,運行任何程序. 

系統管理員通常使用命令: /bin/su 或以 root 進入系統從而成為超級用戶.在 

面文章中以#表示應敲入必須由超級用戶運行的命令,用$表示應敲入由所有其 

他用戶運行的命令. 


2.文件系統安全 


(1)UNIX文件系統概述 

UNIX文件系統是UNIX系統的心臟部分,提供了層次結構的目錄和文件.文 

件系統將磁盤空間劃分為每1024個字節一組,稱為塊(block)(也有用512字節 

為一塊的,如:SCO XENIX).編號從0到整個磁盤的最大塊數. 

全部塊可劃分為四個部分,塊0稱為引導塊,文件系統不用該塊;塊1稱為專 

用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其它兩部分的大小.從 

塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,面將做討論. 

i節點表之是空閑存儲塊(數據存儲塊),可用存放文件內容. 

文件的邏輯結構和物理結構是十分不同的,邏輯結構是用戶敲入cat命令 

所看到的文件,用戶可得到表示文件內容的字符流.物理結構是文件實際上 

如何存放在磁盤上的存儲格式.用戶認為自己的文件是邊疆的字符流,但實際 

上文件可能並不是以邊疆的方式存放在磁盤上的,長一塊的文件通常將分散 

地存放在盤上.然而當用戶存取文件時,UNIX文件系統將以正確的順序取各塊, 

給用戶提供文件的邏輯結構. 

當然,在UNIX系統的某處一定會有一個表,告訴文件系統如何將物理結構 

轉換為邏輯結構.這就涉及到i節點了.i節點是一個64字節長的表,含有有關一 

個文件的信息,其中有文件大小,文件所有者,文件存取許可方式,以及文件為 

普通文件,目錄文件還是特別文件等.在i節點中最重要的一項是磁盤地址表. 

該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出 

一個至多10塊長的文件的邏輯結構,文件將以塊號在磁盤地址表中出現的順序 

依次取相應的塊. 

當文件長10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這 

個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長266塊的文 

件(272,384字節).如果文件大266塊,磁盤地址表的第十二項給出一個塊號, 

這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊, 

塊中含256個塊號,這些塊號才用取文件的內容.磁盤地址中和第十三項索引 

尋址方式與第十二項類似,只是多一級間接索引. 

這樣,在UNIX系統中,文件的最大長度是16,842,762塊,即17,246,988,288 

字節,有幸是是UNIX系統對文件的最大長度(一般為1到2M字節)加了更實際的 

限制,使用戶不會無意中建立一個用完整個磁盤窨所有塊的文件. 

文件系統將文件名轉換為i節點的方法實際上相當簡單.一個目錄實際上 

是一個含有目錄表的文件:對目錄中的每個文件,在目錄表中有一個入口項, 

入口項中含有文件名和與文件相應的i節點號.當用戶敲入cat xxx時,文件系 

統就在當前目錄表中查找名為xxx的入口項,得到與文件xxx相應的i節點號,然 

開始取含有文件xxx的內容的塊. 



(2)設備文件 

UNIX系統與邊在本系統上的各種設備之間的通訊,通過特別文件來實現, 

就程序而言,磁盤是文件,MODEM是文件,甚至內存也是文件.所有連接到系統上 

的設備都在/dev目錄中有一個文件與其對應.當在這些文件上執行I/O操作時, 

由UNIX系統將I/O操作轉換成實際設備的動作.例如,文件/dev/mem是系統的內 

存,如果cat這個文件,實際上是在終端顯示系統的內存.為了安全起見,這個文 

件對普通用戶是不可讀的.因為在任一給定時間,內存區可能含有用戶登錄口 

令或運行程序的口令,某部分文件的編輯緩沖區,緩沖區可能含有用ed -x命令 

解密的文本,以及用戶不願讓其他人存取的種種信息. 

在/dev中的文件通常稱為設備文件,用ls /dev命令可以看看系統中的一 

些設備: 

acuo 呼叫自動撥號器 

console 系統控制台 

dsknn 塊方式操作磁盤分區 

kmem 核心內存 

mem 內存 

lp 打印機 

mto 塊方式操作磁帶 

rdsknn 流方式操作的磁盤分區 

rmto 流方式操作的磁帶 

swap 交換區 

syscon 系統終端 

ttynn 終端口 

x25 網絡端口 

等等 



(3)/etc/mknod命令 

用建立設備文件.只有root能使用這個命令建立設備文件.其參數是文 

件名,字母c或b分別代表字符特別文件或塊特別文件,主設備號,次設備號.塊 

特別文件是像磁帶,磁盤這樣一些以塊為單位存取數據的設備.字符特別文件 

是如像終端,打印機,MODEM,或者其它任何與系統通訊時,一次傳輸一個字符的 

設備,包括模仿對磁盤進行字符方式存取的磁盤驅動器.主設備號指定了系統 

子程序(設備驅動程序),當在設備上執行I/O時,系統將調用這個驅動程序.調 

用設備驅動程序時,次設備號將傳遞給該驅動程序(次設備規定具體的磁盤驅 

動器,帶驅動器,信號線編號,或磁盤分區).每種類型的設備一般都有自己的設 

備驅動程序. 

文件系統將主設備號和次設備號存放在i節點中的磁盤地址表內,所以沒 

有磁盤空間分配給設備文件(除i節點本身佔用的磁盤區外).當程序試圖在設 

備文件上執行I/O操作時,系統識別出該文件是一個特別文件,並調用由主設備 

號指定的設備驅動程序,次設備號作為調用設備驅動程序的參數. 



(4)安全考慮 

將設備處理成文件,使得UNIX程序獨立設備,即程序不必一定要了解正 

使用的設備的任何特性,存取設備也不需要記錄長度,塊大小,傳輸速度,網絡 

協議等這樣一些信息,所有煩人的細節由設備驅動程序去關心考慮,要存取設 

備,程序只須打開設備文件,然作為普通的UNIX文件來使用. 

從安全的觀點來看這樣處理很好,因為任何設備上進行的I/O操作只經過 

了少量的渠道(即設備文件).用戶不能直接地存取設備.所以如果正確地設置 

了磁盤分區的存取許可,用戶就只能通過UNIX文件系統存取磁盤.文件系統有 

內部安全機制(文件許可).不幸的是,如果磁盤分區設備得不正確,任何用戶都 

能夠寫一個程序讀磁盤分區中的每個文件,作法很簡單:讀一i節點,然以磁 

盤地址表中塊號出現的順序,依次讀這些塊號指出的存有文件內容的塊.故除 

了root以外,決不要使盤分區對任何人可寫.因為所有者,文件存取許可方式這 

樣一些信息存放i節點中,任何人只要具有已安裝分區的寫許可,就能設置任 

何文件的SUID許可,而不管文件的所有者是誰,也不必用chmod()命令,還可避 

過系統建立的安全檢查. 

以上所述對內存文件mem,kmem和對換文件swap也是一樣的.這些文件含有 

用戶信息,一個"耐心"的程序可以將用戶信息提取出來. 

要避免磁盤分區(以及其它設備)可讀可寫,應當在建立設備文件前先用 

umask命令設置文件建立屏蔽值. 

一般情況下,UNIX系統上的終端口對任何人都是可寫的,從而使用戶可以 

用write命令發送信息.雖然write命令易引起安全方面的問題,但大多數用戶 

覺得用write得到其他用戶的信息很方便,所以系統將終端設備的存取許可設 

置成對所有用戶可寫. 

/dev目錄應當是755存取許可方式,且屬root所有. 

不允許除root外的任何用戶讀或寫盤分區的原則有一例外,即一些程序 

(通常是數據庫系統)要求對磁盤分區直接存取,解決這個問題的經驗的盤分區 

應當由這種程序專用(不安裝文件系統),而且應當告知使用這種程序的用戶, 

文件安全保護將由程序自己而不是UNIX文件系統完成. 



(5)find命令 

find命令用搜索目錄樹,並對目錄樹上的所有文件執行某種操作,參數 

是目錄名表(指出從哪些起點開始搜索),還可給出一個或多個選項,規定對每 

個文件執行什操作. 

find . -print 將列出當前工作目錄下的目錄樹的每一個文件. 

find / -user bob -print 將列出在系統中可找到的屬bob用戶的所有 

文件. 

find /usr/bob -perm 666 -print 將列出/usr/bob目錄樹下所有存取許 

可為666的文件.若將666改為-666則將列出所有具有包含了666在內 

的存取許可方式的文件(如777). 

find /usr/bob -type b -print 將列出/usr/bob目錄樹下所有塊特別文 

件(c為字符特別文件). 

find / -user root -perm -4000 -exec ls -l {} ; 是一個較復雜一 

點的命令,-exec COMMAND ;允許對所找到的每個文件運行指定的 

命令COMMAND.若COMMAND中含有{},則{}將由find所找到的文件名替 

換.COMMAND必須以;結束. 

以上舉例介紹find的用法,各選項可組合使用以達到更強的功能. 



(6)secure程序 

系統管理員應當做一個程序以定期檢查系統中的各個系統文件,包括檢查 

設備文件和SUID,SGID程序,尤其要注意檢查SUID,SGID程序,檢查/etc/passwd 

和/etc/group文件,尋找久未登錄的戶頭和校驗各重要文件是否被修改. 

(源程序清單將在今發表) 



(7)ncheck命令 

用檢查文件系統,只用一個磁盤分區名作為參數,將列出i節點號及相應 

的文件名.i節點相同的文件為建鏈文件. 

注意:所列出的清單文件名與mount命令的第一個域相同的文件名前部分 

將不會列出來.因為是做文件系統內部的檢查,ncheck並不知道文件系統安裝 

點以上部分的目錄. 

也可用此命令來搜索文件系統中所有的SUID和SGID程序和設備文件,使用 

-s選項來完成此項功能. 



(8)安裝和拆卸文件系統 

UNIX文件系統是可安裝的,這意味著每個文件系統可以連接到整個目錄樹 

的任意節點上(根目錄總是被安裝上的).安裝文件系統的目錄稱為安裝點. 

/etc/mount命令用安裝文件系統,用這條命令可將文件系統安裝在現有 

目錄結構的任意處. 

安裝文件系統時,安裝點的文件和目錄都是不可存取的,因此未安裝文件 

系統時,不要將文件存入安裝點目錄.文件系統安裝,安裝點的存取許可方式 

和所有者將改變為所安裝的文件根目錄的許可方式和所有者. 

安裝文件系統時要小心:安裝點的屬性會改變!還要注意新建的文件,除非 

新文件系統是由標準文件建立的,系統標準文件會設置適當的存取許可方式, 

否則新文件系統的存取許可將是777! 

可用-r選項將文件系統安裝成只讀文件系統.需要寫保護的帶驅動器和磁 

盤應當以這種方式來安裝. 

不帶任何參數的/etc/mount可獲得系統中所安裝的文件系統的有關信息. 

包括:文件系統被安裝的安裝點目錄,對應/dev中的哪個設備,只讀或可讀寫, 

安裝時間和日期等. 

從安全的觀點來講,可安裝系統的危險來自用戶可能請求系統管理員為其 

安裝用戶自己的文件系統.如果安裝了用戶的文件系統,則應在允許用戶存取 

文件系統前,先掃描用戶的文件系統,搜索SUID/SGID程序和設備文件.在除了 

root外任何人不能執行的目錄中安裝文件系統,用find命令或secure列出可疑 

文件,刪除不屬用戶所有的文件的SUID/SGID許可. 

用戶的文件系統用完,可用umount命令卸下文件系統.並將安裝點目錄 

的所有者改回root,存取許可改為755. 



(9)系統目錄和文件 

UNIX系統中有許多文件不允許用戶寫,如:/bin,/usr/bin,/usr/lbin, 

/etc/passwd,/usr/lib/crontab,/unix,/etc/rc,/etc/inittab這樣一些文件 

和目錄(大多數的系統目錄),可寫的目錄允許移動文件,會引起安全問題. 

系統管理員應經常檢查系統文件和目錄的許可權限和所有者.可做一個程 

序根據系統提供的規則文件(在/etc/permlist文件中)所描述的文件所有者和 

許可權規則檢查各文件. 

(源程序清單將在今發表) 

注意:如果系統的安全管理不好,或系統是新安裝的,其安全程序不夠高, 

可以用make方式在安全強的系統上運行上述程序,將許可規則文件拷貝到新系 

統來,再以設置方式在新系統上運行上述程序,就可提高本系統的安全程序.但 

要記住,兩個系統必須運行相同的UNIX系統版本. 


3.作為root運行的程序 

在UNIX系統中,有些程序由系統作為root進程運行.這些程序並不總是具有 

SUID許可,因為其不少程序僅由root運行,系統管理員需要清楚這些程序做什, 

以及這些程序還將運行其它什程序. 


(1)啟動系統 

當某些UNIX系統(如SCO UNIX/XENIX)啟動時,是以被稱為單用戶的方式運 

行,在這種方式中普通用戶不能登錄,唯有的進程是init,swapper,以及一些由 

系統管理員從控制台運行的進程.UNIX系統的單用戶方式啟動,使系統管理員 

能在允許普通用戶登錄以前,先檢查系統操作,確保系統一切正常,當系統處 

單用戶方式時,控制台作為超級用戶,命令揭示是"#",有些UNIX系統不要確認 

超級用戶口令就認可控制台是root,給出#提示符.這就可能成為一個安全問題. 


(2)init進程 

UNIX系統總是以某種方式或稱為某種級運行,系統有若幹種運行級,這些 

運行級由init進程控制. 

UNIX系統啟動時以單用戶方式運行,也叫1級或S級. 

對其他用戶登錄進入系統,UNIX有一種多用戶運行方式,也叫2級. 

init進程控制系統運行級,它讀入文件/etc/inittab,該文件詳細地規定 

了哪些進程在哪一級運行.當root敲入init n(數字),系統就進入n級.init讀 

該文件以確定終止哪些進程,啟動哪些進程. 

有效的運行級的數值是從0到6與s. 

注意:由init建立的進程以UID為0運行(root)從/etc/inittab運行的程序 

也作為root運行,所以系統管理員要確保自己知道/etc/inittab中的程序做什 

工作,確保這些程序以及這些程序所在的目錄直到/和/etc/inittab除root 

外無人可寫. 


(3)進入多用戶 

當UNIX系統進入多用戶方式時,將寢化一系列事件,接著開始執行gettys, 

允許其他用戶登錄進入系統.如果再看看/etc/inittab文件,會看到gettys定 

義在運行級2,至少三個shell程序/etc/brc,/etc/bcheckrc,/etc/rc*也定義 

在運行級2.這些程序都在gettys啟動前運行. 

這些shell程序作為root運行,也不能僅對root可寫還應當檢查shell程序 

運行的命令,因為這些命令也將作為root運行. 


(4)shutdown命令 

用shutdown命令關系統,shutdown shell程序發送警告通知所有用戶離開 

系統,在"給定的期限時間"到了,就終止進程,拆卸文件系統,進入單用戶方 

式或關機狀態.一旦進入單用戶方式,所有的gettys停止運行,用戶再不能登錄. 

進入關機狀態可將系統關電. 

shutdown僅能由作為root登錄的用戶從系統控制台上運行.所以任何的 

shutdown運行的命令僅能對root可寫. 


(5)系統V的cron程序 

cron在UNIX系統是多用戶方式時運行,根據規定的時間安排執行指定的命 

令,每隔一分鐘檢查一次文件/usr/lib/crontab,尋找是否有應當運行的程序? 

如果找到要運行的程序,就運行該程序,否則睡眠等待一分鐘. 

實際的/usr/lib/crontab用根據全天的規則時間表運行程序,也可在夜 

晚運行白天不願運行怕降低其他用戶速度的程序.通常由cron運行的程序是如 

記帳,存文件這樣的程序.cron一般在系統進入多用戶由/etc/rc啟動,當 

shutdown運行killall命令時便終止運行.由cron運行的程序作為root,所以應 

當注意放什程序在crontab中,還要確保/usr/lib/crontab和該表中列出的 

任何程序對任何人不可寫. 

如果用戶需要由cron執行一個程序,系統管理員可用su命令在crontab表 

中建立一個入口,使用戶的程序不能獲得root的權限. 



(6)系統V版本2之的cron程序 

在系統V版本2中,cron被修改成允許用戶建立自己的crontab入口, 

/usr/lib/crontab文件不再存在,由目錄/usr/spool/cron/crontabs中的文件 

代替.這些文件的格式與crontab相同,但每個文件與系統中的一個用戶對應, 

並以某用戶的名義由cron運行. 

如果想限制能建立crontab的用戶,可在文件/usr/lib/cron/cron.allow 

文件中列出允許運行crontab命令的用戶.任何未列該文件的用戶不能運行 

crontab.反之,若更願意列出不允許運行crontab命令的用戶,則可將他們列入 

/usr/lib/cron/cron.deny文件中,未列該文件的其他用戶將被允許建立 

crontab. 

注意:若兩個文件都存在,系統將使用cron.allow,忽略cron.deny.如果兩 

個文件都不存在,則只有root可運行crontab.所以,若要允許系統中的所有用 

戶都可運行crontab命令,應當建立一個空的cron.deny文件,如果cron.allow 

也存在,則刪除該文件. 

這個版本的cron命令的安全程度比前一個高,因為用戶只能看自己的 

crontab,系統管理員也不必擔心其他用戶的程序是否會作為root運行,由允 

許每個系統登錄用戶有自己的crontab,也簡化了對程序必須由cron運行,但不 

必作為root運行的系統程序的處理. 

必須確保root的crontab文件僅對root可寫,並且該文件所在的目錄及所 

有的父目錄也僅對root可寫. 


(7)/etc/profile 

每當用戶(包括root在內)登錄時,由shell執行/etc/profile文件,應確保 

這個文件以及從這個文件運行的程序和命令都僅對root可寫. 

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★