內容摘要:
本文介紹系統安全防護策略,讓系統管理員借以阻絕入侵者。針對不同的Linux系統,討論一些改善方式。
導讀
不少人開始廣泛談論入侵網路主機的話題,而Linux與FreeBSD 則成為近日主要的攻擊對象,包括像 imapd與BIND 程式裡的buffer overflow 問題。每天,各式各樣的「系統漏洞」,都會在 BUGTRAQ 郵遞論壇中宣布,此一郵遞論壇已有將近 20,000 位訂閱者。( 若是您只想訂閱一份系統安全相關的郵遞論壇,那麽這個不容錯過 )。
假設上述的19,305 位訂閱者當中,有至少一位打算寫個 for() 回圈,配合公開的系統漏洞攻擊程式,藉以快速取得網路上主機的控制權... 事實上這樣的假設並不為過。
如此一來,您的電腦早晚會成為下一個遭受攻擊的目標,到時候,您可能就措手不及了。
或許有些「專家」已經讓您以為,安裝及維護一部安全的電腦,有如「太空科學」般地復雜,事實上沒那麽難啦。擁有一套完善而健全的系統管理措施,才能保障您免於來自全球網路的威脅,而本文討論的便是,我在規畫 Red Hat Linux 網路系統時,一般會采取的預防措施。雖然文中提供了保障系統安全的指引,但它絕不是一份完整的參考說明。
下列的步驟,用意在使您的系統,不要成為網路程式安全漏洞公開後的受害者。請特別注意: 如果您不確定清楚自己在做什麽,那麽就別動手。有些步驟是假設,您已經具備程度之上的相關知識。文末另外還附上一些建議的參考讀物。
系統安全之實作步驟
1. 將系統中所有沒必要的網路服務全部移除。可以連到您電腦的方式越少,表示入侵者惡闖的途徑越少。把 /etc/inetd.conf 檔案中,所有不需要的項目都加注取消,如果系統並不需要 telnet,那就將它取消,諸如 ftpd、rshd、rexecd、gopher、chargen、echo、pop3d 等,也是同樣的處理原則。改完 inetd.conf 檔案後,別忘了要做個 'killall -HUP inetd' 動作。另外,也別忽略 /etc/rc.d/init.d 目錄裡的東西,有些網路服務 ( 像 BIND、印表機伺服程式 )是獨自執行的程式,透過目錄裡的命令稿來啟動。
2. 安裝 SSH。SSH是一個用來取代 'r'系列指令的程式,原本那些 Berkeley 版本的程式已經老舊了。Ssh (Secure Shell)是一個用來登入網路主機、在遠端主機上執行指令、或是在兩台主機間搬移檔案的程式。它提供了強大的認證功能,並確保能夠在網路上進行安全的資料通訊。它額外還能夠處理一些事情,可能會是有心鑽研之高手所感興趣的。請由 http://ftp.rge.com/pub/ssh 下載 SSH 程式。
3. 使用 vipw(1) 把所有不淮登入的帳號全都鎖起來。值得注意的是,那些沒有指定 login shell 的帳號,Red Hat Linux 會預設將它們指定為 /bin/sh,這種情況可能不是你所期望的。同時要確定,您的使用者帳號中沒有把密碼欄給空下來,下列是一個正常之密碼檔案的部份內容:daemon:*:2:2:daemon:/sbin:/bin/sync
adm:*:3:4:adm:/var/adm:/bin/sync
lp:*:4:7:lp:/var/spool/lpd:/bin/sync
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/bin:/sync
halt:*:7:0:halt:/sbin:/bin:/sync
mail:*:8:12:mail:/var/spool/mail:/bin/sync
news:*:9:13:news:/var/spool/news:/bin/sync
uucp:*:10:14:uucp:/var/spool/uucp:/bin/sync
operator:*:11:0:operator:/root:/bin/sync
games:*:12:100:games:/usr/games:/bin/sync
gopher:*:13:30:gopher:/usr/lib/gopher-data:/bin/sync
ftp:*:14:50:FTP User:/home/ftp:/bin/sync
nobody:*:99:99:Nobody:/:/bin/sync
4. 移除所有 root 所擁有之程式的's' 位元權限,如果它根本不需要這樣的權限。這個動作可以由 'chmod a-s' 指令完成,後面接的參數,便是您要改的檔名。
上述所提之程式包括以下各類,但不限於此,您從來不會去使用的程式; 您不希望 root 之外的使用者會去執行的程式 偶而會用,但以 su(1) 變成 root 再去執行,也無所謂的程式;我把自己會取消權限的程式列在下面,並在前面放了星號 (*)。記住,由於您的系統仍然需要一些 suid root 的程式,才能正常地執行,因此要特別地小心。
另一種方式,您可以建立一個叫做 'suidexec' 的特殊群組名稱,然後將可信賴的使用者帳號設在裡面,使用 chgrp(1) 指令將所有 suid 的程式改成屬於 suidexec 此一群組,並將其他使用者可以執行的權限除掉。# find / -user root -perm "-u+s"
*/bin/ping
*/bin/mount -- 應該只有 root 才可以掛上檔案系統
*/bin/umount -- 同上
/bin/su -- 別亂改它啊!
/bin/login
/sbin/pwdb_chkpwd
*/sbin/cardctl -- PCMCIA 卡的控制工具程式
*/usr/bin/rcp -- 改用 ssh
*/usr/bin/rlogin -- 同上
*/usr/bin/rsh -- "
*/usr/bin/at -- 改用 cron,或兩者都停用
*/usr/bin/lpq -- 改裝 LPRNG
*/usr/bin/lpr -- "
*/usr/bin/lprm -- "
*/usr/bin/mh/inc
*/usr/bin/mh/msgchk
/usr/bin/passwd -- 別亂改它啊!
*/usr/bin/suidperl -- 每個新版的suidperl 好像都有
buffer overflow 的問題
*/usr/bin/sperl5.003 -- 只有必要時才用它
/usr/bin/procmail --
*/usr/bin/chfn
*/usr/bin/chsh
*/usr/bin/newgrp
*/usr/bin/crontab
*/usr/X11R6/bin/dga -- X11 裡也有許多 buffer overflow 的問題
*/usr/X11R6/bin/xterm -- "
*/usr/X11R6/bin/XF86_SVGA -- "
*/usr/sbin/usernetctl
/usr/sbin/sendmail
*/usr/sbin/traceroute -- 您應該可以忍受偶而打一下 root 密碼吧
5.升級 sendmail。從 ftp://ftp.sendmail.org/pub/sendmail 下載最新的原始碼檔案,解開後閱讀其說明文件,如果您還有點多余的時間,可以安裝 smrsh ( 附隨在 sendmail 裡 ),許多人所關心的sendmail 安全問題,如寄信給某些危害安全的程式,這個程式大都考慮到了。最後編輯 sendmail.cf 檔案,把 'PrivacyOptions' 選項設定為 'goaway':O PrivacyOptions=goaway如果您不打算收取網際網路上的電子郵件,千萬不要將 sendmail 以收信狀態 (sendmail -bd) 來執行! 在上述的情況下,請將 /etc/rc.d/init.d/sendmail.init 取消,並執行 'killall -TERM sendmail' 命令。不過,您還是可以寄信到外面的。
6.如果您有使用 BIND,也要記得升級。最新版的BIND 可以在 http://www.isc.org 找到,不然,請將它們全部關閉掉。
7.重新編譯核心程式。如果預設的核心程式太大,我通常就會重新編譯它。提示: 請將有關防火牆的選項全部打開,即使您的電腦並不是防火牆。CONFIG_FIREWALL=y
CONFIG_NET_ALIAS=y
CONFIG_INET=y
# CONFIG_IP_FORWARD is not set
# CONFIG_IP_MULTICAST is not set
CONFIG_SYN_COOKIES=y
CONFIG_RST_COOKIES=y
CONFIG_IP_FIREWALL=y
CONFIG_IP_FIREWALL_VERBOSE=y
# CONFIG_IP_MASQUERADE is not set
# CONFIG_IP_TRANSPARENT_PROXY is not set
CONFIG_IP_ALWAYS_DEFRAG=y
CONFIG_IP_ACCT=y
# CONFIG_IP_ROUTER is not set
# CONFIG_NET_IPIP is not set
CONFIG_IP_ALIAS=m
8.進行程式修補 所有已知的軟體問題,都可以在 RedHat 的「修正網頁」上找到,( 請查閱 http://www.redhat.com/support/docs/errata.html,找出適合您版本的修補程式碼 ),RedHat 在維護更新這些網頁上,確實做得相當不錯。同時,這些網頁還包括一些 RPM 檔案的連結,您應該用得著,請依照說明指示進行安裝。
9.設定 tcp_wrappers: tcp_wrappers 可以用來管理網路上,哪些電腦可以與您的電腦進行「溝通」。這一套程式,是由一位系統安全高手 Wieste Venema 所寫成,它會管理那些經由 inetd ( 或與 inetd 程式庫相連結 ) 所啟動的程式,分析它們的設定檔案,以決定是否拒絕或同意某一個網路連線要求。舉例來說,為了允許您從家裡能夠透過 ISP 進行 telnet 及 ftp,同時間又要拒絕所有其他的連線,可以在 /etc/hosts.allow 檔案裡寫入:in.ftpd : .dialup.your-isp.com : allow
all : all : deny
像 SSH、sendmail 及其他程式,都可以做成與 tcp_wrappers 相互支援。