服務器管理安全(下)

(下)

     6./etc/group文件
  /etc/group文件含有關於小組的信息,/etc/passwd中的每個GID在本文件中應當有相應的入口項,入口項中列出了小組名和小組中的用戶.這樣可方便地瞭解每個小組的用戶,否則必須根據GID在/etc/passwd文件中從頭至尾地尋找同組用戶.
  /etc/group文件對
 
小組的許可權限的控制並不是必要的,因爲系統用UID,GID(取自/etc/passwd)決定文件存取權限,即使/etc/group文件不存在於系統中,具有相同的GID用戶也可以小組的存取許可權限共享文件.
  小組就像登錄用戶一樣可以有口令.如果/etc/group文件入口項的第二個域爲非空,則將被認爲是加密口令,newgrp命令將要求用戶給出口令,然後將口令加密,再與該域的加密口令比較. 給小組建立口令一般不是個好作法.第一,如果小組內共享文件,若有某人猜着小組口令,則該組的所有用戶的文件就可能泄漏;其次,管理小組口令很費事, 因爲對於小組沒有類似的passwd命令.可用/usr/lib/makekey生成一個口令寫入
/etc/group.
  以下情況必須建立新組:
  (1)可能要增加新用戶,該用戶不屬於任何一個現有的小組.
  (2)有的用戶可能時常需要獨自爲一個小組.
  (3)有的用戶可能有一個SGID程序,需要獨自爲一個小組.
  (4)有時可能要安裝運行SGID的軟件系統,該軟件系統需要建立一個新組.
  要增加一個新組,必須編輯該文件,爲新組加一個入口項.
  由於用戶登錄時,系統從/etc/passwd文件中取GID,而不是從/etc/group中取GID,所以group文件和口令文件應當具有一致性.對於一個用戶的小組,UID和GID應當是相同的.多用戶小組的GID應當不同於任何用戶的UID,一般爲5位數,這樣在查看/etc/passwd文件時,就可根據5位數據的GID識別多用戶小組,這將減少增加新組,新用戶時可能產生的混淆.
  7.增加,刪除,移走用戶
  (1)增加用戶
  增加用戶有三個過程:
  . 在/etc/passwd文件中寫入新用戶的入口項.
  . 爲新登錄用戶建立一個HOME目錄.
  . 在/etc/group中爲新用戶增加一個入口項.
  在/etc/passwd文件中寫入新的入口項時,口令部分可先設置爲NOLOGIN, 以免有人做爲此新用戶登錄.在修改文件前,應mkdir /etc/ptmp,以免他人同時修改此文件.新用戶一般獨立爲一個新組,GID號與UID號相同(除非他要加入目前已存在的一個新組),UID號必須和其他人不同,HOME目錄一般設置在/usr或/home目錄下建立一個以用戶登錄名爲名稱的目錄做爲其主目錄.
  (2)刪除用戶
  刪除用戶與加用戶的工作正好相反,首先在/etc/passwd和/etc/group文件中刪除用戶的入口項,然後刪除用戶的HOME目錄和所有文件.
  rm -r /usr/loginname 刪除整個目錄樹.
  如果用戶在/usr/spool/cron/crontabs中有crontab文件,也應當刪除.
  (3)將用戶移到另一個系統
  這是一個複雜的問題,不只是拷貝用戶的文件和用戶在/etc/passwd文件中的入口項.首先一個問題是用戶的UID和GID可能已經用於另一個系統,若是出現這種情況,必須給要移的用戶分配另外的UID和GID,如果改變了用戶的UID和GID,則必須搜索該用戶的全部文件,將文件的原UID和GID改成新的UID和GID.
  用find命令可以完成這一修改:
  find . -user olduid -exec chown newuid {} ;
  find . -group oldgid -exec chgrp newgid {} ;
  也許還要爲用戶移走其它一些文件:
  /usr/mail/user和/usr/spool/cron/crontabs/user.
  如果用戶從一個不是本系統管理員的系統移來,則應對該用戶的目錄結構運行程序來檢查.一個不安全系統的用戶,可能有與該用戶其它文件存在一起的SUID/SGID程序,而這個SUID/SGID程序屬於另一個用戶.在這種情況下,如果用cpio或tar命令將用戶的目錄結構拷貝到本系統,SUID/SGID程序也將會拷貝到本系統而沒有任何警告信息.應當在允許用戶使用新系統以前先刪除這種文件的SUID/SGID許可.總之,始終堅持檢查所移用戶的文件總是更安全些.也可以用su命令進入用戶的戶頭,再拷貝用戶文件,這樣文件的所有者就是該用戶, 而不是root.
8.安全檢查
  像find和secure這樣的程序稱爲檢查程序,它們搜索文件系統,尋找出SUID/SGID文件,設備文件,任何人可寫的系統文件,設有口令的登錄用戶,具有相同UID/GID的用戶等等.
  (1)記帳
  UNIX記帳軟件包可用作安全檢查工具,除最後登錄時間的記錄外,記
 
