GB | BIG5
|
| 首頁 > 安全技術 > 系統 > 正文 |
 |
| Unix高級安全設置 三:常見Unix安全設置方案-3.Free BSD系列 |
| 本文出自:http://sinbad.zhoubin.com 作者: KCN (2002-12-04 06:02:00) |
第四部分 總結
沒有絕對安全的網絡系統,網絡信息對抗是一個長期的研究課題,安全問題是多種多樣,且
隨著時間技術的變化而變化,而黑客的侵入手段也隨之不斷變化,所以安全防護也是非常重
要的,保持清醒正確的認識,同時掌握最新的安全問題情況,再加上完善有效的安全策略,
是可以阻止大部分的網絡入侵,從而保持最小程度的經濟損失。
第五部分 附錄
5.1 Free BSD系列
FreeBSD 是一個非常安全的操作系統。也正因為它的 source code 是可以免費的取得,這個
OS 長久以來不斷的有人改進加強。盡管 FreeBSD 一出廠就非常安全, 但是仍然有更多加強
安全性的措施,這份 HOW-TO 會教你一些步驟, 以更加強你機器的整體安全。
5.1.1 網絡
5.1.1.1 inetd (Inet Daemon)
網絡在系統安全上扮演了一個很重要的角色。FreeBSD 的根基是有著內建網絡功能, 且具有
最穩最快的 TCP/IP stacks 的 4.4BSD。這個 stack 支持了非常多的協議像是telnet, ftp
, talk, rsh 等... 這些 service 的的主設定檔便是 /etc/inetd.conf。要編輯這個檔, 請
輸入 "vi /etc/inetd.conf" (在這個例子裡, 我使用 vi 。你可以使用其它你較為上手的編
輯器。或許你可以試試 pico)。如果你要使用 pico, 請在啟動它時加上 -w 選項:
-w 關掉自動斷行。(因此可以容許超過 80 字符的行存在)
這選項在編輯 /etc/inetd.conf 時非常有用。
當然了, 你也可以使用 ee - 它隨著 FreeBSD 一起 "出廠" 的, 而且也是 root 預設的編輯
器。不過, 請再 "echo $EDITOR" 確認一次。 開啟了這個檔案, 你可以看到裡面怎描
述每個 service 怎激活, 要以那位使用者執行等等的信息。(man 5 inetd.conf)既然這個
檔案是許多 internet service 的主要設定檔, 好好的設定它便是一件十分重要的事。你要
關掉一個 service的話,只消在那一行前面加個 "#" 符號。基本的概念是, 關掉些你不熟悉
的 services - 如果你不知道那個 service 是啥, 或者不知道它可以幹啥。理想狀態下, 你
不須要把所有的 service 都打開。例如, 你的器只是要跑 web server。這種情況下, 你只
要激活 ssh 和 httpd 便夠了。關啥是ssh, 下面會說明。如果你啥 service 都不想跑,
最直接幹脆的方法是-關掉 inetd。做法很簡單, 只要編輯 /etc/rc.conf 並且把
inetd_enable="YES"改成inetd_enable="NO"就可以了。
如此一來沒人可以 telnet, rlogin, 或 ftp 到計算機中。如果你決定要激活你的 inetd 的
話, 記得激活 log 選項, 並提高一個 service 每分鐘激活的上限數目。(默認值是 256, 我
建議提高到 1024-自行參照下面解說調整吧!)為什要這做呢...? 就 modem user 或是低
速專線用戶是沒什差別。但高速線路的人, 上限值太低會蹦出一個 DoS attack(Denial o
f Service)。某個壞心的人可以簡單的用一個 shell script 同時搞出超過 256 個 connec
tions, 這一來你的 inetd會很不幸的陣亡。換句話說, 如果你想讓每分鐘每個 service
可接受的connection 數多點, 記得做如下的設定, 不然來個壞心的人就可以搞垮你的計算機
。因此, 在這行inetd_enable="YES"
下面的:
inetd_flags=""
要改成:
inetd_flags="-l -R 1024"
這會將聯機的動作都 log 下來(-l 參數)而且將同時最大聯機數從預設的 256 增加到1024。
你還須要對你的 /etc/syslog.conf 作些修改, 這些等會兒會提到。
5.1.1.2 SSH
在以下提到的案例中, 你完全不須要 run inetd。例如, 如果你只有跑 web, news, 或是 n
fs server, 那就沒有必要在你的機器上再跑其它的services。但是你一定會問,"我要怎
控制我的機器啊!?" 嗯嗯, 所以現在要介紹 SSH。你可以透過 SSH (SecureShell) 來登入你
的機器。Secure Shell 當初便是設計來取代 rsh, rlogin 等其它的Berkeley r* 命令。相
信你很快就會了解 SSH 是如何有用,而且開始使用它,來代替其它的程序像是 telnet 和 ft
p。SSH 具有很多功能,但是最為人知的是, 它的加密通訊方式, 也就是防止你的密碼和資料
以明碼的方式在網絡上傳輸。如果你使用 telnet,你的通訊內容可能會被"竊聽": 傳輸中的
資料被改變, 通訊內容被看到。(不是有 S/Key可以解決嗎? 很不幸的, 它還是有著插入資料
和連接時被破解的問題) 我希望你可以完全的關掉 inetd 而使用 SSH。如果你認為完全不靠
inetd 來激活某些 services,是完完全全不可能的事, 那希望你至少激活 log 功能, 而
且要增加每分鐘同一個 servi-ce 可激活的次數。 (原因上面有提到)
你可以從 ftp://ftp.funet.fi/pub/unix/security/login/ssh 下載 SSH。
若你想要更簡單的方法:
# cd /usr/ports/security/ssh
# make install
5.1.1.3 inetd (part II)
好吧, 你仍然執意要使用 inetd。那我們來看看在 inetd.conf 有那些選項, 可以增進你
的系統安全。在攻擊某系統之前, 攻擊者都會先收集該系統的相關信息。就 telnetd 而言,
你可以試試在 telnetd 那行面加個 -h:
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h
從 telnetd 的 man page 可以知道:
-h Disable the printing of host-specific information before login
has been completed.
當有很多管道可以獲得系統信息的同時, 這招和下面的那招是個不錯的解決方案。如果你認
為跑 telnet daemon 是沒有必要的, 那只消加個 "#" 在該行的最前面就行了:
#telnet stream tcp nowait root /usr/libexec/telnetd telnetd
有個極不錯的措施是, 你可以拒絕沒有完整 FQDN 的人來聯機。要做到這點, 也只要加個 -
U 選項到 telnetd 面:
telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U
這是個小動作, 但是對你的系統安全有莫大的助益。
5.1.1.4 ftpd
現在來看看 ftp。 對 ftp FreeBSD 已經做了一些 log 的動作 。 可以看到在/etc
/inetd.conf 裡面 ftpd 那一行已經加了 "-l"。然而, 你還是要設定你的syslogd, 使它可
以接受 ftp daemon 產生的 log。從 man page 可以得知:
每個成功或是失敗的 ftp 登入嘗試, 都會以 LOG_FTP 機制紀錄起來。如果這個選項被指定
了兩次, 所有的下載 (get), 上載(put), 新增, 刪除,建立目錄, 及更名的動作和文件名字
都會被紀錄下來。 又: LOG_FTP 訊息預設是不會被 syslogd(8) 紀錄下來的。你還要在 s
yslogd(8) 的設定文件裡面激活這個功能才行。
讓我們開啟 syslogd 紀錄 ftpd log 的功能吧~ 這個檔案是 /etc/syslog.conf (別忘了順
便看看 man 5 syslog.conf)。把下面這一行加到這個設定檔裡:
ftp.* /var/log/ftpd
也不要忘了執行這個指令 "touch /var/log/ftpdlog", 因為 syslogd 不能寫入到一個沒有
被開啟過的檔案。如果你想要你的 ftpd 提供你更多的 log 訊息, 那就在 ftp那一行多加
個 "-l" 吧:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l
如果你想要確定你的使用者們都用 scp (Secure Copy, 附屬在 SSH 裡面), 但是又想要提供
anonymous ftp 服務, 也只消加個 "-A" 在 ftp 那行面就行了:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -A
你也可以編輯 /etc/ftpwelcome, 說明目前接受 anonymous ftp 登入, 但是系統內的使用者
就得使用 rcp 了。如果你有提供 anonymous ftp, 你可以使用 -S 選項來記錄傳輸的情形:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -A -S
5.1.1.5 fingerd
Finger 服務默認值還算安全: 它不容許不帶 user name 的 query。這是一件不錯的事(tm)
。然而, 就是有些人無論如何也不想 run fingerd。這種情形下, 你只要簡單的給它加個 "
#" 在這行的最前面就可以了。又, 你想要 log 住誰來 finger 的話, 加個"-l" 也就行了
:
finger stream tcp nowait nobody /usr/libexec/fingerd fingerd -s -l
Fingerd 產生的 log 信息預設是寫到 /var/log/messages。如果你想要這些信息寫入到特定
的檔案裡去, 那就在 /etc/syslog.conf 加入這一行:
daemon.notice /var/log/fingerd
/* !fingerd anyone? */
$ man 5 syslog.conf
除了 ftp, telnet 和 finger 之外, 你實在不須要在 /etc/inetd.conf 中再多激活任何東
西了。通常我都會關掉 talk 及 comsat等我個人不須要的東西。如同我之前講的,如果你不
知到某個 servcie 是幹嘛用的, 而且你也不須要它, 那就關掉它。一些和網絡有關而且很
有用的 man page 是: inetd, ftpd, telnetd, fingerd, syslogd,comsat, talkd, rshd,
rlogind, inetd.conf。並且記得要看 man page 的"SEE ALSO"部份, 以獲得更多的相關信息
。
5.1.1.6 ipfw (IP FrewWall)
IP FireWall 做的是 packet 過濾的工作。沒錯, 就是只有這樣。然而, 你要考慮的事是,
你的 kernel 要有支持 ipfw。 通常在我管的機器上, 我都會重編核心使其支持ipfw。大
概看起來是這樣:
options IPFIREWALL #finger the net
options IPFIREWALL_VERBOSE #log the net
options IPFIREWALL_DEFAULT_TO_ACCEPT
第一行表示最其本的 IP FireWall 支持。第二行讓 ipfw 可以把接受或拒絕 packets的紀
錄 log 起來。第三行非常重要, 讓 ipfw 默認值是接受任何地方來的 packets 。如果你不
這樣做, 默認值拒絕任何地方來的 packets。我個比比較喜歡者, 但我又認為在我自己的
工作站上, 或一個讓人登入的工作站, 預設拒絕任何 packets 不是一件太好的事。如果你搞
不清楚自己在做啥事, 那就不要用這個選項。
就設定 firewall 而言, 這是不甚正確的。預設任何東西都該被擋掉才是正確的。如果你是
要建置一台高安全性的系統, 或一台 firewall 的話,那就千萬不要加入這個選項:
options IPFIREWALL_DEFAULT_TO_ACCEPT
記住一件事: 要預設拒絕任接受任何 packets, 然再加入 rule 來設定你想要 接受那
些 packets。查看 /etc/rc.firewall 以得到更多的信息。再一次提醒你, 不要使用這個 o
ption, 除非你只是想要防止 DoS attacks 或暫時把某些 port/network ban掉。
5.1.1.7 log_in_vain
你也可以透過 sysctl 命令, 來改變一些有用的系統變量:
# sysctl -w net.inet.tcp.log_in_vain=1
# sysctl -w net.inet.udp.log_in_vain=1
這會把嘗試向你的機器要求你沒有的服務的 connections log 起來。例如, 如果你在你的機
器沒有跑 DNS server, 而又有個人想要向你的機器要求 DNS 服務, 這時候你就會看到
Connection attempt to UDP yourIP:53 from otherIP:X
(X 是某個 high port #)
用 "dmesg" 命令就可以看到這一行。Dmesg 秀出的是系統的 kernel messagebuffer。
然而, 這個 buffer 的空間是有限的, 所以系統也會把這些訊息寫入到/var/log/messa
ges 裡面去:
# tail -1 /var/log/messages
Jun 12 19:36:03 ugh /kernel: Connection attempt to UDP yourIP:53 from otherIP:X
5.1.1.8 final notes
理論上呢, 你的系統現在已經比你裝好它時更安全些了。你現在可以做一些事來確定你目前
的更動:
$ netstat -na | grep LISTEN
這會告訴你那些 service 在那些 port 跑。越少越好 :) 又, 再跑一些其它的 port scann
ers (strobe, nmap) 來找出你開了那些 port。
而要確要你的 syslogd 已經開始紀下你剛剛想要 log 的事件, 可以這做:
# cd /var/log
# tail -10 fingerd ftpd messages
在 log 檔裡面沒看到任何東西的話, 記得重新激活 inetd 和 syslogd:
# kill -HUP `cat /var/run/syslog.pig` `cat /var/run/inetd.pid`
5.1.1.9 Filesystem
既然 Unix 把什東西都當作檔案來看待, 好好的保護你的檔案系統便是很重要的事。有件
事是在你安裝操作系統前便要完成的: 必須要計劃並設計好你的 partition 該怎切割。有
幾個很重要的原因讓你要這做: 一個是你可以 mount 不同的檔案系統以賦與不同的選項
(下面有幾個例子)。別一個是,如果你想要把你的 filesystem export出去, 你須要更加細微
的控制。如果你是一個從 Linux 轉入 FreeBSD 的使用者, 你會發現 Linux 是把任何東西都
往 root partition "/" 塞, 而 FreeBSD 預設便要 "/","/usr", 和 "/var"。這也使得要使
用如 dump 般的工具較容易。且讓我們來討論 security 吧! 有一件事我通常會做的是, 我
會把一般 users 可以寫入的 partition 分開來割, 而這些 partitons 便可以用 "nosuid"
的方式來 mount。從 mount 的 man page 可以知道:讓 suid 或 sgid bit 失效。對像
suidperl 這些公開使用的程序, 設這個選項便沒用。
因此你會有個 partition 給一般使用者使用: /home 或 /usr/home。然你可以另外
開個 partion 給 /var/tmp 然再把你的 /tmp 指到這裡:
# rm -rf /tmp
# ln -s /var/tmp /tmp
你可以參考這個例子:
# cat /etc/fstab
# Device Mountpoint FStype Options Dump Pass#
/dev/sd0s1b none swap sw 0 0
/dev/sd0s1a / ufs rw 1 1
/dev/sd0s1g /usr ufs rw 2 2
/dev/sd0s1h /usr/home ufs rw 2 2
/dev/sd0s1f /var ufs rw 2 2
/dev/sd0s1e /var/tmp ufs rw,nosuid 2 2
proc /proc procfs rw 0 0
現在你可以確定一般 users 可以寫入的目錄不是以 "-nosuid" 的方式被 mount, 就是
沒有可以寫入。現在你還要關心的就是 /var/spool/uucppublic"。
你可以把 "/var" 以 "-nosuid" 的方式來 mount , 或下這個命令:
# chmod o-w /var/spool/uucppublic
如果你想要找出你所有的可寫入目錄, 下這個命令:
# find / -perm -0777 -type d -ls
如同 man page 指出的, 具有 suid/sgid 的程序會讓你的 nosuid 失效。找出那些程式
是 suid 或 sgid 的吧:
# find / -perm -2000 -ls
# find / -perm -4000 -ls
同時你不止可以用 "-ls" 而只是知道有那些程序。你可以把不是很有用的程序 "chmod
000"。像是 uustat, uucico 等, 如果你從來不碰 uucp 的話。或是 ppp 和 pppd, 如果你
絕不會用到他們。又, 你不會去用到打印機的話, 把 lpr lprd 也 chmod 000 吧!也許改天
會有個人寫個 shell script 來問你那些東西要 chmod 000 掉。
現在你也許想問, 有什方式可以防止攻擊者重新以非 "-nosuid" 的方式 mount 你的
filesystem ? Well, 沒有, 除非你改變你的 securelevel。
5.1.1.10 securelevel
FreeBSD kernel 有個觀念叫 securelevel。當還有人在爭論這是不是夠完美時,這個機
制已經夠防止大部份的 "script kiddiez"。Securelevel 是指你的 kernel 在執行時的安全
等級。每一個等級具有不同的保護和檢查機制。這些是 init(8) 的 man page:
Kernel 可以以四種不同的安全等級來執行。任何 superuser process 可以提高安全等級,
但是只有 init 可以降低它。這四種等級分別是:
-1 永遠不安全模式 - 切換到 level 0 吧!
0 不安全模式 - "不可更動"和"只能附加"這兩個旗標(flag)可以被改變。所有的
devices 可以照著它們的讀寫權限被讀寫。
1 安全模式 - "不可更動"和"只能附加" 的旗標不能被取消; mount 上來的檔案系
統, /dev/mem, 和 /dev/kmem 不能寫入。
2 高安全模式 - 和安全模式一樣, 又多加了不管硬盤有沒有被 mount 起來,除了
mount(2) 之外都不能寫入。它防止一個檔案系統在 umount 的時候被搞亂。而且在這個等級
也禁止在 multi-user 時執行 newfs(8)。
如果安全等級最初是 -1, 那 init 就會保持原狀。否則在 single user mode 時,in
it 會把安全等級調到 0, 而在 multiuser mode 時會以 1 來跑。如果你希望在multiuser
模式是以等級 2 在跑, 你可以先進入 single user mode, 編輯 /etc/rc,使用 sysctl 來更
動。
若是你的系統只拿來跑 web server 之類的, 你可以放心的將 securelevel調高到2。但
若是你要跑 X server, 把你的 securelevel 調至 1 或更高會導致一些問題。因為X serve
r 必須要寫入 /dev/mem 和 /dev/kmem, 而 securelevel 1 不允許你這做。有一個解決的
方法是, 在激活 X server 再調高 securelevel。但我的意見是, 如果你跑 X server 的
話, 你已經有了其它的安全問題須要考量, 而不止是 securelevel。以下這個指令會顯示出
你目前的 securelevel 設定值。
# sysctl kern.securelevel
如果要提高你的 securelevel:
# sysctl -w kern.securelevel=X
X 可以是 0, 1 或 2。
又在 securelevel 是 1 的話, 你在 "make world" 時也會有些問題。因為 "make ins
tall" 時會在 kernel 上加上 immutable flag:
# ls -lo /kernel
-r-xr-xr-x 1 root wheel schg 1061679 Jun 30 01:27 /kernel
"schg" flag 會防止你安裝新的 kernel:
nfr# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem)
nfr# sysctl kern.securelevel
kern.securelevel: 2
nfr# rm -rf /kernel
rm: /kernel: Operation not permitted
nfr# mv /kernel /tmp/
mv: rename /kernel to /tmp//kernel: Operation not permitted
如果你在 securelevel 1 或 2, 那 schg flag 是不能被改變的。
# chflags noschg /kernel
chflags: /kernel: Operation not permitted
值得留意的是, /boot.config 可以改變你開機時的系統設定,要預防有心人篡改你應該
這做:
# touch /boot.config
# chflags schg /boot.config
你可以看看系統預設還有那些執行檔是有 schg flag 的。
# ls -lo /sbin | grep schg
-r-x------ 1 bin bin schg 204800 Jul 19 20:38 init
# ls -lo /bin | grep schg
-r-sr-xr-x 1 root bin schg 192512 Jul 19 20:36 rcp
再回過頭來談談鎖定系統這件事吧! 既然剛剛談到了 immutable flags, 何不試著把整
個 /sbin 和 /bin 都設成 schg flag 呢 !? 這會給想 crack你系統的人一點小挫折。(假設
你的系統也正以適當的 securelevel 運作中)
# chflags schg /bin/*
# chflags schg /sbin/*
不過 /sbin 可能被改成別的名字,再重新創造一份新的 /sbin ,所以改變 /sbin 與/bi
n 的 schg flag 是很合理的想法,我們可以依照以下的方式改變 /sbin 和 /bin 的 schg f
lag:
# chflags schg /bin/*
# chflags schg /sbin/*
這些 schg flag 的檔案會讓你在 "make world" 時有問題。
("make installworld" 也是)
無論如何 ,最好是以 single user 模式來 "make world"。有關 "makr world" 的相信
息, 還有為什要這做, 到下面這個網頁來看看:
http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html
現在你已經適當的鎖定你的系統, 也以只跑必要的的 service, 而檔案系統也適當的mo
unt 上來, 且也以適合的 kernel securelevel 運作中。
與以上所述的相關 man pages 有: init(8), chflags(1), sysctl(8)。
5.1.1.11 Logging
系統紀錄是很重要的。如果你的統被人攻擊, 透過它你可以找到一些蛛絲馬跡。Unix的
標準 log 動作是透過 syslogd(8) 來達成的。它從 /etc/rc 中被激活, 一直執行到系統關
機為止。你可以用以下的方式確定你的系統上是否正在執行 syslogd:
$ ps -axu | grep syslogd
Syslogd 會在激活時讀取 /etc/syslogd.conf。這個檔案很重要, 因為它告訴 syslogd
要紀錄那些東西, 而這些東西又該放在那裡。你也許想看看 syslod 和 syslod.conf的 m
an pages:
$ man syslogd ; man 5 syslog.conf
既然 Unix 當初就是設計作為網絡操作系統, syslogd 可以而且默認值也接受其它系統
的紀錄。它自己也是可以把紀錄透過網絡送到其它的計算機去。想當然耳, 它可以紀錄下 自
己系統發生的每件事 - 而這也正是默認值。因為 syslogd 使用 UDP - 所以資料是可以被
偽造的。你至少可以作一件事: 不要讓你的 syslogd 接受來自其它計算機的紀錄訊息。在
/etc/rc.conf 加個 "-s" 就可以了:
syslogd_flags="-s" # Flags to syslogd (if enabled).
如果你有接受特定機器之紀錄的必要 (像是你的 router, 或是 web server), 使用
"-a" 來指定特定的 hosts, domains, 或 subnets。
下次你重新激活你的系統時, syslogd便會拒絕來自其它地方的紀錄訊息。如果有人嘗試
送資料進來, syslogd 將會加以紀錄。
如果你不想重新激活你的系統, 那只要把 syslogd kill -9, 然再以 root 的身份
激活 syslogd 便可以了。記得加上 "-s"這個參數。
如果有人嘗試攻擊你的系統而且失敗了, 你的系統紀錄便不會被偽造。但如果你的系統
己經被攻陷了, 而且 /var/log 整個被幹掉了呢 !?還是有方法可以防止的。 其一便是在你
的網絡系統中再架一台機器拿來紀錄整個網絡中發生的事, 而且也不要再幹其它的事了。除
了 UDP port 514 之外, 其它的也都不用再開了。這樣子一來你便可以紀錄下所有機器 (ro
uters, firewalls, serves, workstations) 發生的所有事。你可以只送敏感的訊息給它,
或者任何你覺得重要的。這台機器可以是老舊 486, 但有顆大大的硬碟。記得要設定好正確
的 "-a" 選項, 免得搞出沒收到紀錄的烏龍事。你也可以接台老舊的點陣打印機給它, 以印
出敏感的事件(像是失敗的登入嘗試)。如果你把系統紀錄印到紙上, 一位攻擊者要清除它是
很困難的。還有其它的方法,例如透過 serial port (cuaaN) 或是 parallel port (lpN) 送
出紀錄到別台機器上。
每個人都有不同的記錄需求。但是有一件事我通常會做的是在 /etc/syslog.conf 加入
這一行:
auth.* /var/log/authlog
FreeBSD 出廠時便包含了 newsyslog。這玩意會定時壓縮紀錄文件並清除掉舊的紀錄。
設定檔位 /etc/newsyslog.conf - 請看一下 man page 以得到更多的信息:
% man newsyslog
不像 syslogd, newsyslog 不是一直都在執行的。它是從 crontab 激活的:
% grep newsyslog /etc/crontab
0 * * * * root /usr/sbin/newsyslog
%
你可以修改 /etc/newsyslog.conf 以符合你的需求。我通常會改變它預設的檔案模式,
從 664 改成 660 - 因為沒有必要讓一般的使用者去查看你的系統紀錄。你應該這做:
# cd /var/log
# chmod g-w,o-r * ; chmod a+r wtmp
這會防止一般使用者讀取紀錄文件, 除非它們在適當的 group (wheel 或之類的)。還有
,記得把記錄文件的 group 都改成 wheel -- 這純粹只是為了方便: 如果你是在 wheel 這個
group; 你當然是可以 su(1) 到 root 然讀記錄文件。但是這做以你便可以直接讀
記錄文件了, 豈不方便乎!?你還要在 /etc /newsyslog.conf 中加入 "root.wheel":
/var/log/maillog root.wheel 640 7 100 * Z
/var/log/authlog root.wheel 640 7 100 * Z
/var/log/messages root.wheel 640 7 100 * Z
這會在記錄文件達到 100K 時將它壓縮並加以編號, 將 mode 改成 640, chown
成root.wheel, 並將舊的記錄文件幹掉 - 這就是我們要的。
當然,標準的 Unix 還有其它不同的 syslog 程序可供選擇,其中之一是 CORE EDI 的ss
yslog (secure syslog). 可以在以下的地方找到:
http://www.core-sdi.com/ENGLISH/CoreLabs/ssyslog/download.html
另外還有 nsyslog (new syslog),這是寫 bpfilter 那一伙人寫出來的,你可以在
http://cheops.anu.edu.au/~avalon/nsyslog.html 找到這個程序。
不管你選用那一種程序 (標準的 syslog , ssyslog ,或 nsyslog),你應該也去看看一些
幫你分析系統 log 的程序,幫你省下去用 grep 查詢 log file 的麻煩。
其中之一是 logcheck , 可以在這個地方下載:
http://www.psionic.com/abacus/abacus_logcheck.html
另外一個類似的程序叫做 logsurfer , 你可以從這個網頁下載:
http://www.cert.dfn.de/eng/team/wl/logsurf/
5.1.2 Misc. hints and tips
5.1.2.1 LKM
在正式提供服務的系統上, 也許該關掉 LKM。為什? 請看:
Phrack Magazine Volume 7, Issue 51 September 01, 1997, article 09
要關掉 LKMs, 在 kernel 設定檔中加入這一行:
options NOLKM
5.1.2.2 Portmap
FreeBSD 出廠的默認值會將 portmap 這項功能打開。如果你不需要它的話,把它關掉。
如果你沒有跑任何需要呼叫 RPC 的程序的話,你就不需要跑這個程序。如果要關掉portmap
這個程序,你可以去修改 /etc/rc.conf , 把
portmap_enable="YES" # Run the portmapper service (or NO).
改成
portmap_enable="NO" # Run the portmapper service (or NO).
5.1.2.3 Sendmail
FreeBSD 出廠的默認值也會執行 sendmail 的功能。從很久以前 sendmail 就以不安全
且漏洞百出聞名。最近人們努力的將 sendmail 中的錯誤清除,但是由 sendmail是一個很
肥大的程序,要將所有的錯誤都抓出來相當的困難。換句話說:如果你不需要它的話,最好把它
關掉。如果你真的需要它的話,最好到 sendmail 的網站去看看有沒有新的patches 或是 ha
cks, sendmail 的網站在 http://www.sendmail.org 。
此外,如果你的 sendmail 版本是 8.8 以的版本,請設定好你的系統,以防止 spammer
利用你的系統去幹壞事。設定 anti-spam 的信息可以在
http://www.sendmail.org/antispam.html 下找到。
如果你決定要把 sendmail 關掉的話,只要去修改 /etc/rc.conf (沒錯,又是它)中的:
sendmail_enable="YES" # Run the sendmail daemon (or NO).
改成
sendmail_enable="NO" # Run the sendmail daemon (or NO).
5.1.2.4 Ports and Packages
在一台高安全性的系統上, 最好不要使用 ports 或 packakges。 你不會真正知道是不
是安裝 suid 的程序進你的系統 -- 而且你不會想再多這些 suid 的東西了, 相信我。盡管
你在 pkg_add 時可以使用不同的選項(如 "-v" 或 "-n"), 最好還是自己來: 抓回它的 sou
rce code, 自己 compile, 再手動安裝完成。
5.1.2.5 Filesystem quota
如果你的系統是 "shell" type server,你可能希望設定使用者的 quota (可用空間)。
如此一來可以保護你的系統免受 Denial of Service 攻擊方式的侵擾(不論是有意或是無意
的)。在未設定 quota 的系統上使用者可以隨意的灌爆你的硬盤。要把 quota這項功能打開
,你可以修改 /etc/rc.conf 中的這項設定:
check_quotas="NO" # Check quotas (or NO).
改成
check_quotas="YES" # Check quotas (or NO).
請先看看以下的 man page,這些文件說明如何使用 quota 的各項設定,並且有一些設定
的范例: quotaon, edquota, repquota, quota
請確定在 /etc/fstab 中有加入 "userquota" , 詳見 man 5 fstab。
5.1.2.6 Crontab
如果你使用了 /etc/crontab 的話,這項功能有可能提供入侵者一些額外的信息。
請確定你做過 "chmod 640 /etc/crontab"
5.1.2.7 BPF
BPF 是 berkeley packet filter 的縮寫,要使用這項功能前你必須修改 kernel,以達成
監聽網絡的目的。像 tcpdump 和 NFR 這些程序都使用 BPF。然而 BSD的監聽程序也都透過
BPF 來達成,如果有人拿到你系統的 root 權限的話,在系統上設定 BPF 功能反而幫助他們
更容易的監聽你的網絡。如果沒有必要的話,不要設定 kernel 中 BPF的功能。 FreeBSD 出
廠的設定值是將這個功能關閉起來的。
5.1.2.8 CVSup, CVS, 等等
如果你是使用 CD-ROM 安裝你的系統的話,很有可能當你拿到你的 CD-ROM時,已經發現某
些程序有錯誤存在了。在大部份的情況下(我們希望如此),這些錯誤與系統安全無關。然而,
我建議你將你的系統升級到最新的 -current (或是 -stable,視你的喜好而定) 版本。如此
你可以確定你系統上的的是最新版本的系統原始碼。
你需要的信息在這邊可以找到:
http://www.freebsd.org/handbook/handbook264.html#508
在更新你操作系統的原始碼你必須去 "make world",詳細的文件在:
http://www.nothing-going-on.demon.co.uk/FreeBSD/make-world/make-world.html
5.1.2.9 SSH
使用 ssh 以代替 telnet, ftp, rlogin, rsh 等的重要性, 再怎強調都是不夠的。
對使用慢速線路的人 (dial-up, 56K frame), ssh 有 -C 選項:
-C 將數據壓縮再傳出去, 包括了 stdin, stdout, stderr還有透過 X11 還有
TCP/IP。壓縮的算法同 gzip, 而且可以指定壓縮的 level。對 moden users 和使用慢速
線路的人, 這功能是不錯的。 但有高速線路的人, 這搞只會拖慢速度。在主機對連時可以
設默認值, 請再參照文件。
這會讓你用起來快一點 :) 總之就是用 SSH 就對了啦! 拜托, 拜托, 使用 ssh。 如果
你硬是不信邪, 再也沒什安全措施可以幫助你了 !!
5.1.2.10 Related URLs
1) FreeBSD Hardening Project:
http://www.watson.org/fbsd-hardening/
2) FreeBSD ipfw Configuration Page:
http://www.metronet.com/~pgilley/freebsd/ipfw
3) FreeBSD Security advisories:
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/
4) FreeBSD Security web page:
http://www.freebsd.org/security/security.html
5) Security tools in FreeBSD:
http://www.samag.com/archive/0705/feature.html
5.2 sco 系列
5.2.1 抓好網內主機的管理是網絡安全管理的前提
用戶名和密碼管理永遠是系統安全管理中最重要的環節之一,對網絡的任何攻擊,都不
可能沒有合法的用戶名和密碼(台網絡應用程序開門例外)。但目前絕大部分系統管理
員只注重對特權用戶的管理,而忽視對普通用戶的管理。主要表現在設置用戶時圖省事方便
,胡亂設置用戶的權限(id)、組別(group)和文件權限,為非法用戶竊取信息和破壞系統
留下了空隙。
金融系統UNIX的用戶都是最終用戶,他們只需在具體的應用系統中工作,完成某些固定
的任務,一般情況下不需執行系統命令(shell)。以農業銀行全國電子匯兌為例,用戶名為
dzhd,它在/etc/passwd文件中描述如下:
dzhd:x:200:50: :/usr/dzhd:/bin/sh
它的.profile內容大致如下:
COBSW=+R+N+Q-10
DD_PRINTER=“1p-s”
PATH=/etc:/bin:/usr/bin:$HOME/bin:/usr/dzhd/obj:
MAIL=/usr/spool/mail/logname
umask 007
eval`test -m ansi:ansi -m:\?ansi -c -s -Q`
export PATH MAIL COBSW DD_PRINTER
cd usr/dzhd/obj
runx hdg
exit
用戶正常登錄,如果按下中斷鍵“delete”,關掉終端電源,或同時鍵入“Ctrl”“
\”,那用戶將進入shell命令狀態。例如他可以在自己的目錄不斷創建子目錄而耗盡系統
的I節點號、或用yes>aa創建一個其大無比的垃圾文件而耗盡硬盤空間等導致系統的崩潰、癱
瘓;如果文件系統的權限設置不嚴密,他可運行、窺視甚至修改它;還可通過su等命令竊取
更高的權限;還可登錄到其它主機上去搗亂……令你防不勝防,危險性可想而知。這一些問
題都與用戶設置有關。所以,盡量不要把用戶設置成上述形式。如果必須這樣,可根據實際
需要,看看能否把用戶的sh變成受限sh,如rsh等,變成如下形式:
dzhd:x:200:50: :/usr/dzhd/obj:/bin/rsh
或如下形式:
dzhd:x:200:50: :/usr/dzhd:./main
在main(.porfile)首部增加如下一行:
trap' ' 0 1 2 3 5 15
那上述一切問題都可避免。
此外定期檢查你的/etc/passwd文件,看看是否有來歷不明的用戶和用戶的權限;定期修
改用戶密碼,特別是uucp、bin等不常用的用戶的密碼,以防有人在此開個活動的天窗--一個
可自由進出的用戶;刪除所有睡眠用戶等。
5.2.2設置好自己的網絡環境是阻止非法訪問的有效途徑
網上訪問的常用工具有telnet、ftp、rlogin、rcp、rcmd等網絡操作命令,對它們的使
用必須加以限制。最簡單的方法是修改/etc/services中相應的服務端口號。但這樣做會使網
外的一切訪問都被拒絕,即使是否法訪問也不例外。這種閉關自守的做法不值得提倡,因為
這樣會使本網和網外隔絕開,也會給自己帶來不便。通過對UNIXt系統的分析,我們認為有可
能做到有條件限制(允許)網上訪問。
5.2.2.1 建立etc/ftpusers文件(不受歡迎的ftp用戶表)。
與之相關的命令是ftp。配置如下:
#用戶名
dgxt
dzhd
…
以上都是本機內的一些用戶,侵入者使用以上用戶名ftp訪問本網會被拒之門外。
5.2.2.2 保存.netrc文件
注意保存好.netrc文件(遠程注冊數據文件)。與之有關的命令是ftp。.netrc包含注冊到網
絡上用ftp作文件轉移的遠程主機的數據。通常駐留在用戶當前目錄中,文件權限必須為060
0。格式如下:
machine對方主機名login對方主機內用戶名password對方用戶密碼macdef init ftp的操
作命令集。
5.2.2.3 創建匿名ftp
所謂匿名ftp,是指其他主機的用戶能以ftp或anonymous用戶進行數據收發而不要任何密碼。
建立方法如下:
1) 用sysadmsh創建ftp用戶,在passwd文件表示為:
ftp:x:210:50: :/usr/ftp:/bin/sh
.profile中的路徑為:
PATH=$HOME/bin:$HOME/etc
2) 在/usr/ftp目錄:
#創建匿名ftp所用的目錄
#mkdir bin etc dev pub shlib
#改變pub以外所有目錄權限
#chmod 0555 bin etc dev shlib
#改變pub目錄的所有者和同組者
#chown ftp pub
#chgrp ftp pub
#復制匿名ftp所執行文件
#cp/bin/rsh/bin/pwd/bin/1s bin
#改變所需執行文件權限
#chmod 011 bin/*
#查看所需偽設備的情況
#1/dev/socksys
#1/dev/null
#建立所需偽設備的驅動程度
#cd/usr/ftp/dev
#mkond null c 4 2
#mkond socksys c 26 0
#改變偽設備驅動程序的所有者、同組者
#chown ftp ftp/*
#chgrp ftp ftp/*
#復制共享文件
#cp/shlib/ilbe_s shlib
注意不要復制/etc/passwd、/etc/proup到etc下,這樣對安全具有潛在的威脅。此外給
ftp用戶加上密碼,不要告訴其他任何人。
5.2.2.4 限制.rhosts用戶等價文件(又叫受托用戶文件)
與之有關命令有rlogin、rcp、rcmd等。
所謂用戶等價,就是用戶不用輸入密碼,即可以相同的用戶信息登錄到另一台主機中。
用戶等價的文件名為.rhosts,存放在根下或用戶主目錄下。它的形式如下:
#主機名 用戶名
ash020000 root
ash020001 dgxt
…
如果用戶名為空,是所有用戶均等價。
5.2.2.5 限制hosts.equiv主機等價文件,(又叫受托主機文件)
有關的命令為rlogin、rcp、rcmd等。主機等價類似用戶等價,在兩台計算機除根目錄外的
所有區域有效,主機等價文件為hosts.equiv,存放在/etc下,它的形式如下:
#主機名 用戶名
ash020000
ash020001
…
當遠程使用ftp訪問本系統時,UNIX系統首先驗証用戶名和密碼,無誤查看ftpusers文
件,一旦其中包含登錄所用用戶名則自動拒絕連接,從而達到限制作用。因此我們只要把本
機內除匿名ftp以外的所有用戶列入ftpusers文件中,即使入者獲得本機內正確的用戶信息,
無法登錄系統。需對外發布的信息,放到/usr/ftp/bub下,讓遠方通過匿名ftp獲取。使用匿
名ftp,不需密碼,不會對本機系統的安全構成威脅,因為它無法改變目錄,也就無法獲得本
機內的其他信息。使用.netrc配置,需注意保密,防止泄露其他相關主機的信息。
使用用戶等價和主機等機這類訪問,用戶可以不用口令而像其他有效用戶一樣登錄到遠
程系統,遠程用戶可使用rlogin直接登錄而不需密碼,還可使用rcp命令向或從本地主機復制
文件,也可使用rcmd遠程執行本機的命令等。因此主種訪問具有嚴重的不安全性,必須嚴格
控制或在非常可靠的環境下使用。1998年美國發現的名的“蠕虫”病毒,由一個叫英爾(
morris)的年青人編寫的,在Internet網上流傳開,造成許多UNIX系統的癱瘓,損失達數億
美元,其重要的傳播手段之一就是利用了用戶等價和主機等價的配置。慎重使用(最好不用
)和經常檢查上述文件,會有效加強系統安全。
UNIX系統沒有直接提供對telnet的控制。但我們知道,/etc/profile是系統默認shell變
量文件,所有用戶登錄時必須首先執行它。如果我們在該文件首部增加如下幾條shell命令:
#設置中斷變量
trap' ' 0 1 2 3 4 5 15
umask 022
#獲取登錄終端名
dc=“'who am i |awk‘[prin $2]’`”
#檢查是否受限
grep $de /etc default/aaa >dev/null 2>&1
#如果受限
if [$?=“0”]
then
echo“請輸入密碼:\c”
read abc
#獲取正確密碼
dd=“grep root /etc/edfault/aaa|awk’[pint $2]’`”
#非法用戶發出警告信息到主控台
法[“$abc”!=$dd]
then
echo “非法用戶!”
echo“有非法用戶試圖登錄!”>tev/tty01
logname>/dev/tty01
#同時記載日記文件
echo“有非法用戶試圖登錄!\c”> >/usr/tmp/err
echo $dc> >/usr/tmp/err
logname > >/usr/tmp/err
exit;
fi;
fi
其中/etc/default/aaa是受限終端名的一個文本文件,root為密碼,它的內容如下:
root qwerty
ttyp0
ttyp1
ttyp2
ttyp3
ttypa
ttypb
…
這樣非法用戶即例獲得了合法的用戶名和密碼,也無法遠程使用。系統管理員定時閱讀
日記文件,注意控制台信息,就能獲得被非法訪問的情況,及時採取措施。如果用c語言實現
上述過程,把接受愛變成不可顯示,效果更佳。
5.2.3 加強對重要資料的保密
它主要包括hosts表、X.25地址、路由、連接調制解調器的電腦號碼及所用的通信軟件的
種類、網內的用戶名等,這些資料都應採取一些保密措施,防止隨意擴散。如可向電信部門
申請通信專用的電話號碼不刊登、不供查詢等。由公共的或普通郵電交換設備的介入,信
息通過它們可能被篡改或泄露。
5.2.4 加強對重要網絡設備的管理
路由器在網絡安全計劃中是很重要的一環。現在大多數路由器已具備防火牆的一些功能
,如禁止telnet的訪問、禁示非法的網段訪問等。通過網絡路由器進行正確的存取過濾是限
制外部訪問簡單而有效的手段。
有條件的地方還可設置網關機,將本網和其他網隔離,網關機上不存放任何業務數據,
刪除除系統正常運行所必須的用戶外所用的用戶,也能增強網絡的安全性。
總之,只要我們從現在做起,培養網絡安全意識,並注意經驗的積累和學習,完全可能
保証我們信息系統的安全、正常運行。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
Unix高級安全設置 三、常見Unix安全設置方案-2.Linux系列 (2002-12-03 06:02:01) Unix高級安全設置 三、常見Unix安全設置方案-1.Solaris系列 (2002-12-02 06:02:01) Unix高級安全設置 一、Unix歷史與發展 二、Unix典型安全隱患 (2002-11-29 06:02:00)
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |