歡迎您光臨本站 註冊首頁

The Solaris安全FAQ

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  參考資料:The Solaris Security FAQ by Peter Baer Galvin

1) (概述--略)

2) 怎樣將Solaris配置得更加強壯?

2.1) 哪些文件的許可許可權需要改變?

有個叫fix-modes的軟體(ftp://ftp.fwi.uva.nl/pub/solaris/fix-modes.tar.gz)可以在
Solaris 2.4和2.5上運行並改變系統文件及目錄的存取許可權,這樣會使非ROOT的用戶更難
於更改系統文件或者取得ROOT許可權。

2.2) 如何對ROOT的環境加以配置?

將umask設為077或者027.

查看你的環境中路徑設置情況,不要有./

2.3) 我該更改哪些啟動文件?

通常情況下,你要檢查所有在/etc/rc2.d和/etc/rc3.d以S開頭的文件,所有並非必要的設備
或者服務都可以重命名(不要再以S開頭),然後你可以重新啟動,從/var/adm/messages中來
觀察自啟動的情況,並且從ps -elf的輸出中加以檢查。

2.4) 如何將ROOT的遠程登陸取消?

在/etc/default/login里加上 "CONSOLE"行,在/etc/ftpusers里加上root。

2.5) 如何取消rlogin/rsh服務?

移去/etc/hosts.equiv和/.rhosts以及各home目錄下的.rhosts,並且在/etc/inetd.conf中
把r系列服務都殺掉,然後找出inetd的進程號,重啟它。

2.6) 哪些帳號是不必須的?

移去或者鎖定那些不是必須的帳號,比如sys\uucp\nuucp\listen等等,簡單的辦法是在
/etc/shadow的password域中放上NP字元。

2.7) 怎樣保護我的設備?

在文件/etc/logindevperm中包含了對系統設備的許可許可權配置信息,應該檢視裡面的各項
設定並且手動賦予你所想要的許可許可權。

對於抽取式的BSM設備需要設定只有single user允許進入。

2.8) 我應該將/etc的存取許可權改為什麼才安全?

用chmod -R g-w /etc命令來移去組用戶對/etc的寫許可權。

2.9) Solaris機器充當路由器?

默認情況下,如果Solaris機器有超過一塊的網卡的話,它將會在不同網卡間轉發數據包,這一行為可
以在/etc/init.d/inetinit中得到控制。要在Solaris 2.4或者更低版本機器下關閉它,可以將
ndd -set /dev/ip ip_forwarding 0添加於/etc/init.d/inetinit的未尾。在Solaris 2.5
中,只要touch /etc/notrouter.

2.10) 如何取消automounter?

Automounter是由/etc/auto_*這些配置文件控制的,要取消它,只要簡單地移去這些文件,
並且/或者將/etc/rc2.d/S74autofs改名。

2.11) 如何取消NFS服務?

NFS的共享輸出是由/etc/dfs/dfstab文件管理的.可以刪除它。要將NFS伺服器的守護進程關閉
則可以重命名/etc/rc3.d/S15nfs.server。要防止一台機器成為NFS客戶機,可以重命名文件
/etc/rc2.d/S73nfs.client——當重命名這些自啟動文件時,要注意不要將文件的首字母設為
「S」。

2.12) 對cron任務我該注意些什麼?

你得查看所有的cron任務——在/var/spool/cron/crontabs文件中你可以找到它們。還必須在
/etc/default/cron里設置了"CRONLOG=yes" 來記錄corn的動作。

2.13) 使用動態路由有什麼風險嗎?

使用動態路由守護進程的機器用in.routed及in.rdisc來維護路由,這可能會大大增加路由協議的複雜程
度,而且路由更新會消耗相當大比便的可用帶寬,因此在可能的情況下,還是建議你使用靜態路由。

2.14) 何時及如何運用靜態ARP?

ARP是聯繫IP地址和乙太網的協議(地址轉換協議) 。默認地,Solaris機器動態地確定ARP地址,arp命令
可以用來靜態地設定ARP表並且刷新它,如果你的系統里僅有少量無需更改的機器,那麼這是一個很好的工具。
為了防止ARP欺騙,最好將受託機器的硬體地址作為永久條目保存在ARP的高速緩存中。

2.15) 運行rpcbind是不安全的嗎?