帳系統還能保存全天運行的所有進程的完整記錄,對於一個進程所存貯的信息包括UID,命令名,進程開始執行與結束的時間,CPU時間和實際消耗的時間,該進程是否是root進程,這將有助於系統管理員瞭解系統中的用戶在幹什麼.acctcom命令可以列出一天的帳目表.有明,系統中有多個記帳數據文件,記帳信息保存在文件/usr/adm/pacct*中,/usr/adm/pacct是當前記錄文件,/usr/adm/pacctn是以前的記帳文件(n爲整型數).若有若干個記帳文件要查看,可在acctcom命令中指定文件名: acctcom /usr/adm/pacct? /usr/adm/pacct
  要檢查的問題的其中之一是:在acctcom的輸出中查找一個用戶過多的登錄過程,若有,則說明可能有人一遍遍地嘗試登錄,猜測口令,企圖非法進入系統.此外,還應查看root進程,除了系統管理員用su命令從終端進入root,系統啓動,系統停止時間,以及由init(通常init只啓動getty,login,登錄shell), cron啓動的進程和具有root SUID許可的命令外,不應當有任何root進程. 由記帳系統也可獲得有關每個用戶的CPU利用率,運行的進程數等統計數據.
  (2)其它檢查命令
  *du:報告在層次目錄結構(當前工作目錄或指定目錄起)中各目錄佔用的磁盤塊數.可用於檢查用戶對文件系統的使用情況.
  *df:報告整個文件系統當前的空間使用情況.可用於合理調整磁盤空間的使用和管理.
  *ps:檢查當前系統中正在運行的所有進程.對於用了大量CPU時間的進程,同時運行了許多進程的用戶,運行了很長時間但用了很少CPU時間的用戶進程應當深入檢查.還可以查出運行了一個無限制循環的後臺進程的用戶,未註銷戶頭就關終端的用戶(一般發生在直接連線的終端).
  *who:可以告訴系統管理員系統中工作的進展情況等等許多信息,檢查用戶的登錄時間,登錄終端.
  *su:每當用戶試圖使用su命令進入系統用戶時,命令將在/usr/adm/sulog文件中寫一條信息,若該文件記錄了大量試圖用su進入root的無效操作信息,則表明了可能有人企圖破譯root口令.
  *login:在一些系統中,login程序記錄了無效的登錄企圖(若本系統的login程序不做這項工作而系統中有login源程序,則應修改login).每天總有少量的無效登錄,若無效登錄的次數突然增加了兩倍,則表明可能有人企圖通過猜測登錄名和口令,非法進入系統.
  這裏最重要的一點是:系統管理沒越熟悉自己的用戶和用戶的工作習慣, 就越能快速發現系統中任何不尋常的事件,而不尋常的事件意味着系統已被人竊密.
(3)安全檢查程序的問題
  關於以上的檢查方法的一個警告,若有誘騙,則這些方法中沒有幾個能防誘騙.如find命令,如果碰到路徑名長於256個字符的文件或含有多於200個文件的目錄,將放棄處理該文件或目錄,用戶就有可能利用建立多層目錄結構或大目錄隱藏SUID程序,使其逃避檢查(但find命令會給出一個錯誤信息,系統管理員應手工檢查這些目錄和文件).也可用ncheck命令搜索文件系統,但它沒有find命令指定搜索哪種文件的功能.
  如果定期存取.profile文件,則檢查久未登錄用戶的方法就不奏效了.而用戶用su命令時,除非用參數-,否則su不讀用戶的.profile.
  有三種方法可尋找久未登錄的帳戶:
  . UNIX記帳系統在文件/usr/adm/acct/sum/login中爲每個用戶保留了最後一次登錄日期.用這個文件的好處是,該文件由系統維護,所以可完全肯定登錄日期是準確的.缺點是必須在系統上運行記帳程序以更新loginlog文件,如果在清晨(午夜後)運行記帳程序,一天的登錄日期可能就被清除了.
  . /etc/passwd文件中的口令時效域將能告訴系統管理員,用戶的口令是否過期了,若過期,則意味着自過期以來,戶頭再未被用過.這一方法的好處在於系統記錄了久未用的戶頭,檢查過程簡單,且不需要記帳系統所需要的磁盤資源,缺點是也許系統管理員不想在系統上設置口令時效, 而且這一方法僅在口令的最大有效期(只有幾周)纔是準確的.
  . 系統管理員可以寫一個程序,每天(和重新引導系統時)掃描/etc/wtmp, 自己保留下用戶最後登錄時間記錄,這一方法的好處是不需要記帳程序, 並且時間準確,缺點是要自己寫程序.
  以上任何方法都可和/usr/adm/sulog文件結合起來,查出由login或su登錄戶頭的最後登錄時間. 如果有人存心破壞系統安全,第一件要做的事就是尋找檢查程序.破壞者將修改檢查程序,使其不能報告任何異常事件,也可能停止系統記帳,刪除記帳文件,使系統管理員不能發現破壞者幹了些什麼.
