Solaris安全FAQ
2024-07-26 00:29:27
供稿:網(wǎng)友
參考資料:The Solaris Security FAQ by Peter Baer Galvin
1) (概述--略)
2) 怎樣將Solaris配置得更加強(qiáng)壯?
2.1) 哪些文件的許可權(quán)限需要改變?
有個(gè)叫fix-modes的軟件(ftp://ftp.fwi.uva.nl/pub/solaris/fix-modes.tar.gz)可以在
Solaris 2.4和2.5上運(yùn)行并改變系統(tǒng)文件及目錄的存取權(quán)限,這樣會(huì)使非ROOT的用戶更難
于更改系統(tǒng)文件或者取得ROOT權(quán)限。
2.2) 如何對(duì)ROOT的環(huán)境加以配置?
將umask設(shè)為077或者027.
查看你的環(huán)境中路徑設(shè)置情況,不要有./
2.3) 我該更改哪些啟動(dòng)文件?
通常情況下,你要檢查所有在/etc/rc2.d和/etc/rc3.d以S開(kāi)頭的文件,所有并非必要的設(shè)備
或者服務(wù)都可以重命名(不要再以S開(kāi)頭),然后你可以重新啟動(dòng),從/var/adm/messages中來(lái)
觀察自啟動(dòng)的情況,并且從ps -elf的輸出中加以檢查。
2.4) 如何將ROOT的遠(yuǎn)程登陸取消?
在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root。
2.5) 如何取消rlogin/rsh服務(wù)?
移去/etc/hosts.equiv和/.rhosts以及各home目錄下的.rhosts,并且在/etc/inetd.conf中
把r系列服務(wù)都?xì)⒌簦缓笳页鰅netd的進(jìn)程號(hào),重啟它。
2.6) 哪些帳號(hào)是不必須的?
移去或者鎖定那些不是必須的帳號(hào),比如sys/uucp/nuucp/listen等等,簡(jiǎn)單的辦法是在
/etc/shadow的passWord域中放上NP字符。
2.7) 怎樣保護(hù)我的設(shè)備?
在文件/etc/logindevperm中包含了對(duì)系統(tǒng)設(shè)備的許可權(quán)限配置信息,應(yīng)該檢視里面的各項(xiàng)
設(shè)定并且手動(dòng)賦予你所想要的許可權(quán)限。
對(duì)于抽取式的BSM設(shè)備需要設(shè)定只有single user允許進(jìn)入。
2.8) 我應(yīng)該將/etc的存取權(quán)限改為什么才安全?
用chmod -R g-w /etc命令來(lái)移去組用戶對(duì)/etc的寫(xiě)權(quán)限。
2.9) Solaris機(jī)器充當(dāng)路由器?
默認(rèn)情況下,如果Solaris機(jī)器有超過(guò)一塊的網(wǎng)卡的話,它將會(huì)在不同網(wǎng)卡間轉(zhuǎn)發(fā)數(shù)據(jù)包,這一行為可
以在/etc/init.d/inetinit中得到控制。要在Solaris 2.4或者更低版本機(jī)器下關(guān)閉它,可以將
ndd -set /dev/ip ip_forwarding 0添加于/etc/init.d/inetinit的未尾。在Solaris 2.5
中,只要touch /etc/notrouter.
2.10) 如何取消automounter?
Automounter是由/etc/auto_*這些配置文件控制的,要取消它,只要簡(jiǎn)單地移去這些文件,
并且/或者將/etc/rc2.d/S74autofs改名。
2.11) 如何取消NFS服務(wù)?
NFS的共享輸出是由/etc/dfs/dfstab文件管理的.可以刪除它。要將NFS服務(wù)器的守護(hù)進(jìn)程關(guān)閉
則可以重命名/etc/rc3.d/S15nfs.server。要防止一臺(tái)機(jī)器成為NFS客戶機(jī),可以重命名文件
/etc/rc2.d/S73nfs.client——當(dāng)重命名這些自啟動(dòng)文件時(shí),要注意不要將文件的首字母設(shè)為
“S”。
2.12) 對(duì)cron任務(wù)我該注意些什么?
你得查看所有的cron任務(wù)——在/var/spool/cron/crontabs文件中你可以找到它們。還必須在
/etc/default/cron里設(shè)置了"CRONLOG=yes" 來(lái)記錄corn的動(dòng)作。
2.13) 使用動(dòng)態(tài)路由有什么風(fēng)險(xiǎn)嗎?
使用動(dòng)態(tài)路由守護(hù)進(jìn)程的機(jī)器用in.routed及in.rdisc來(lái)維護(hù)路由,這可能會(huì)大大增加路由協(xié)議的復(fù)雜程
度,而且路由更新會(huì)消耗相當(dāng)大比便的可用帶寬,因此在可能的情況下,還是建議你使用靜態(tài)路由。
2.14) 何時(shí)及如何運(yùn)用靜態(tài)ARP?
ARP是聯(lián)系IP地址和以太網(wǎng)的協(xié)議(地址轉(zhuǎn)換協(xié)議) 。默認(rèn)地,Solaris機(jī)器動(dòng)態(tài)地確定ARP地址,arp命令
可以用來(lái)靜態(tài)地設(shè)定ARP表并且刷新它,如果你的系統(tǒng)里僅有少量無(wú)需更改的機(jī)器,那么這是一個(gè)很好的工具。
為了防止ARP欺騙,最好將受托機(jī)器的硬件地址作為永久條目保存在ARP的高速緩存中。
2.15) 運(yùn)行rpcbind是不安全的嗎?
rpcbind是允許rpc請(qǐng)求和rpc服務(wù)之間相互連接的程序,但標(biāo)準(zhǔn)的rpc是不安全的:(,它使用的是"AUTH_UNIX"
驗(yàn)證, 也就是說(shuō)它依靠的是遠(yuǎn)程系統(tǒng)的IP地址和遠(yuǎn)程用戶的UID來(lái)驗(yàn)證。一般的系統(tǒng)可能需要某些rpc存在,但
對(duì)各種服務(wù)器如Web servers, ftp servers, mail servers, etc)最好將rpc服務(wù)關(guān)閉,你也可以通過(guò)
一些安全工具來(lái)確定rpc服務(wù)是否會(huì)影響到你系統(tǒng)的安全性。可以通過(guò)將/etc/rc2.d/S71RPC改名來(lái)禁止rpc。
2.16) /etc/utmp的權(quán)限應(yīng)該如何設(shè)定?
# chmod 644 /etc/utmp
2.17) 哪些程序可以去掉SUID位?
許多setgid和setuid程序都只是由root運(yùn)行的,或者是由某些特定用戶或組運(yùn)行,那就可以將其setuid位
移去,下面是一個(gè)Solaris 2.6上setuid程序的列表,你應(yīng)該根據(jù)自己的情況進(jìn)行增減。
# find / -perm -4000 -PRint
/usr/lib/lp/bin/netpr
/usr/lib/fs/ufs/quota
/usr/lib/fs/ufs/ufsdump
/usr/lib/fs/ufs/ufsrestore
/usr/lib/fs/vxfs/vxdump
/usr/lib/fs/vxfs/vxquota
/usr/lib/fs/vxfs/vxrestore
/usr/lib/exrecover
/usr/lib/pt_chmod
/usr/lib/sendmail
/usr/lib/utmp_update
/usr/lib/acct/accton
/usr/lib/uucp/remote.unknown
/usr/lib/uucp/uucico
/usr/lib/uucp/uusched
/usr/lib/uucp/uuxqt
/usr/lib/sendmail.orig
/usr/openwin/lib/mkcookie
/usr/openwin/bin/xlock
/usr/openwin/bin/ff.core
/usr/openwin/bin/kcms_configure
/usr/openwin/bin/kcms_calibrate
/usr/openwin/bin/sys-suspend
/usr/dt/bin/dtaction
/usr/dt/bin/dtappgather
/usr/dt/bin/sdtcm_convert
/usr/dt/bin/dtprintinfo
/usr/dt/bin/dtsession
/usr/bin/at
/usr/bin/atq
/usr/bin/atrm
/usr/bin/crontab
/usr/bin/eject
/usr/bin/fdformat
/usr/bin/login
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/ps
/usr/bin/rcp
/usr/bin/rdist
/usr/bin/rlogin
/usr/bin/rsh
/usr/bin/su
/usr/bin/tip
/usr/bin/uptime
/usr/bin/w
/usr/bin/yppasswd
/usr/bin/admintool
/usr/bin/ct
/usr/bin/cu
/usr/bin/uucp
/usr/bin/uuglist
/usr/bin/uuname
/usr/bin/uustat
/usr/bin/uux
/usr/bin/chkey
/usr/bin/nispasswd
/usr/bin/cancel
/usr/bin/lp
/usr/bin/lpset
/usr/bin/lpstat
/usr/bin/volcheck
/usr/bin/volrmmount
/usr/bin/pppconn
/usr/bin/pppdisc
/usr/bin/pPPTool
/usr/sbin/allocate
/usr/sbin/mkdevalloc
/usr/sbin/mkdevmaps
/usr/sbin/ping
/usr/sbin/sacadm
/usr/sbin/whodo
/usr/sbin/deallocate
/usr/sbin/list_devices
/usr/sbin/m64config
/usr/sbin/lpmove
/usr/sbin/pmconfig
/usr/sbin/static/rcp
/usr/sbin/vxprint
/usr/sbin/vxmkcdev
/usr/ucb/ps
/usr/vmsys/bin/chkperm
/etc/lp/alerts/printer
而且還應(yīng)該建立一個(gè)setuid/setgid程序的列表,日后可以對(duì)比是否有新的setuid程序出現(xiàn)--這可能是
入侵者光臨過(guò)的征兆。
2.18) 哪些系統(tǒng)工具我可以去掉它?
所有的網(wǎng)絡(luò)工具你都應(yīng)該檢查并且確定它在你的系統(tǒng)環(huán)境里是否是必需的,如果答案為否的話,就
干掉它,下面這些工具有些可以在開(kāi)始文件中找到它,有些則上在/etc/inetd.conf中被啟動(dòng)的,注
釋掉那些不必要的服務(wù),并且kill -HUP inetd守護(hù)進(jìn)程——類(lèi)似的東西有:
tftp systat rexd ypupdated netstat
rstatd rusersd sprayd walld exec
comsat rquotad name uucp
最好把常規(guī)的inetd.conf替換掉——改成只開(kāi)telnet和ftp服務(wù)——如果你真的需要它們的話(建議再
用防火墻建立阻塞)。
2.19) 我應(yīng)該運(yùn)行in.fingerd嗎?
in.fingerd在過(guò)去有一些安全問(wèn)題,如果你想提供finger工具,用nobody來(lái)運(yùn)行它。
2.20) 如何讓syslog有更大作用?
默認(rèn)情況下,syslog僅提供最精簡(jiǎn)的記錄,你可以通過(guò)編輯/etc/syslog.conf文件來(lái)讓syslog記
錄更多的信息,然后你需要重啟syslog以使它讀取配置文件。
你還可以通過(guò)
touch /var/adm/loginlog
chmod 600 /var/adm/loginlog
chgrp sys /var/adm/loginlog
來(lái)建立login的記錄。
2.21) 對(duì)EEPROM如何做才能更安全?
將EEPROM設(shè)于安全的模式:通過(guò)設(shè)定對(duì)"ok setenv security-mode=command"的密碼保護(hù)來(lái)實(shí)現(xiàn)。
當(dāng)然這并不能真正地防止入侵,如果某人可以物理接觸某控制臺(tái)的話,它就能打開(kāi)機(jī)器并替換掉EEPROM,
更改hostid........
2.22) 我的機(jī)器是處于“混雜模式”下嗎?
在Solaris下,你只能通過(guò)安裝某些工具來(lái)判斷是否機(jī)器是處于混雜模式下,可以參見(jiàn)第三部分。只有當(dāng)你
運(yùn)行諸如snoop或者某些網(wǎng)絡(luò)監(jiān)聽(tīng)軟件時(shí)機(jī)器才會(huì)處在混雜模式下,如果你并沒(méi)有監(jiān)聽(tīng)整個(gè)網(wǎng)絡(luò),那極大的可
能性就是黑客已經(jīng)侵入到你的系統(tǒng)中并且開(kāi)始以監(jiān)聽(tīng)來(lái)接收數(shù)據(jù)了。
2.23) 如果我必須運(yùn)行NFS,如何使它更安全?
在/etc/dfs/dfstab中的所有文件將被所有人共享,默認(rèn)情況下,NFS客戶會(huì)以"-o rw"或者"-o ro"選項(xiàng)
共享。
必須使用"nosuid"參數(shù)來(lái)使setuid程序失效。
不要通過(guò)rpcbind來(lái)運(yùn)行nfs mount。而是用更安全的rpcbind替代程序或者安裝SUN最新的rpcbind補(bǔ)丁。
在可能的情況下,盡量使用secure-RPC。否則的話,你運(yùn)行的是"AUTH_UNIX"認(rèn)證,它僅僅依靠客戶的IP地
址來(lái)進(jìn)行驗(yàn)證,很容易有IP欺騙的情況發(fā)生。
在可能的情況下,不要使用NFS,因?yàn)樗男畔鬟f是通過(guò)明文的(甚至你用了"AUTH_DES"或者"AUTH_KERB"來(lái)
進(jìn)行認(rèn)證)所以傳輸?shù)娜魏挝募?duì)嗅探來(lái)說(shuō)是及危險(xiǎn)的。
有程序可以猜度ROOT所mountr的文件名柄,并且獲得NFS server上的文件。
2.24) 如何讓sendmail更安全?
sendmail總是不斷地有新漏洞被發(fā)現(xiàn),怎樣才能使它更安全呢?
使用最新版本的Berkeley sendmail (see section 3)
使用smrsh (section 3)
從/etc/aliases里刪除decode
將/etc/aliases的權(quán)限設(shè)為644
可以考慮使用代理防火墻來(lái)過(guò)濾SMTP中不必要的命令。
2.25) NIS是安全的嗎,如何使其更強(qiáng)壯?
NIS從來(lái)就不是一個(gè)安全的服務(wù),如果配置得當(dāng)?shù)脑扤IS+會(huì)更好些,就象暴力破解密碼一樣,NIS域名
如果被猜出來(lái),就會(huì)給入侵者提供相當(dāng)豐富的信息,要關(guān)閉這個(gè)漏洞,可以將信任主機(jī)的地址放在
/var/yp/securenets中。并且考慮使用NIS+或者secure RPC。
2.26) 匿名FTP要怎樣才會(huì)安全可靠?
Solaris 2.5 ftpd(1M)包含了一個(gè)很好的FTP配置說(shuō)明
cp /etc/nsswitch.conf ~ftp/etc
確保包含~ftp的文件系統(tǒng)在被安裝是沒(méi)有用nosuid選項(xiàng)
在~ftp下任何文件的屬主都不是"ftp"
更詳細(xì)的信息參見(jiàn)它的配置說(shuō)明及FAQ
2.27) 如何將X配置得更安全?
使用SUN-DES-1選項(xiàng)來(lái)調(diào)用Secure RPC來(lái)通過(guò)X鑒別,可以使用xhost +user@host來(lái)通過(guò)訪問(wèn)請(qǐng)求。
2.28) 如何打開(kāi)SUN-DES-1的鑒別機(jī)制?
set DisplayManager*authorize: true
set DisplayManager._0.authName: SUN-DES-1
rm ~/.Xauthority
增加對(duì)localhost的許可權(quán)限:通過(guò)xauth local/unix:0 SUN-DES-1 unix.local@nisdomain
xauth local:0 SUN-DES-1 unix.local@nisdomain
Start X via xinit -- -auth ~/.Xauthority
把你自己加入,并移去其他所有人:xhost +user@ +unix.local@nisdomain -local -localhost
賦予用戶foo進(jìn)入主機(jī)"node"的權(quán)限:
允許foo進(jìn)入node: xhost +foo@
建立適當(dāng)?shù)膄oo的xauthority: xauth add node:0 SUN-DES-1 unix.node@nisdomain
foo現(xiàn)在就能連上"node"了: xload -display node:0
2.29) 我需要安裝哪些補(bǔ)丁?
用showrev -p命令來(lái)察看補(bǔ)丁在系統(tǒng)里的安裝情況,在你想保護(hù)的主機(jī)以及大眾都可以訪問(wèn)的主機(jī)
上,你應(yīng)該到SUN公司的主頁(yè)上去查找相關(guān)的補(bǔ)丁包來(lái)安裝,并且應(yīng)該常常查看最新的補(bǔ)丁發(fā)布情況。
2.30) 如何防止在堆棧中執(zhí)行代碼?
入侵者常常使用的一種利用系統(tǒng)漏洞的方式是堆棧溢出,他們?cè)诙褩@锴擅畹夭迦胍欢未a,利用
它們的溢出來(lái)執(zhí)行,以獲得對(duì)系統(tǒng)的某種權(quán)限。
要讓你的系統(tǒng)在堆棧緩沖溢出攻擊中更不易受侵害,你可以在/etc/system里加上如下語(yǔ)句:
set noexec_user_stack=1
set noexec_user_stack_log =1
第一句可以防止在堆棧中執(zhí)行插入的代碼,第二句則是在入侵者想運(yùn)行exploit的時(shí)候會(huì)做記錄:)
3) 應(yīng)該增加或者替代哪些程序?
3.1) inetd
inetd可以用xinetd代替,以增加日志功能。
xinetd:
ftp://qiclab.scn.rain.com/pub/security/xinetd*
或 ftp://ftp.dlut.edu.cn/pub/unix/sun-source/xinetd-2.1.tar.Z(不知是否為最新版本).
3.2) ifstatus
ifstatus可以確定你的網(wǎng)卡是否工作于混雜模式(有人進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)?)
url:
ftp://coast.cs.purdue.edu/pub/tools/unix/ifstatus/
3.3) xntp
xntp是有個(gè)更安全的網(wǎng)絡(luò)時(shí)間協(xié)議(Network Time Protocol).
URL:
ftp://ftp.udel.edu/pub/ntp/xntp3-5.93.tar.gz (1907KB)
3.4) sendmail
用Berkeley Sendmail(http://www.sendmail.org/)替代Solaris自帶的sendmail.
3.5) rpcbind
可以用如下URL中的rpcbind替換Solaris自帶的rpcbind, 這個(gè)rpcbind包含了類(lèi)似
于tcpwrapper的功能并關(guān)閉了通過(guò)rpcbind訪問(wèn)NFS.
ftp://ftp.win.tue.nl/pub/security/rcpbind_1.1.tar.Z
3.6) 口令檢查程序
很不幸,Solaris 上還未發(fā)布passwd+及npasswd, 這兩個(gè)程序可以用于檢查在UNIX
上那些愚蠢的口令。
3.7) crack
crack可以找出/etc/shadow中那些容易猜測(cè)的口令,雖然運(yùn)行crack將會(huì)使CPU的
負(fù)載加重,但它在第一次運(yùn)行時(shí)就可以給出10%系統(tǒng)帳號(hào)的口令。
URL: (我想國(guó)內(nèi)很多站點(diǎn)已有此程序了。)
ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/
3.8) ftp
不用多說(shuō),使用wu-ftpd, 國(guó)內(nèi)站點(diǎn)上有的是,如果找不到,試試:
URL:
ftp://ftp.dlut.edu.cn/pub/unix/ftp/wu-ftpd/
OR:
ftp://wuarchive.wustl.edu/packages/wuarchive-ftpd
3.9) fix-modes
用于糾正Solaris 2.2 ~ 2.6系統(tǒng)中敏感文件及目錄的屬性,以適應(yīng)安全性需要。
URL:
ftp://ftp.dlut.edu.cn/pub/unix/security/fix-modes.tar.gz
OR:
http://www.fwi.uva.nl./pub/comp/solaris/fix-modes.tar.gz
3.10) noshell
可用于不希望登陸系統(tǒng)的用戶的shell, 能夠記錄發(fā)生的事件并防止用戶login.
3.11) bind
標(biāo)準(zhǔn)的Solaris里帶的bind有著眾所周知的安全問(wèn)題(參見(jiàn)CERT第4部份),現(xiàn)在的發(fā)行版已經(jīng)做
了修補(bǔ)。
3.12) netcat
NetCat對(duì)系統(tǒng)管理員和入侵者來(lái)說(shuō)都是很實(shí)用的工具,它可以在兩個(gè)系統(tǒng)間建立靈活我TCP連接。
5) 如何使我的Solaris Web server更安全?
下面的方法可以令你的以Solaris為基礎(chǔ)的系統(tǒng)十分安全,你同時(shí)還可以配以利用防火墻及過(guò)濾路由
器來(lái)組成一個(gè)完整而強(qiáng)大的網(wǎng)絡(luò)拓?fù)洌牵瑳](méi)有任何系統(tǒng)是完美的,所以你除了關(guān)注安全動(dòng)態(tài),給機(jī)
器作好防范之外,也不應(yīng)該在機(jī)器上裝載其他無(wú)關(guān)的第三方的軟件--webserver需要的是安全,而不是
對(duì)管理員的方便。
5.0) Web server安全檢查
用下面的安全檢查列表來(lái)察看你的系統(tǒng)是否是安全地安裝的,當(dāng)然如果你有特殊的安全需求則不一定以此為準(zhǔn):
在完成一切安全設(shè)置前將系統(tǒng)與互聯(lián)網(wǎng)斷開(kāi)
僅僅安裝系統(tǒng)的核心部分以及需要的軟件包
安裝推薦的安全補(bǔ)丁
修改系統(tǒng)的開(kāi)始文件來(lái)進(jìn)行
在/etc/init.d/inetinit中關(guān)閉IP轉(zhuǎn)發(fā)
改變/tmp的存取權(quán)限(可以在系統(tǒng)的開(kāi)始文件中加入腳本
用ps檢查進(jìn)程情況
Invoke sendmail from cron to process queued mail occasionally.
安裝配置tcp_wrappers, S/Key, wu-ftp及tripwire于你的系統(tǒng)環(huán)境。
編輯/etc/hosts.allow來(lái)確定可進(jìn)入的機(jī)器,并且編輯/etc/inetd.conf注釋掉所有不需要的服務(wù)
用syslog記錄下所有的telnet連接通信
Mount上的文件系統(tǒng)要是只讀而且是no-suid的
確定/noshell是除了root之外所有不希望進(jìn)入的帳號(hào)的默認(rèn)shell
刪除/etc/auto_*, /etc/dfs/dfstab, p/var/spool/cron/crontabs/* (except root).
使用靜態(tài)路由
測(cè)試你的系統(tǒng),包括允許及拒絕訪問(wèn)的配置及記帳系統(tǒng)
考慮使用更安全版本的sendmail, syslog, bind以及crontab來(lái)替代現(xiàn)有的
安裝xntp來(lái)有更精確的時(shí)間戳
考慮更詳細(xì)地系統(tǒng)記帳
保持監(jiān)聽(tīng)和測(cè)試Web server的習(xí)慣
在你完成上面的配置之后,你的系統(tǒng)已經(jīng)會(huì)比安裝一個(gè)標(biāo)準(zhǔn)的UNIX系統(tǒng),并配以標(biāo)準(zhǔn)配置更安全了。
5.1) 硬件上......
在系統(tǒng)完全安裝好并且配置得更安全之前,不要將它放到互聯(lián)網(wǎng)上——從理論上說(shuō),一些入侵者喜歡
在你把系統(tǒng)弄得完美之前溜進(jìn)去放幾個(gè)后門(mén)——而且最好從CD-ROM安裝你的系統(tǒng)并且將二進(jìn)制文件
加載在磁帶機(jī)或者軟盤(pán)上物理寫(xiě)保護(hù).......
5.2) 安裝系統(tǒng)
從最新的,可靠的Solaris2.x版本安裝,每一版本的Solaris都會(huì)比前一版更安全一些的。
Solaris是非常靈活并且包含了大量工具可供使用的。但不幸的是,這些外帶的功能軟件包可能也會(huì)
導(dǎo)致一些潛在的危險(xiǎn),所以要建立一個(gè)安全的系統(tǒng),最好的辦法是,只安裝基本的OS部份,其余的軟件
包則以必要為原則,非必需的包就可以不裝——這樣還可以使機(jī)器更快和更穩(wěn)定:)
在Solaris的安裝程序里,你可以選擇Core SPARC installation cluster來(lái)安裝,事實(shí)上,就連
這個(gè)選項(xiàng)都還有些東西是不必要的確良:(,但它的確是一個(gè)安全的系統(tǒng)基礎(chǔ),另一個(gè)好處是,它需要的空
間很少,看看下面你就知道了:
s0: / 256 megabytes
s1: swap 256 megabytes
s2: overlap
s3:
s4:
s5:
s6: /local ??? megabytes (rest of the drive)
s7:
/var要足夠大以放置審核記錄文件,而swap分區(qū)則與你的硬件(內(nèi)存)相適應(yīng)就行了,當(dāng)然大的swap
分區(qū)可以在應(yīng)付DoS攻擊時(shí)更強(qiáng)有力。
現(xiàn)在可以用另外的機(jī)器,ftp到sunsolve.sun.com:/pub/patches并且下載最新的推薦補(bǔ)丁,將它放
在磁帶機(jī)中轉(zhuǎn)到你的“安全主機(jī)”上,然后安裝這些補(bǔ)丁,當(dāng)然有些補(bǔ)丁可能安裝不上,因?yàn)樗?
要補(bǔ)的那個(gè)軟件你沒(méi)有安裝:)
5.3) 系統(tǒng)里的Strip
在Solaris下,你可以通過(guò)對(duì)/etc/rc[S0-3].d文件來(lái)修改啟動(dòng)時(shí)自引導(dǎo)的動(dòng)作:
考慮移去/etc/rc2.d中在你系統(tǒng)中用不到的服務(wù),我還建議你移除/etc/init.d里除下以下列表中
文件外的所有東西:
K15rrcd S05RMTMPFILES K15solved S20sysetup
S72inetsvc S99audit S21perf
S99dtlogin K25snmpd S30sysid.net S99netconfig
K50pop3 S74syslog S75cron S92rtvc-config
K60nfs.server K65nfs.client S69inet
K92volmgt README S95SUNWmd.sync
S01MOUNTFSYS S71sysid.sys S88utmpd S95rrcd
這些文件可能會(huì)與你的不同--這取決于你機(jī)器里的圖形卡/是否使用Solaris DiskSuits等等。
移除/etc/rc3.d里的文件........
舉例來(lái)說(shuō),在Solaris 2.4中,你應(yīng)該編輯/etc/init.d/inetinit在文件的尾部增加以下行:
ndd -set /dev/ip ip_forward_directed_broadcasts 0
ndd -set /dev/ip ip_forward_src_routed 0
ndd -set /dev/ip ip_forwarding 0
并且通過(guò)設(shè)定ndd -set /dev/ip ip_strict_dst_multihoming 1來(lái)關(guān)閉"ip_strict_dst_multihoming"
核心變量。solaris機(jī)器就不會(huì)在兩塊網(wǎng)卡間轉(zhuǎn)發(fā)IP包,這可以防止host spoof。
* 在Solaris 2.5下,只要建立一個(gè)叫/etc/notrouter的文件就能阻止IP轉(zhuǎn)發(fā),要重新打開(kāi)它,只要移除
/etc/notrouter并重啟動(dòng)系統(tǒng)就行了。It's important to note that there is a small time
window between when this file is created and when routing is disabled,
theoretically allowing some routing to take place.
在Solaris 2.4下,添加一個(gè)新的腳本名為/etc/init.d/tmpfix:
#!/bin/sh
#ident "@(#)tmpfix 1.0 95/08/14"
if [ -d /tmp ]
then
/usr/bin/chmod 1777 /tmp
/usr/bin/chgrp sys /tmp
/usr/bin/chown root /tmp
并且連接/etc/init.d/tmpfix到/etc/rc2.d/S79tmpfix,這樣這個(gè)腳本就會(huì)在系統(tǒng)啟動(dòng)時(shí)執(zhí)行了。
這可以使入侵者更難在系統(tǒng)里奪取root權(quán)限。在Solaris 2.5則不必如此。
另外還有一些好的建議,就是在啟動(dòng)時(shí)為用戶設(shè)定安全的umask,下面的script就是做這事兒的:
umask 022 # make sure umask.sh gets created with the proper mode
echo "umask 022" > /etc/init.d/umask.sh
for d in /etc/rc?.d
do
ln /etc/init.d/umask.sh $d/S00umask.sh
done
Note: 腳本名稱中的".sh"是必需的,這樣腳本才會(huì)在本shell而不是它的子shell中執(zhí)行。
刪除/etc/auto_*文件,刪除/etc/init.d/autofs可以防止automounter在啟動(dòng)時(shí)就運(yùn)行。
刪除/etc/dfs/dfstab,清除/etc/init.d以防止機(jī)器成為NFS服務(wù)器。
刪除crontab文件,你可以將/var/spool/cron/crontabs中屬主root以外的文件全部刪除。
使用靜態(tài)路由,建立/etc/defaultrouter來(lái)維護(hù)之,以避免spoof。如果你必須通過(guò)不同的網(wǎng)關(guān),考慮增
加/usr/bin/route命令于/etc/init.d/inetinit以取代運(yùn)行routed。
當(dāng)?shù)厍型瓿蓵r(shí),重啟機(jī)器,徹底地查看進(jìn)程,ps -ef的輸出應(yīng)該是這樣的:
UID PID PPID C STIME TTY TIME COMD
root 0 0 55 Mar 04 ? 0:01 sched
root 1 0 80 Mar 04 ? 22:44 /etc/init -
root 2 0 80 Mar 04 ? 0:01 pageout
root 3 0 80 Mar 04 ? 33:18 fsflush
root 9104 1 17 Mar 13 console 0:00 /usr/lib/saf/ttymon -g -h -p myhost console
login: -T sun -d /dev/console -l co
root 92 1 80 Mar 04 ? 5:15 /usr/sbin/inetd -s
root 104 1 80 Mar 04 ? 21:53 /usr/sbin/syslogd
root 114 1 80 Mar 04 ? 0:11 /usr/sbin/cron
root 134 1 80 Mar 04 ? 0:01 /usr/lib/utmpd
root 198 1 25 Mar 04 ? 0:00 /usr/lib/saf/sac -t 300
root 201 198 33 Mar 04 ? 0:00 /usr/lib/saf/ttymon
root 6915 6844 8 13:03:32 console 0:00 ps -ef
root 6844 6842 39 13:02:04 console 0:00 -sh
/usr/lib/sendmail守護(hù)程序并沒(méi)有打開(kāi),因?yàn)槟悴槐乜傇?5端口監(jiān)聽(tīng)mail的列表請(qǐng)求,你可以在root的
crontab文件中增加:
0 * * * * /usr/lib/sendmail -q > /var/adm/sendmail.log 2>&1
這條命令要以每小時(shí)調(diào)用sendmail進(jìn)程處理排隊(duì)中的郵件。
5.4) 安裝第三方軟件
你需要的第一個(gè)軟件是TCP Wrappers軟件包——由Wietse Venema寫(xiě)的,它提供了一個(gè)小的二
進(jìn)制文件叫tcpd,能夠用它來(lái)控制對(duì)系統(tǒng)服務(wù)的進(jìn)出——比如telnet及ftp,它在/etc/inetd.conf
中啟動(dòng),訪問(wèn)控制可以由IP地址、域名或者其它參數(shù)來(lái)限制,并且tcpd可以提升syslog的記錄
級(jí)別,在系統(tǒng)遇到未經(jīng)認(rèn)證的連接時(shí),發(fā)送email或者警告給管理員。
然后安裝S/Key來(lái)控制遠(yuǎn)程連接的安全性,可以在Q5.6中看到詳細(xì)的配置方法。
如果你打算打開(kāi)ftp服務(wù)(不管是匿名ftp或者是出了管理目的),你需要取得一份WU-Archive ftp,
最好要拿到它的最新版本,否則會(huì)有一些安全漏洞存在,如果你認(rèn)為需要管理員的遠(yuǎn)程登陸服務(wù)的
話,可能得修改S/Key來(lái)支持ftp daemon。在Crimelabs S/Key的發(fā)行版本中,你可以在找到
S/Key/misc/ftpd.c,這個(gè)C程序示范了如何讓S/Key支持WU-Archive ftp,你可以對(duì)新版的WU-FTP
做類(lèi)似的改動(dòng),當(dāng)然你可能要閱讀wu-ftp FAQ以增加了解。
編譯并且安裝了這些二進(jìn)制文件后(tcpd, wu-ftpd及keyinit, keysu,keysh),它們會(huì)被安裝在
/usr/local/bin中,當(dāng)編譯wu-ftpd時(shí)你需要指定一個(gè)配置文件及日志的存放目錄,我們推薦你將
配置文件放在/etc下,將日志文件放在/var下,Q5.7更詳細(xì)地說(shuō)明了wu-ftp的配置。
用/noshell來(lái)阻止那些不想讓他們進(jìn)入的帳號(hào),讓/noshell成為那些人的shell。這些帳號(hào)不允許登陸
并且會(huì)記錄下登陸的企圖,入侵者無(wú)法通過(guò)這種帳號(hào)入侵。
5.5) 限制通過(guò)網(wǎng)絡(luò)進(jìn)入系統(tǒng)
telnet和ftp守護(hù)進(jìn)程是從inetd進(jìn)程啟動(dòng)的,inetd的配置文件是/etc/inetd.conf,還包含了其它
的各種服務(wù),所以你可以干脆移去這個(gè)文件,新建一個(gè)只包括以下兩行的文件:
ftp stream tcp nowait root /usr/local/bin/tcpd /usr/local/bin/wu-ftpd
telnet stream tcp nowait root /usr/local/bin/tcpd /usr/sbin/in.telnetd
當(dāng)然這是基于你需要telnet及ftp的基礎(chǔ)上的,如果你連這兩個(gè)服務(wù)都不用的話,你就可以將它注釋
掉或者刪除,這樣在系統(tǒng)啟動(dòng)的時(shí)候inetd甚至就起不來(lái)了:)
tcpd的訪問(wèn)控制是由/etc/hosts.allow和/etc/hosts.deny文件控制的,tcpd先查找/etc/hosts.allow
,如果你在這里面允許了某幾臺(tái)主機(jī)的telnet或ftp訪問(wèn)的話,那么deny訪問(wèn)就是對(duì)其它所有機(jī)器的了。
這是“默認(rèn)拒絕”的訪問(wèn)控制策略,下面是一個(gè)hosts.allow文件的樣本:
ALL: 172.16.3.0/255.255.255.0
這將允許172.16.3.0網(wǎng)絡(luò)的主機(jī)上任何用戶訪問(wèn)你的telnet及ftp服務(wù),記住在這里要放置IP地址,因
為域名比較容易受到欺騙攻擊……
現(xiàn)在我們準(zhǔn)備拒絕其余所有人的連接了,將下面的語(yǔ)句放在/etc/hosts.deny中:
ALL: ALL: /usr/bin/mailx -s "%d: connection attempt from %c" root@mydomain.com
這條指令不僅拒絕了其它所有的連接,而且能夠讓tcpd發(fā)送email給root——一旦有不允許的連接嘗試
發(fā)生時(shí)。
現(xiàn)在你可能希望用syslog記錄下所有的訪問(wèn)記錄,那么在/etc/syslog.conf放進(jìn)如下語(yǔ)句:
auth.auth.notice;auth.info /var/log/authlog
注意兩段語(yǔ)句間的空白是tab鍵,否則syslog可能會(huì)不能正常工作。
Sendmail將用以cron來(lái)調(diào)用sendmail來(lái)替代。
5.6) 配置S/Key
S/Key是一個(gè)用于實(shí)現(xiàn)安全的一次性口令方案的軟件,它根據(jù)一系列信息(包括一個(gè)秘密口令)通過(guò)MD4
處理而形成的初始鑰匙,該初始鑰匙再交給MD4進(jìn)行處理,資助將128位的數(shù)字簽名縮成64位,該64位信息
再次傳給MD4函數(shù),這個(gè)過(guò)程一直持續(xù)直到達(dá)到期望值……
開(kāi)始使用S/Key時(shí),要建立一個(gè)以/usr/local/bin/keysh為shell的帳號(hào):
在/etc/passwd中加入
access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh
并且在/etc/shadow中加入
access:NP:6445::::::
然后使用passwd access命令來(lái)設(shè)定用戶的訪問(wèn)密碼。
由于/usr/local/bin/keysh不是一個(gè)標(biāo)準(zhǔn)的shell,所以你的/etc/shells文件中內(nèi)容如下:
/sbin/sh
/usr/local/bin/keysh
只有使用這兩種login shell的用戶才允許接入。
然后建立一個(gè)文件/etc/skeykeys并賦予一定的許可權(quán)限:
touch /etc/skeykeys
chmod 600 /etc/skeykeys
chown root /etc/skeykeys
chgrp root /etc/skeykeys
使用keyinit access命令來(lái)初始化S/Key秘密口令。
現(xiàn)在你可以配置允許用戶通過(guò)keysu命令來(lái)成為超級(jí)用戶,首先改變/etc/group:
root::0:root,access
只有在這里列出來(lái)的用戶才允許通過(guò)keysu成為超級(jí)用戶。現(xiàn)在你可以使用不著keyinit root命令來(lái)初
始化超級(jí)用戶的S/Key秘密口令,我建議該口令要與user的有所區(qū)別。
本來(lái)你可以將/bin/su刪掉以確定用戶只能使用keysu……,但不幸的是,許多腳本使用/bin/su來(lái)開(kāi)啟
進(jìn)程,所以你只需用chmod 500 /bin/su來(lái)改變它的權(quán)限就行了。
5.7) 配置wu-ftp
配置wu-ftp需要經(jīng)驗(yàn):),當(dāng)你編譯wu-ftpd時(shí),你需要指定一個(gè)存放配置文件的地方,這個(gè)文件夾里將
包含一個(gè)pid文件夾和三個(gè)文件,一個(gè)ftp conversions文件可以是空的,但不能沒(méi)有,還有ftpusers文
件包含了所有在password文件中存在但不允許登陸系統(tǒng)ftp的用戶名稱,也就是如uucp、bin之類(lèi)的系統(tǒng)
帳號(hào)都將應(yīng)該被限制。root最好是永遠(yuǎn)都被扔在這里面:)。
最后一個(gè)文件是ftpaccess:
class users real 172.16.3.*
log commands real
log transfers real inbound,outbound
這將允許從172.16.3.0的任何用戶ftp而拒絕所有其它的,所有的文件與命令將被記錄下來(lái),并且存放
在你指定的記錄文件目錄。
至于建立匿名FTP,你要小心,因?yàn)楹苋菀着渲缅e(cuò)誤。
建立一個(gè)特殊帳戶如:
ftp:*:400:400:Anonymous FTP:/var/spool/ftp:/bon/false
因?yàn)槭褂昧薱hroot()功能,必須建立一個(gè)小的文件系統(tǒng),包含了bin/etc/pub目錄:
這里面要注意的有:
確保bin及etc下的所有文件屬主都是root,且任何人不可寫(xiě),只有執(zhí)行權(quán)限,最好另外拷貝
一份passwd到ftp的etc中,即使被入侵者得到了,也不會(huì)泄露太多信息。
詳細(xì)配置情況還需要看關(guān)于wu-ftp的faq。
5.8) 限制對(duì)文件及文件系統(tǒng)的存取權(quán)限
下載并使用fix-modes,這個(gè)程序會(huì)將系統(tǒng)里不安全的文件存取權(quán)限(文件/目錄)找出來(lái)。
使用nosuid參數(shù)來(lái)配置/etc/vfstab,以防止setuid程序從UFS文件系統(tǒng)執(zhí)行
/proc - /proc proc - no -
fd - /dev/fd fd - no -
swap - /tmp tmpfs - yes -
/dev/dsk/c0t3d0s1 - - swap - no -
/dev/dsk/c0t3d0s0 /dev/rdsk/c0t3d0s0 / ufs 1 no remount,nosuid
/dev/dsk/c0t3d0s4 /dev/rdsk/c0t3d0s4 /usr ufs 1 no ro
/dev/dsk/c0t3d0s5 /dev/rdsk/c0t3d0s5 /var ufs 1 no nosuid
/dev/dsk/c0t3d0s6 /dev/rdsk/c0t3d0s6 /local ufs 2 yes nosuid
5.9) 測(cè)試配置
重啟你的機(jī)器,確定下面這些東西:
你可以從你配置為允許tcpd連接的機(jī)器telnet及ftp到你的server。
嘗試從其它未被允許的機(jī)器進(jìn)入,應(yīng)該會(huì)拒絕并email告知當(dāng)事人。
你只能以u(píng)ser的身份遠(yuǎn)程telnet或者ftp上站,不能以root登陸。
用戶可以通過(guò)/usr/local/bin/keysu成為超級(jí)用戶。
ps -ef只有少量的進(jìn)程顯示,最好不要有sendmail和各種NFS進(jìn)程。
touch /usr/FOO會(huì)得到錯(cuò)誤提示,因?yàn)槲募到y(tǒng)是ro的。
成為超級(jí)用戶,將ps命令復(fù)制到/,要保持它的setuid位,然后刪除它的二進(jìn)制文件。
好了,祝賀你,你已經(jīng)建立了一個(gè)比較安全的系統(tǒng)了:)
5.10) 最后:一些建議
使用XNTP來(lái)確定精確的時(shí)間。
在你把機(jī)器放到網(wǎng)上前,用tripwire和md5做一個(gè)校驗(yàn),如果系統(tǒng)被入侵,你可以通過(guò)保存的校驗(yàn)和
來(lái)判斷哪些程序被替換掉了。
考慮使用進(jìn)程記錄來(lái)記來(lái)系統(tǒng)里占用資源的情況。
定期改變你的S/Key secrets并且選擇一個(gè)好的密碼,在各地方的密碼最好不要一樣……
-------------------------------------------------
對(duì)Solaris及網(wǎng)絡(luò)安全我都沒(méi)多少經(jīng)驗(yàn),不懂
的地方都是妄自猜度,錯(cuò)誤想必不少,請(qǐng)指點(diǎn)!
mailto:quack@antionline.org