rpcbind是允許rpc請求和rpc服務之間相互連接的程序,但標準的rpc是不安全的:(,它使用的是"AUTH_UNIX"
驗證, 也就是說它依靠的是遠程系統的IP地址和遠程用戶的UID來驗證。一般的系統可能需要某些rpc存在,但
對各種伺服器如Web servers, ftp servers, mail servers, etc)最好將rpc服務關閉,你也可以通過
一些安全工具來確定rpc服務是否會影響到你系統的安全性。可以通過將/etc/rc2.d/S71RPC改名來禁止rpc。

2.16) /etc/utmp的許可權應該如何設定?

# chmod 644 /etc/utmp

2.17) 哪些程序可以去掉SUID位?

許多setgid和setuid程序都只是由root運行的,或者是由某些特定用戶或組運行,那就可以將其setuid位
移去,下面是一個Solaris 2.6上setuid程序的列表,你應該根據自己的情況進行增減。

# 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

而且還應該建立一個setuid/setgid程序的列表,日後可以對比是否有新的setuid程序出現--這可能是
入侵者光臨過的徵兆。

2.18) 哪些系統工具我可以去掉它?

所有的網路工具你都應該檢查並且確定它在你的系統環境里是否是必需的,如果答案為否的話,就
幹掉它,下面這些工具有些可以在開始文件中找到它,有些則上在/etc/inetd.conf中被啟動的,注
釋掉那些不必要的服務,並且kill -HUP inetd守護進程——類似的東西有:

tftp systat rexd ypupdated netstat
rstatd rusersd sprayd walld exec
comsat rquotad name uucp

最好把常規的inetd.conf替換掉——改成只開telnet和ftp服務——如果你真的需要它們的話(建議再
用防火牆建立阻塞)。

2.19) 我應該運行in.fingerd嗎?

in.fingerd在過去有一些安全問題,如果你想提供finger工具,用nobody來運行它。

2.20) 如何讓syslog有更大作用?

默認情況下,syslog僅提供最精簡的記錄,你可以通過編輯/etc/syslog.conf文件來讓syslog記
錄更多的信息,然後你需要重啟syslog以使它讀取配置文件。

你還可以通過

touch /var/adm/loginlog
chmod 600 /var/adm/loginlog
chgrp sys /var/adm/loginlog

來建立login的記錄。

2.21) 對EEPROM如何做才能更安全?

將EEPROM設於安全的模式:通過設定對"ok setenv security-mode=command"的密碼保護來實現。
當然這並不能真正地防止入侵,如果某人可以物理接觸某控制台的話,它就能打開機器並替換掉EEPROM,
更改hostid........

2.22) 我的機器是處於「混雜模式」下嗎?

在Solaris下,你只能通過安裝某些工具來判斷是否機器是處於混雜模式下,可以參見第三部分。只有當你
運行諸如snoop或者某些網路監聽軟體時機器才會處在混雜模式下,如果你並沒有監聽整個網路,那極大的可
能性就是黑客已經侵入到你的系統中並且開始以監聽來接收數據了。

2.23) 如果我必須運行NFS,如何使它更安全?

在/etc/dfs/dfstab中的所有文件將被所有人共享,默認情況下,NFS客戶會以"-o rw"或者"-o ro"選項
共享。
必須使用"nosuid"參數來使setuid程序失效。
不要通過rpcbind來運行nfs mount。而是用更安全的rpcbind替代程序或者安裝SUN最新的rpcbind補丁。
在可能的情況下,盡量使用secure-RPC。否則的話,你運行的是"AUTH_UNIX"認證,它僅僅依靠客戶的IP地
址來進行驗證,很容易有IP欺騙的情況發生。
在可能的情況下,不要使用NFS,因為它的信息傳遞是通過明文的(甚至你用了"AUTH_DES"或者"AUTH_KERB"來
進行認證)所以傳輸的任何文件對嗅探來說是及危險的。
有程序可以猜度ROOT所mountr的文件名柄,並且獲得NFS server上的文件。

2.24) 如何讓sendmail更安全?

sendmail總是不斷地有新漏洞被發現,怎樣才能使它更安全呢?

使用最新版本的Berkeley sendmail (see section 3)
使用smrsh (section 3)
從/etc/aliases里刪除decode
將/etc/aliases的許可權設為644
可以考慮使用代理防火牆來過濾SMTP中不必要的命令。

2.25) NIS是安全的嗎,如何使其更強壯?

NIS從來就不是一個安全的服務,如果配置得當的話NIS+會更好些,就象暴力破解密碼一樣,NIS域名
如果被猜出來,就會給入侵者提供相當豐富的信息,要關閉這個漏洞,可以將信任主機的地址放在
/var/yp/securenets中。並且考慮使用NIS+或者secure RPC。

