配置安全的Linux作業系統(轉)

gugu99發表於2007-08-10
配置安全的Linux作業系統(轉)[@more@]

  一、磁碟分割槽

  1、如果是新安裝系統,對磁碟分割槽應考慮安全性:

  1)根目錄(/)、使用者目錄(/home)、臨時目錄(/tmp)和/var目錄應分開到不同的磁碟分割槽;

  2)以上各目錄所在分割槽的磁碟空間大小應充分考慮,避免因某些原因造成分割槽空間用完而導致系統崩潰;

  2、對於/tmp和/var目錄所在分割槽,大多數情況下不需要有suid屬性的程式,所以應為這些分割槽新增nosuid屬性;

  方法一:修改/etc/fstab檔案,新增nosuid屬性字。例如:

  /dev/hda2    /tmp   ext2   exec,dev,nosuid,rw   0 0

  ^^^^^^

  方法二:如果對/etc/fstab檔案操作不熟,建議透過linuxconf程式來修改。

  * 執行linuxconf程式;

  * 選擇"File systems"下的"Access local drive";

  * 選擇需要修改屬性的磁碟分割槽;

  * 選擇"No setuid programs allowed"選項;

  * 根據需要選擇其它可選項;

  * 正常退出。(一般會提示重新mount該分割槽)

  二、安裝

  1、對於非測試主機,不應安裝過多的軟體包。這樣可以降低因軟體包而導致出現安全漏洞的可能性。

  2、對於非測試主機,在選擇主機啟動服務時不應選擇非必需的服務。例如routed、ypbind等。

  三、安全配置與增強

  核心升級。起碼要升級至2.2.16以上版本。

  GNU libc共享庫升級。(警告:如果沒有經驗,不可輕易嘗試。可暫緩。)

  關閉危險的網路服務。echo、chargen、shell、login、finger、NFS、RPC等

  關閉非必需的網路服務。talk、ntalk、pop-2等

  常見網路服務安全配置與升級

  確保網路服務所使用版本為當前最新和最安全的版本。

  取消匿名FTP訪問

  去除非必需的suid程式

  使用tcpwrapper

  使用ipchains防火牆

  日誌系統syslogd

  一些細節:

  1.作業系統內部的log file是檢測是否有網路入侵的重要線索,當然這個假定你的logfile不被侵入者所破壞,如果你有臺伺服器用專線直接連到Internet上,這意味著你的IP地址是永久固定的地址,你會發現有很多人對你的系統做telnet/ftp登入嘗試,試著執行#more /var/log/secure | grep refused 去檢查。 

  2. 限制具有SUID許可權標誌的程式數量,具有該許可權標誌的程式以root身份執行,是一個潛在的安全漏洞,當然,有些程式是必須要具有該標誌的,象passwd程式。 

  3.BIOS安全。設定BIOS密碼且修改引導次序禁止從軟盤啟動系統。 

  4. 使用者口令。使用者口令是Linux安全的一個最基本的起點,很多人使用的使用者口令就是簡單的‘password',這等於給侵入者敞開了大門,雖然從理論上說沒有不能確解的使用者口令,只要有足夠的時間和資源可以利用。比較好的使用者口令是那些只有他自己能夠容易記得並理解的一串字元,並且絕對不要在任何地方寫出來。 

  5./etc/exports 檔案。如果你使用NFS網路檔案系統服務,那麼確保你的/etc/exports具有最嚴格的存取許可權設定,不意味著不要使用任何萬用字元,不允許root寫許可權,mount成只讀檔案系統。編輯檔案/etc/exports並且加:例如: 

  /dir/to/export host1.mydomain.com(ro,root_squash)

  /dir/to/export host2.mydomain.com(ro,root_squash)

  /dir/to/export 是你想輸出的目錄,host.mydomain.com是登入這個目錄的機器名,ro意味著mount成只讀系統,root_squash禁止root寫入該目錄。

  為了讓上面的改變生效,執行/usr/sbin/exportfs -a

  6.確信/etc/inetd.conf的所有者是root,且檔案許可權設定為600 。

  [root@deep]# chmod 600 /etc/inetd.conf

  

  sshd: 192.168.1.10/255.255.255.0 gate.openarch.com

  對IP地址192.168.1.10和主機名gate.openarch.com,允許透過ssh連線。

  配置完了之後,用tcpdchk檢查

  [root@deep]# tcpdchk

  tcpchk是TCP_Wrapper配置檢查工具,

  它檢查你的tcp wrapper配置並報告所有發現的潛在/存在的問題。8. 別名檔案aliases

  編輯別名檔案/etc/aliases(也可能是/etc/mail/aliases),移走/註釋掉下面的行。

  # Basic system aliases -- these MUST be present.

  

  編輯host.conf檔案(vi /etc/host.conf)且加下面的行:

  # Lookup names via DNS first then fall back to /etc/hosts. order bind,hosts

  

  [root@deep]# groupdel mail 

  如不用Sendmail伺服器,刪除這個組帳號

  [root@deep]# groupdel news

  [root@deep]# groupdel uucp

  [root@deep]# groupdel games 

  如你不用X Windows,刪除這個組帳號

  [root@deep]# groupdel dip

  [root@deep]# groupdel pppusers

  [root@deep]# groupdel popusers 

  如果你不用POP伺服器,刪除這個組帳號

  [root@deep]# groupdel slipusers

  ==== 

  用下面的命令加需要的使用者帳號

  [root@deep]# useradd username

  用下面的命令改變使用者口令

  [root@deep]# passwd username

  用chattr命令給下面的檔案加上不可更改屬性。

  [root@deep]# chattr +i /etc/passwd

  [root@deep]# chattr +i /etc/shadow

  [root@deep]# chattr +i /etc/group

  [root@deep]# chattr +i /etc/gshadow

  14. 阻止任何人su作為root.

  如果你不想任何人能夠su作為root,你能編輯/etc/pam.d/su加下面的行:

  auth sufficient /lib/security/pam_rootok.so debug

  auth required /lib/security/pam_wheel.so group=isd

  意味著僅僅isd組的使用者可以su作為root.

  然後,如果你希望使用者admin能su作為root.就執行下面的命令。

  [root@deep]# usermod -G10 admin

  16. 資源限制

  對你的系統上所有的使用者設定資源限制可以防止DoS型別攻擊(denial of service attacks)如最大程式數,記憶體數量等。例如,對所有使用者的限制象下面這樣:

  編輯/etc/security/limits.con加:

  * hard core 0

  * hard rss 5000

  * hard nproc 20

  你也必須編輯/etc/pam.d/login檔案加/檢查這一行的存在。

  session required /lib/security/pam_limits.so

  上面的命令禁止core files“core 0”,限制程式數為“nproc 50“,且限制記憶體使用為5M“rss 5000”。

  17. The /etc/lilo.conf file

  a) Add: restricted

  加這一行到每一個引導映像下面,就這表明如果你引導時用(linux single),則需要一個password.

  b) Add: password=some_password

  當與restricted聯合用,且正常引導時,需要使用者輸入密碼,你也要確保lilo.conf檔案不能被不屬於root的使用者可讀,也免看到密碼明文。下面是例子:

  編輯/etc/lilo.conf加:

  ====

    boot=/dev/sda

  

  21. 被root擁有的程式的位。

  移走那些被root擁有程式的s位標誌,當然有些程式需要這個,用命令‘chmod a-s’完成這個。

  注:前面帶(*)號的那些程式一般不需要擁有s位標誌。

  [root@deep]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls –lg {} ;

  

  你可以用下面的命令查詢所有帶s位標誌的程式:

  [root@deep]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {} ; 

  > suid-sgid-results

  把結果輸出到檔案suid-sgid-results中。

  為了查詢所有可寫的檔案和目錄,用下面的命令:

  [root@deep]# find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg {} ; > ww-files-results

  [root@deep]# find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {} ; > ww-directories-results

  用下面的命令查詢沒有擁有者的檔案:

  [root@deep]# find / -nouser -o -nogroup > unowed-results

  用下面的命令查詢所有的.rhosts檔案:

  [root@deep]# find /home -name .rhosts > rhost-results

  建議替換的常見網路服務應用程式

  WuFTPD

  WuFTD從1994年就開始就不斷地出現安全漏洞,駭客很容易就可以獲得遠端root訪問(Remote Root Access)的許可權,而且很多安全漏洞甚至不需要在FTP伺服器上有一個有效的帳號。最近,WuFTP也是頻頻出現安全漏洞。

  它的最好的替代程式是ProFTPD。ProFTPD很容易配置,在多數情況下速度也比較快,而且它的原始碼也比較乾淨(緩衝溢位的錯誤比較少)。有許多重要的站點使用ProFTPD。sourceforge.net就是一個很好的例子(這個站點共有3,000個開放原始碼的專案,其負荷並不小啊!)。一些Linux的發行商在它們的主FTP站點上使用的也是ProFTPD,只有兩個主要Linux的發行商(SuSE和Caldera)使用WuFTPD。

  ProFTPD的另一個優點就是既可以從inetd執行又可以作為單獨的daemon執行。這樣就可以很容易解決inetd帶來的一些問題,如:拒絕服務的攻擊(denial of service attack),等等。系統越簡單,就越容易保證系統的安全。WuFTPD要麼重新稽核一遍全部的原始碼(非常困難),要麼完全重寫一遍程式碼,否則WuFTPD必然要被ProFTPD代替。

  Telnet

  Telnet是非常非常不安全的,它用明文來傳送密碼。它的安全的替代程式是OpenSSH。

  OpenSSH在Linux上已經非常成熟和穩定了,而且在Windows平臺上也有很多免費的客戶端軟體。Linux的發行商應該採用OpenBSD的策略:安裝OpenSSH並把它設定為預設的,安裝Telnet但是不把它設定成預設的。對於不在美國的Linux發行商,很容易就可以在Linux的發行版中加上OpenSSH。美國的Linux發行商就要想一些別的辦法了(例如:Red Hat在德國的FTP伺服器上(ftp.redhat.de)就有最新的OpenSSH的rpm軟體包)。

  Telnet是無可救藥的程式。要保證系統的安全必須用OpenSSH這樣的軟體來替代它。

  Sendmail

  最近這些年,Sendmail的安全性已經提高很多了(以前它通常是駭客重點攻擊的程式)。然而,Sendmail還是有一個很嚴重的問題。一旦出現了安全漏洞(例如:最近出現的Linux核心錯誤),Sendmail就是被駭客重點攻擊的程式,因為Sendmail是以root許可權執行而且程式碼很龐大容易出問題。

  幾乎所有的Linux發行商都把Sendmail作為預設的配置,只有少數幾個把Postfix或Qmail作為可選的軟體包。但是,很少有Linux的發行商在自己的郵件伺服器上使用Sendmail。SuSE和Red Hat都使用基於Qmail的系統。

  Sendmail並不一定會被別的程式完全替代。但是它的兩個替代程式Qmail和Postfix都比它安全、速度快,而且特別是Postfix比它容易配置和維護。

  su

  su是用來改變當前使用者的ID,轉換成別的使用者。你可以以普通使用者登入,當需要以root身份做一些事的時候,只要執行“su”命令,然後輸入root的密碼。su本身是沒有問題的,但是它會讓人養成不好的習慣。如果一個系統有多個管理員,必須都給他們root的口令。

  su的一個替代程式是sudo。Red Hat 6.2中包含這個軟體。sudo允許你設定哪個使用者哪個組可以以root身份執行哪些程式。你還可以根據使用者登入的位置對他們加以限制(如果有人“破”了一個使用者的口令,並用這個帳號從遠端計算機登入,你可以限制他使用sudo)。Debian也有一個類似的程式叫super,與sudo比較各有優缺點。

  讓使用者養成良好的習慣。使用root帳號並讓多個人知道root的密碼並不是一個好的習慣。這就是被入侵的原因,因為它有多個系統管理員他們都有root的特權。一個亂成一團的系統是很容易被入侵的。

  named

  大部分Linux的發行商都解決了這個問題。named以前是以root執行的,因此當named出現新的漏洞的時候,很容易就可以入侵一些很重要的計算機並獲得root許可權。現在只要用命令列的一些引數就能讓named以非root的使用者執行。而且,現在絕大多數Linux的發行商都讓named以普通使用者的許可權執行。命令格式通常為:named -u -g

  INN

  在INN的文件中已經明確地指出:“禁止這項功能(verifycancels),這項功能是沒有用的而且將被除掉”。大約在一個月前,一個駭客釋出了當“verifycancels”生效的時候入侵INN的方法。Red Hat是把“verifycancels”設為有效的。任何setuid/setgid的程式或網路服務程式都要正確地安裝並且進行檢查以保證儘量沒有安全漏洞。

  安全守則

  1. 廢除系統所有預設的帳號和密碼。 

  2. 在使用者合法性得到驗證前不要顯示公司題頭、線上幫助以及其它資訊。 

  3. 廢除“駭客”可以攻擊系統的網路服務。 

  4. 使用6到8位的字母數字式密碼。 

  5. 限制使用者嘗試登入到系統的次數。 

  6. 記錄違反安全性的情況並對安全記錄進行復查。 

  7. 對於重要資訊,上網傳輸前要先進行加密。 

  8. 重視專家提出的建議,安裝他們推薦的系統“補丁”。 

  9. 限制不需密碼即可訪問的主機檔案。 

  10.修改網路配置檔案,以便將來自外部的TCP連線限制到最少數量的埠。不允許諸如tftp,sunrpc,printer,rlogin或rexec之類的協議。

  11.用upas代替sendmail。sendmail有太多已知漏洞,很難修補完全。 

  12.去掉對操作並非至關重要又極少使用的程式。 

  13.使用chmod將所有系統目錄變更為711模式。這樣,攻擊者們將無法看到它們當中有什麼東西,而使用者仍可執行。 

  14.只要可能,就將磁碟安裝為只讀模式。其實,僅有少數目錄需讀寫狀態。 

  15.將系統軟體升級為最新版本。老版本可能已被研究並被成功攻擊,最新版本一般包括了這些問題的補救。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-939842/,如需轉載,請註明出處,否則將追究法律責任。

相關文章