正如沒有牢不可破的盾一樣,沒有任何的系統是絕對安全的。同樣在安全領域中,也沒有誰可以說自己是高手。系統的安全是靠很多前輩的汗水和智慧來換取的。系統的安全涉及方方面面。無論是銀行還是電話系統,無論是MS Windows還是大眾認為保險的Unix系統,無一例外都有安全問題。安全唯一的重點是系統有多少人在使用。系統的使用者越多,安全問題就越關鍵,其安全漏洞發現的速度也就需要越快。另外,系統的可伸縮性越好,支持的應用服務越多,安全問題也就越多。在MS Windows系統下會用鼠標的人參考網上的資料就可以設置系統的安全或者破壞系統。安全設置是一把雙刃劍,一邊是可以撕破不設防的系統、毀掉數據,一邊是阻擋非法的入侵、保護數據。這個邊界就是Nuker和Hacker的區別。
Linux是開放源碼的系統,安全可以從代碼級加強,但是對於剛接觸Linux系統的人來講,這就太復雜了。企業要想把Linux作為桌面操作系統來使用,設置就一定和服務器不同。服務器可能是使用在Internet上,不論是其防火牆、代理服務器還是其他應用,安全設置著重在關鍵應用上,而桌面的應用重點就不一樣了。
針對市面上常見的Mandrake、Red Hat、SuSE、Debian,安全設置的方式不盡相同,但是方法是一致的。基於中國市場用戶很多的Red Hat為例,下面將以200~300人規模的公司使用Red Hat Linux為桌面操作系統為環境,一步步地設置系統安全,其中也會提及周邊資源的配置。
硬件的安全
機箱需要上鎖。任何系統一旦在物理上有所接觸,安全性至少降低一半。因為任何人都可以把硬盤卸下來,到其它的系統上讀取數據,破壞安全防護。因此桌面機和服務器一樣,要盡可能的避免物理接觸。
BIOS的安全
雖然有很多種工具可以讀取BIOS的密碼,並且也有很多的BIOS有通用密碼,但是設置BIOS的密碼保護是必要的步驟。使用的密碼盡量符合8位以上,數字、符號和字母的大小寫組合,並且不要和任何系統密碼相同。如果擔心被竊取後導致全部機器降低安全性,可以考慮加入個性化密碼位。比如:用該機器的人的姓名縮寫或機器的唯一編號組合前面的密碼,就可以成為較為好記憶,且滿足復雜性和唯一性要求的密碼。
啟動設置
一旦系統安裝完畢,除了硬盤啟動外,軟盤、光盤、甚至是USB閃存的啟動都可能帶來安全的問題。因此需要禁止BIOS中除硬盤以外的任何設備的啟動。
系統分區
目前的硬盤都可以滿足Linux對容量的要求。以20~40GB硬盤為例,不需要額外的分區方法,使用Red Hat的自動分區可以滿足要求。具體分區方法為40MB的啟動分區(/boot),2倍於內存的交換分區(swap),剩余為根分區(/)。不將/home目錄和/var目錄分出來的原因是:因為是單用戶使用,系統分區過多會增加管理復雜度,比如/var分區滿導致系統異常。簡單分區可以滿足用戶使用。
安裝
請避免完全安裝,即Everything選項。前面提到過系統提供的服務越多,漏洞越多,安全越差。安裝盡可能使用非交互式安裝,比如制作安裝軟盤、通過NFS或安裝腳本。用戶直接參與的越少,可管理性越強。主機命名使用統一規則,比如公司的E-mail地址和分機編號,這樣便於排錯和定位。IP地址也盡量使用靜態地址或使用MAC地址綁定的DHCP,這樣任何的異常都可以很快排除符合要求的機器。注意使用ext3文件系統,可以減少因為掉電導致的硬盤丟失數據而無法啟動。
賬號和中心控制
進行賬號和中心控制使用NIS也許是不錯,但也是增加管理復雜度的選擇。如果使用環境是單一用戶登錄,文件由服務器共享,那麼不使用NIS而使用單一用戶本機登錄也是一個好選擇。當然,現在不僅僅是NIS一種中心賬號管理方式可以選擇。本機的賬號需要使用用戶的公司E-mail地址為登錄名,當然還要有管理員的賬號,但是不要將本地賬號加入本地管理員組。有多個本機root權限賬號本身就是危險的行為。
啟動加載程序
啟動加載程序盡量使用GRUB而不使用LILO。原因是:雖然它們都可以加入啟動口令,但是LILO在配置文件中是使用明文口令,而GRUB是使用md5算法加密的。加密碼保護後可以防止使用被定制的內核來啟動系統,並且在沒有其他操作系統的情況下,將啟動等待時間設為0。LILO的配置在/etc/lilo.conf文件中,GRUB的配置文件在/boot/grub/grub.conf中:
/etc/lilo.conf
image=/boot/2.4.18-vmlinuz
label=Linux
read-only
# 口令為明文
password=Clear-TextPassword
# 加入保護
restricted
/boot/grub/grub.conf
# 修改啟動時間為0,即直接啟動
timeout 0
# 可以使用grub-md5-crypt來生--md5後的加密口令
password --md5 $1$LS8eV/$mdN1bcyLrIZGXfM7CkBvU1
使用sudo
用戶有時會使用一些需要root權限的命令,這時需要使用sudo。Sudo是一種以限制在配置文件中的命令為基礎,在有限時間內給用戶使用並且記錄到日志中的工具。其配置在/etc/sudoers文件中。當用戶使用sudo時,需要輸入自己的口令以驗證使用者身份,隨後的一段時間內可以使用定義好的命令,當使用配置文件中沒有的命令時,將會有報警的記錄。
/etc/sudoers
sudo [-bhHpV] [-s <shell>] [-u <用戶>] [指令] 或sudo [-klv]
-b 在後台執行命令
-h 顯示幫助
-H 將HOME環境變量設為新身份的HOME環境變量
-k 結束密碼的有效期,即下次將需要輸入密碼
-l 列出當前用戶可以使用的命令
-p 改變詢問密碼的提示符號
-s <shell> 執行指定的shell
-u <用戶> 以指定的用戶為新身份,不使用時默認為root
-v 延長密碼有效期5分鐘
-V 顯示版本信息
限制su用戶個數
前面提到本機的新建用戶沒有root權限,因此需要使用su切換用戶,Linux可以增加對切換到root用戶的限制。使用PAM (Pluggable Authentication Modules)可以禁止除在wheel組以外的任何人su成root,修改/etc/pam.d/su文件,除去屏蔽標識#。使用/usr/sbin/usermod G10 bjecadm將bjecadm這個賬號加入gid為10的組,就是wheel組。
/etc/pam.d/su
# 使用密碼驗證
auth sufficient /lib/security/pam_wheel.so debug
# 限制wheel組用戶才可以切換到root
auth required /lib/security/pam_wheel.so use_uid
加強登錄安全
通過修改/etc/login.defs文件可以增加對登錄錯誤延遲、記錄日志、登錄密碼長度限制、過期限制等設置。
/etc/login.defs
#登錄密碼有效期90天
PASS_MAX_DAYS 90
#登錄密碼最短修改時間,增加可以防止非法用戶短期更改多次
PASS_MIN_DAYS 0
#登錄密碼最小長度8位
PASS_MIN_LEN 8
#登錄密碼過期提前7天提示修改
PASS_WARN_AGE 7
#登錄錯誤時等待時間10秒
FAIL_DELAY 10
#登錄錯誤記錄到日志
FAILLOG_ENAB yes
#當限定超級用戶管理日志時使用
SYSLOG_SU_ENAB yes
#當限定超級用戶組管理日志時使用
SYSLOG_SG_ENAB yes
#當使用md5為密碼的加密方法時使用
MD5_CRYPT_ENAB yes
限制root登錄的終端窗口
修改/etc/securetty文件,用來防止通過登錄窮舉法突破安全防線。一旦root不能直接登錄,只能通過su來切換用戶,並且受到pam.d的限制,即將通過該方式的突破幾率降低。
/etc/securetty
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
#屏蔽終端窗口的root登錄,並可以限制同時打開終端的個數。
#tty1
#tty2
#tty7
#tty8
#tty9
另外,還應該限制終端窗口中的歷史記錄。修改/etc/profile文件,必要時需更改用戶目錄下的profile文件。
/etc/profile
#限制鍵入命令的歷史記錄在20條內,這是類似doskey的功能
HISTSIZE = 20
#限制記錄鍵入命令歷史的文件大小
HISTFILESIZE = 20
#設定終端窗口無任何操作時600秒後退出,該設置不適用於所有窗口
TMOUT =600
備份重要的文件
很多木馬、蠕蟲和後門都會用替換重要文件的辦法隱藏自己,將最重要和常用的命令備份是好習慣。准備一套只讀介質,光盤或者優盤,甚至放到網上下載都可以。總之是在必要時使用原始的命令而不是系統中可能被感染的命令。需要注意備份的如下:
/bin/su
/bin/ps
/bin/rpm
/usr/bin/top
/sbin/ifconfig
/bin/mount