2.26) 匿名FTP要怎樣才會安全可靠?

Solaris 2.5 ftpd(1M)包含了一個很好的FTP配置說明

cp /etc/nsswitch.conf ~ftp/etc
確保包含~ftp的文件系統在被安裝是沒有用nosuid選項
在~ftp下任何文件的屬主都不是"ftp"
更詳細的信息參見它的配置說明及FAQ

2.27) 如何將X配置得更安全?

使用SUN-DES-1選項來調用Secure RPC來通過X鑒別,可以使用xhost +user@host來通過訪問請求。

2.28) 如何打開SUN-DES-1的鑒別機制?

set DisplayManager*authorize: true
set DisplayManager._0.authName: SUN-DES-1
rm ~/.Xauthority
增加對localhost的許可許可權:通過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進入主機"node"的許可權:

允許foo進入node: xhost +foo@
建立適當的foo的xauthority: xauth add node:0 SUN-DES-1 unix.node@nisdomain
foo現在就能連上"node"了: xload -display node:0

2.29) 我需要安裝哪些補丁?

用showrev -p命令來察看補丁在系統里的安裝情況,在你想保護的主機以及大眾都可以訪問的主機
上,你應該到SUN公司的主頁上去查找相關的補丁包來安裝,並且應該常常查看最新的補丁發布情況。

2.30) 如何防止在堆棧中執行代碼?

入侵者常常使用的一種利用系統漏洞的方式是堆棧溢出,他們在堆棧里巧妙地插入一段代碼,利用
它們的溢出來執行,以獲得對系統的某種許可權。

要讓你的系統在堆棧緩衝溢出攻擊中更不易受侵害,你可以在/etc/system里加上如下語句:

set noexec_user_stack=1
set noexec_user_stack_log =1

第一句可以防止在堆棧中執行插入的代碼,第二句則是在入侵者想運行exploit的時候會做記錄:)

3) 應該增加或者替代哪些程序?

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可以確定你的網卡是否工作於混雜模式(有人進行網路監聽?)
url:
ftp://coast.cs.purdue.edu/pub/tools/unix/ifstatus/

3.3) xntp

xntp是有個更安全的網路時間協議(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, 這個rpcbind包含了類似
於tcpwrapper的功能並關閉了通過rpcbind訪問NFS.

ftp://ftp.win.tue.nl/pub/security/rcpbind_1.1.tar.Z

3.6) 口令檢查程序

很不幸,Solaris 上還未發布passwd+及npasswd, 這兩個程序可以用於檢查在UNIX
上那些愚蠢的口令。

3.7) crack

crack可以找出/etc/shadow中那些容易猜測的口令,雖然運行crack將會使CPU的
負載加重,但它在第一次運行時就可以給出10%系統帳號的口令。

URL: (我想國內很多站點已有此程序了。)
ftp://sable.ox.ac.uk/pub/comp/security/software/crackers/

3.8) ftp

不用多說,使用wu-ftpd, 國內站點上有的是,如果找不到,試試:
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系統中敏感文件及目錄的屬性,以適應安全性需要。
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

可用於不希望登陸系統的用戶的shell, 能夠記錄發生的事件並防止用戶login.

3.11) bind

標準的Solaris裡帶的bind有著眾所周知的安全問題(參見CERT第4部份),現在的發行版已經做
了修補。

3.12) netcat

NetCat對系統管理員和入侵者來說都是很實用的工具,它可以在兩個系統間建立靈活我TCP連接。

4) (一些有用的資源--略)

5) 如何使我的Solaris Web server更安全?

下面的方法可以令你的以Solaris為基礎的系統十分安全,你同時還可以配以利用防火牆及過濾路由
器來組成一個完整而強大的網路拓撲,但是,沒有任何系統是完美的,所以你除了關注安全動態,給機
器作好防範之外,也不應該在機器上裝載其他無關的第三方的軟體--webserver需要的是安全,而不是
對管理員的方便。

5.0) Web server安全檢查

用下面的安全檢查列表來察看你的系統是否是安全地安裝的,當然如果你有特殊的安全需求則不一定以此為準:

