SCO UNIX系統網絡風險防范
SCO Unix操作系統因其運行穩定,對硬件配置的要求不高,目前正被廣泛應用于銀行、電信、保險、證券、鐵路等行業,但這些行業一般都不是單機應用,而是使用內部網絡進行數據處理,對系統安全性的要求又相當高。SCO Unix支持網絡功能,但網絡安全要靠系統管理員手工限定。 筆者單位用裝有SCO OpenServer5.0.5版本操作系統的IBM Netfinity系列服務器作為應用系統的前置機,后臺主機用RS/6000小型機,考慮到應用的實際情況,租用電信的DDN線路來連接各前置機和主機。整個網絡除本單位內部各主機可以互通外,還與人行和其他中間業務單位的主機互通。雖然在路由器上進行了一定的安全設置,但網絡上主機互通給系統帶來了極大的不安全因素。筆者根據多年的系統維護和開發經驗,對單位的所有前置機進行了一定的安全限制,最大限度地保障了應用需要和系統安全,以下步驟均在SCO OpenServer5.0.5操作系統上應用通過。 1.為所有前置機建立信任關系 中心機房備有一臺和前置機相同配置的服務器,專門用來管理前置機,也用此機對前臺進行應用程序的上傳更新。通過下面的方法建立信任關系,如管理機的主機名為sqls,地址為130.30.1.200,則在前置機的/etc/hosts文件中加入一行130.30.1.200 sqls,然后在前置機的超級用戶根目錄下創建文件.rhosts,文件寫入sqls后保存。SCO Unix操作系統安裝時并沒有.rhosts文件,需要建立信任關系時,必須手工建立此文件。建立好信任關系后,管理機就可以直接用rlogin、rcp等遠程命令來管理和控制前置機了,所有這些r 開頭的命令都不需要輸入密碼。而前置機則不允許直接rlogin 到管理機上,所以信任關系的建立是單向的。我們要求下級信用社的系統管理員自己掌握超級用戶和一般用戶的密碼,并定期更換。建立信任關系后,日常管理和維護就方便了。 2.修改Telnet、Ftp端口參數 我們知道,無論是Windows還是Unix操作系統,都有端口號這個概念,計算機之間的通訊,是通過對應的端口號實現的。一般系統都用缺省的端口號,比如Ftp的端口號為21,Telnet的端口號為23,Http的端口號為80 等,當我們使用Telnet登錄到其它計算機上時,系統就使用默認端口號23,這是很不安全的。筆者對轄內的前置機和管理機進行了Telnet和Ftp端口號的更改,具體為編輯/etc/services文件,找到想要修改的Telnet和Ftp行,修改端口號,比如把Telnet的23/tcp改成6364/tcp,但不要用/etc/services文件中已存在的端口號。這樣使用Telnet命令登錄到該主機時,必須給出端口號,即用Telnet xxx.xxx.xxx.xxx 6364 才能進行登錄,否則會被系統拒絕。通過修改端口號可以使不知道相應端口號的遠程用戶不能登錄,進一步提高了系統的安全性。 3.禁止對前置機使用Ftp傳輸文件 如果系統對用戶的Ftp權限不做限制,那么用戶不僅可以通過Ftp來獲得操作系統的重要文件(如/etc/passwd、/etc/hosts等),還可以進一步得到其他重要的數據文件,造成數據的泄露。筆者單位的前置機上因裝有多個應用系統,建立的用戶也比較多,所以應對大部分用戶的Ftp權限進行限制。具體做法是,創建編輯/etc/ftpusers文件,把不允許使用Ftp功能的用戶寫到該文件中,每個用戶占一行,保存后即時生效,這些用戶就不能使用Ftp命令進行連接了。 4.禁止外來主機遠程登錄到前置機 筆者單位以前曾經發生過這樣的事情,某個信用社的系統管理員利用其他途徑獲得了另外一個信用社前置機的用戶密碼,于是他就通過自己的主機遠程登錄到另外那個信用社的計算機上,進行一些非法操作。雖然沒造成嚴重的后果,但這件事給筆者敲響了警鐘,必須嚴格限制非法登錄。筆者首先在/etc/profile文件中case '$0' in -sh | -rsh | -ksh | -rksh)下添加限制非授權主機遠程登錄代碼: remote_ip=who -mx|awk ‘{print $6}' PTTY=who -mx|awk ‘{ printf“%.4sn”, $2; }' if [ “$PTTY” =“ttyp” ] then remote=who -mx if [ -n “remote_ip” -a “x$remote_ip” != “x” ] then case $remote_ip in 130.30.1.100) echo “成功 $remote $LOGNAME” >> /usr/adm/telnet.log130.30.1.201) echo “成功 $remote $LOGNAME” >> /usr/adm/telnet.logsqls) echo “成功 $remote $LOGNAME”>> /usr/adm/telnet.log*) echo “被殺 $remote” >> /usr/adm/telnet.log echo “ntt哈哈哈!你被我抓到了!你的地址($remote_ip)” echo “ ” exit esac fi fi 以上代碼用來記錄遠程登錄到本機的歷史,筆者創建的日志文件為/usr/adm/telnet.log,該文件會記錄遠程用戶登錄時的用戶名、時間、終端號以及IP地址,可以隨時查看此文件。然后在所有用戶的.profile文件里加入trap''0 1 2 3 14 15,屏蔽鍵盤中斷,防止允許遠程登錄的主機用鍵盤中斷進入操作系統的命令行提示符。 5.清除SCO Unix系統中的大漏洞 完成上面的幾步后,應該說已經比較安全了,但還是存在不安全因素,因為SCO Unix 有一個大BUG——任何普通用戶都可以成為超級用戶,筆者相信知道這個漏洞的人不會很多,但作為一個金融計算機工作者,有必要向國內所有同行提個醒,及早消除安全隱患。可進行如下操作: ①用普通用戶登錄到系統,然后進入一個可以寫的目錄; ②ln /etc/shadow debug.log; ③/etc/sysadm.d/bin/userOsa >>ttt。 則/etc/shadow文件被覆蓋,任何人可以用/etc/passwd中存在的任何用戶登錄而無需密碼。若第二步改為ln /etc/passwd debug.log 則/etc/passwd被覆蓋,誰也登錄不上來了!之所以會出現這樣的現象,主要是因為SCO Unix 中/etc/sysadm.d/bin/us- erOsa 程序在運行時會生成一個名叫debug.log的文件,這個文件用戶屬于root 組,而且此程序有BUG,不會檢查用戶權限,因此可以覆蓋任何文件,包括passwd和shadow。你在一個可寫目錄中建立連接將某個文件指向debug.log文件,運行userOsa將出錯信息寫入debug.log文件時,實際上就覆蓋了那個你想破壞的文件!奇怪的是,這個漏洞好像跟機器有關系,筆者單位有20%的計算機存在此漏洞,而其余的計算機做第二步連接時就報錯。要清除此漏洞,可用超級用戶登錄,進到/etc/sysadm.d/bin下,執行chmod o-x userOsa即可。