(4)系統泄密後怎麼辦?
  發現有人已經破壞了系統安全的時候,這時系統管理員首先應做的是面對肇事用戶.如果該用戶所做的事不是蓄意的,而且公司沒有關於"破壞安全"的規章,也未造成損壞,則系統管理員只需清理系統,並留心該用戶一段時間.如果該用戶造成了某些損壞,則應當報告有關人士,並且應儘可能地將系統恢復到原來的狀態.
  如果肇事者
 
是非授權用戶,那就得做最壞的假設了:肇事者已設法成爲root且本系統的文件和程序已經泄密了.系統管理員應當想法查出誰是肇事者,他造成了什麼損壞?還應當對整個文件做一次全面的檢查,並不只是檢查SUID和SGID,設備文件.如果系統安全被一個敵對的用戶破壞了,應當採用下面的步驟:
  . 關係統,然後重新引導,不要進入多用戶方式,進入單用戶方式.
  . 安裝含有本系統原始UNIX版本的帶和軟盤.
  . 將/bin,/usr/bin,/etc,/usr/lib中的文件拷貝到一個暫存目錄中.
  . 將暫存目錄中所有文件的校驗和(用原始版本的suM程序拷貝做校驗和, 不要用/bin中的suM程序做)與系統中所有對就的文件的校驗和進行比較,如果有任何差別,要查清差別產生的原因.如果兩個校驗和不同,是由於安裝了新版本的程序,確認一相是否的確是安裝了新版本程序.如果不能找出校驗和不同的原因,用暫存目錄中的命令替換系統中的原有命令.
  . 在確認系統中的命令還未被竄改之前,不要用系統中原命令.用暫存目錄中的shell,並將PATH設置爲僅在暫存目錄中搜索命令.
  . 根據暫存目錄中所有系統命令的存取許可,檢查系統中所有命令的存取許可.
  . 檢查所有系統目錄的存取許可,如果用了perms,檢查permlist文件是否被竄改過.
  . 如果系統UNIX(/unix)的校驗和不同於原版的校驗和,並且系統管理員從未修改過核心,則應當認爲,一個非法者"很能幹",從暫存緩衝區重新裝入系統.系統管理員可以從逐步增加的文件系統備份中恢復用戶的文件,但是在檢查備份中的"有趣"文件之前,不能做文件恢復.
  . 改變系統中的所有口令,通知用戶他們的口令已改變,應找系統管理員得到新口令.
  . 當用戶來要新口令時,告訴用戶發生了一次安全事故,他們應查看自己的文件和目錄是否潛伏着危害(如SUID文件,特洛依***,任何人可寫的目錄),並報告系統管理員任何異乎尋常的情況.
  . 設法查清安全破壞是如何發生的?如果沒有肇事者說明,這也許是不可能弄清的.如果能發現肇事者如何進入系統,設法堵住這個安全漏洞.
  第一次安裝UNIX系統時,可以將shell,sum命令,所有文件的校驗和存放在安全的介質上(帶,軟盤,硬盤和任何可以卸下並鎖焉起來的介質).於是不必再從原版系統帶上重新裝入文件,可以安裝備份介質,裝入shell和sum,將存在帶上的校驗和與系統中文件的校驗和進行比較.系統管理員也許想自己寫一個計算校驗和的程序,破壞者將不能知道該程序的算法,如果將該程序及校驗和保存在帶上,這一方法的保密問題就減小到一個物理的安全問題,即只需將帶鎖起來.
  9.加限制的環境
  (1)加限制的shell(rsh)
  該shell幾乎與普通的shell相同,但是該shell的設計能限制一個用戶的能力,不允許用戶有某些標準shell所允許的行爲:
  . 不能改變工作目錄(cd).
  . 不能改變PATH或SHELL shell變量.
  . 不能使用含有"/"的命令名.
  . 不能重定向輸出(>和>>).
  . 不能用exec執行程序.
  用戶在登錄時,招待.profile文件後系統就強加上了這些限制,如果用戶在.profile文件正被解釋時按了BREAK鍵或DELETE鍵,該用戶將被註銷.
  這些簡單的限制,使用寫受限制用戶的.profile文件的系統管理員可以對用戶能使用什麼命令,進行完全的控制.
  應當注意:系統V加限制的shell實際上不是很安全,在敵對的用戶時不要用.系統V版本2以後的版本中加限制的shell更安全些.但若允許受限制的用戶使用某些命令(如env,cp,ln),用戶將能逃避加限制的shell,進入非限制的shell.
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章