在完成一切安全設置前將系統與互聯網斷開
僅僅安裝系統的核心部分以及需要的軟體包
安裝推薦的安全補丁
修改系統的開始文件來進行
在/etc/init.d/inetinit中關閉IP轉發
改變/tmp的存取許可權(可以在系統的開始文件中加入腳本
用ps檢查進程情況
Invoke sendmail from cron to process queued mail occasionally.
安裝配置tcp_wrappers, S/Key, wu-ftp及tripwire於你的系統環境。
編輯/etc/hosts.allow來確定可進入的機器,並且編輯/etc/inetd.conf註釋掉所有不需要的服務
用syslog記錄下所有的telnet連接通信
Mount上的文件系統要是只讀而且是no-suid的
確定/noshell是除了root之外所有不希望進入的帳號的默認shell
刪除/etc/auto_*, /etc/dfs/dfstab, p/var/spool/cron/crontabs/* (except root).
使用靜態路由
測試你的系統,包括允許及拒絕訪問的配置及記帳系統
考慮使用更安全版本的sendmail, syslog, bind以及crontab來替代現有的
安裝xntp來有更精確的時間戳
考慮更詳細地系統記帳
保持監聽和測試Web server的習慣

在你完成上面的配置之後,你的系統已經會比安裝一個標準的UNIX系統,並配以標準配置更安全了。

5.1) 硬體上......

在系統完全安裝好並且配置得更安全之前,不要將它放到互聯網上——從理論上說,一些入侵者喜歡
在你把系統弄得完美之前溜進去放幾個後門——而且最好從CD-ROM安裝你的系統並且將二進位文件
載入在磁帶機或者軟盤上物理防寫.......

5.2) 安裝系統

從最新的,可靠的Solaris2.x版本安裝,每一版本的Solaris都會比前一版更安全一些的。

Solaris是非常靈活並且包含了大量工具可供使用的。但不幸的是,這些外帶的功能軟體包可能也會
導致一些潛在的危險,所以要建立一個安全的系統,最好的辦法是,只安裝基本的OS部份,其餘的軟體
包則以必要為原則,非必需的包就可以不裝——這樣還可以使機器更快和更穩定:)

在Solaris的安裝程序里,你可以選擇Core SPARC installation cluster來安裝,事實上,就連
這個選項都還有些東西是不必要的確良:(,但它的確是一個安全的系統基礎,另一個好處是,它需要的空
間很少,看看下面你就知道了:

s0: / 256 megabytes
s1: swap 256 megabytes
s2: overlap
s3:
s4:
s5:
s6: /local ??? megabytes (rest of the drive)
s7:

/var要足夠大以放置審核記錄文件,而swap分區則與你的硬體(內存)相適應就行了,當然大的swap
分區可以在應付DoS攻擊時更強有力。

現在可以用另外的機器,ftp到sunsolve.sun.com:/pub/patches並且下載最新的推薦補丁,將它放
在磁帶機中轉到你的「安全主機」上,然後安裝這些補丁,當然有些補丁可能安裝不上,因為它所
要補的那個軟體你沒有安裝:)

5.3) 系統里的Strip

在Solaris下,你可以通過對/etc/rc[S0-3].d文件來修改啟動時自引導的動作:

考慮移去/etc/rc2.d中在你系統中用不到的服務,我還建議你移除/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

這些文件可能會與你的不同--這取決於你機器里的圖形卡/是否使用Solaris DiskSuits等等。
移除/etc/rc3.d里的文件........

舉例來說,在Solaris 2.4中,你應該編輯/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

並且通過設定ndd -set /dev/ip ip_strict_dst_multihoming 1來關閉"ip_strict_dst_multihoming"
核心變數。solaris機器就不會在兩塊網卡間轉發IP包,這可以防止host spoof。

* 在Solaris 2.5下,只要建立一個叫/etc/notrouter的文件就能阻止IP轉發,要重新打開它,只要移除
/etc/notrouter並重啟動系統就行了。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下,添加一個新的腳本名為/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,這樣這個腳本就會在系統啟動時執行了。
這可以使入侵者更難在系統里奪取root許可權。在Solaris 2.5則不必如此。

另外還有一些好的建議,就是在啟動時為用戶設定安全的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"是必需的,這樣腳本才會在本shell而不是它的子shell中執行。

刪除/etc/auto_*文件,刪除/etc/init.d/autofs可以防止automounter在啟動時就運行。

刪除/etc/dfs/dfstab,清除/etc/init.d以防止機器成為NFS伺服器。

刪除crontab文件,你可以將/var/spool/cron/crontabs中屬主root以外的文件全部刪除。

使用靜態路由,建立/etc/defaultrouter來維護之,以避免spoof。如果你必須通過不同的網關,考慮增
加/usr/bin/route命令於/etc/init.d/inetinit以取代運行routed。

當地切完成時,重啟機器,徹底地查看進程,ps -ef的輸出應該是這樣的:

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守護程序並沒有打開,因為你不必總在25埠監聽mail的列表請求,你可以在root的
crontab文件中增加:

0 * * * * /usr/lib/sendmail -q > /var/adm/sendmail.log 2>&1

這條命令要以每小時調用sendmail進程處理排隊中的郵件。

5.4) 安裝第三方軟體

你需要的第一個軟體是TCP Wrappers軟體包——由Wietse Venema寫的,它提供了一個小的二
進位文件叫tcpd,能夠用它來控制對系統服務的進出——比如telnet及ftp,它在/etc/inetd.conf
中啟動,訪問控制可以由IP地址、域名或者其它參數來限制,並且tcpd可以提升syslog的記錄
級別,在系統遇到未經認證的連接時,發送email或者警告給管理員。

然後安裝S/Key來控制遠程連接的安全性,可以在Q5.6中看到詳細的配置方法。

如果你打算打開ftp服務(不管是匿名ftp或者是出了管理目的),你需要取得一份WU-Archive ftp,
最好要拿到它的最新版本,否則會有一些安全漏洞存在,如果你認為需要管理員的遠程登陸服務的
話,可能得修改S/Key來支持ftp daemon。在Crimelabs S/Key的發行版本中,你可以在找到
S/Key/misc/ftpd.c,這個C程序示範了如何讓S/Key支持WU-Archive ftp,你可以對新版的WU-FTP
做類似的改動,當然你可能要閱讀wu-ftp FAQ以增加了解。

編譯並且安裝了這些二進位文件后(tcpd, wu-ftpd及keyinit, keysu,keysh),它們會被安裝在
/usr/local/bin中,當編譯wu-ftpd時你需要指定一個配置文件及日誌的存放目錄,我們推薦你將
配置文件放在/etc下,將日誌文件放在/var下,Q5.7更詳細地說明了wu-ftp的配置。

用/noshell來阻止那些不想讓他們進入的帳號,讓/noshell成為那些人的shell。這些帳號不允許登陸
並且會記錄下登陸的企圖,入侵者無法通過這種帳號入侵。

5.5) 限制通過網路進入系統


telnet和ftp守護進程是從inetd進程啟動的,inetd的配置文件是/etc/inetd.conf,還包含了其它
的各種服務,所以你可以乾脆移去這個文件,新建一個只包括以下兩行的文件:

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

當然這是基於你需要telnet及ftp的基礎上的,如果你連這兩個服務都不用的話,你就可以將它註釋
掉或者刪除,這樣在系統啟動的時候inetd甚至就起不來了:)

tcpd的訪問控制是由/etc/hosts.allow和/etc/hosts.deny文件控制的,tcpd先查找/etc/hosts.allow
,如果你在這裡面允許了某幾台主機的telnet或ftp訪問的話,那麼deny訪問就是對其它所有機器的了。
這是「默認拒絕」的訪問控制策略,下面是一個hosts.allow文件的樣本:

ALL: 172.16.3.0/255.255.255.0

這將允許172.16.3.0網路的主機上任何用戶訪問你的telnet及ftp服務,記住在這裡要放置IP地址,因
為域名比較容易受到欺騙攻擊……

現在我們準備拒絕其餘所有人的連接了,將下面的語句放在/etc/hosts.deny中:

ALL: ALL: /usr/bin/mailx -s "%d: connection attempt from %c" root@mydomain.com

這條指令不僅拒絕了其它所有的連接,而且能夠讓tcpd發送email給root——一旦有不允許的連接嘗試
發生時。

現在你可能希望用syslog記錄下所有的訪問記錄,那麼在/etc/syslog.conf放進如下語句:

auth.auth.notice;auth.info /var/log/authlog

注意兩段語句間的空白是tab鍵,否則syslog可能會不能正常工作。

Sendmail將用以cron來調用sendmail來替代。

5.6) 配置S/Key

S/Key是一個用於實現安全的一次性口令方案的軟體,它根據一系列信息(包括一個秘密口令)通過MD4
處理而形成的初始鑰匙,該初始鑰匙再交給MD4進行處理,資助將128位的數字簽名縮成64位,該64位信息
再次傳給MD4函數,這個過程一直持續直到達到期望值……

開始使用S/Key時,要建立一個以/usr/local/bin/keysh為shell的帳號:
在/etc/passwd中加入

access:x:100:100:Access Account:/tmp:/usr/local/bin/keysh

並且在/etc/shadow中加入

access:NP:6445::::::

然後使用passwd access命令來設定用戶的訪問密碼。

由於/usr/local/bin/keysh不是一個標準的shell,所以你的/etc/shells文件中內容如下:

/sbin/sh
/usr/local/bin/keysh

只有使用這兩種login shell的用戶才允許接入。

然後建立一個文件/etc/skeykeys並賦予一定的許可許可權:

touch /etc/skeykeys
chmod 600 /etc/skeykeys
chown root /etc/skeykeys
chgrp root /etc/skeykeys

使用keyinit access命令來初始化S/Key秘密口令。

現在你可以配置允許用戶通過keysu命令來成為超級用戶,首先改變/etc/group:

root::0:root,access

只有在這裡列出來的用戶才允許通過keysu成為超級用戶。現在你可以使用不著keyinit root命令來初
始化超級用戶的S/Key秘密口令,我建議該口令要與user的有所區別。

本來你可以將/bin/su刪掉以確定用戶只能使用keysu……,但不幸的是,許多腳本使用/bin/su來開啟
進程,所以你只需用chmod 500 /bin/su來改變它的許可權就行了。


5.7) 配置wu-ftp

配置wu-ftp需要經驗:),當你編譯wu-ftpd時,你需要指定一個存放配置文件的地方,這個文件夾里將
包含一個pid文件夾和三個文件,一個ftp conversions文件可以是空的,但不能沒有,還有ftpusers文
件包含了所有在password文件中存在但不允許登陸系統ftp的用戶名稱,也就是如uucp、bin之類的系統
帳號都將應該被限制。root最好是永遠都被扔在這裡面:)。

最後一個文件是ftpaccess:

class users real 172.16.3.*

log commands real
log transfers real inbound,outbound

這將允許從172.16.3.0的任何用戶ftp而拒絕所有其它的,所有的文件與命令將被記錄下來,並且存放
在你指定的記錄文件目錄。

至於建立匿名FTP,你要小心,因為很容易配置錯誤。

建立一個特殊帳戶如:

ftp:*:400:400:Anonymous FTP:/var/spool/ftp:/bon/false

因為使用了chroot()功能,必須建立一個小的文件系統,包含了bin\etc\pub目錄:

這裡面要注意的有:

確保bin及etc下的所有文件屬主都是root,且任何人不可寫,只有執行許可權,最好另外拷貝
一份passwd到ftp的etc中,即使被入侵者得到了,也不會泄露太多信息。

詳細配置情況還需要看關於wu-ftp的faq。

5.8) 限制對文件及文件系統的存取許可權

下載並使用fix-modes,這個程序會將系統里不安全的文件存取許可權(文件/目錄)找出來。

使用nosuid參數來配置/etc/vfstab,以防止setuid程序從UFS文件系統執行

/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) 測試配置

重啟你的機器,確定下面這些東西:

你可以從你配置為允許tcpd連接的機器telnet及ftp到你的server。

嘗試從其它未被允許的機器進入,應該會拒絕並email告知當事人。

你只能以user的身份遠程telnet或者ftp上站,不能以root登陸。

用戶可以通過/usr/local/bin/keysu成為超級用戶。

ps -ef只有少量的進程顯示,最好不要有sendmail和各種NFS進程。

touch /usr/FOO會得到錯誤提示,因為文件系統是ro的。

成為超級用戶,將ps命令複製到/,要保持它的setuid位,然後刪除它的二進位文件。

好了,祝賀你,你已經建立了一個比較安全的系統了:)

5.10) 最後:一些建議

使用XNTP來確定精確的時間。

在你把機器放到網上前,用tripwire和MD5做一個校驗,如果系統被入侵,你可以通過保存的校驗和
來判斷哪些程序被替換掉了。

考慮使用進程記錄來記來系統里佔用資源的情況。

定期改變你的S/Key secrets並且選擇一個好的密碼,在各地方的密碼最好不要一樣……

-------------------------------------------------
對Solaris及網路安全我都沒多少經驗,不懂
的地方都是妄自猜度,錯誤想必不少,請指點!
mailto:quack@antionline.org


[火星人 ] The Solaris安全FAQ已經有711次圍觀

http://coctec.com/docs/security/show-post-72891.html