欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

第十九章 系統(tǒng)安全

19.1 概論

有人說:「沒有不安全的系統(tǒng),只有懶惰的管理者?!姑總€系統(tǒng)都有可能會出現(xiàn)漏洞,而有安全性的漏洞產(chǎn)生時,發(fā)行的單位都會立即發(fā)布通告及修補的方式,而系統(tǒng)管理者的職責便是要隨時注意是否需要更新漏洞、隨時注意系統(tǒng)是否有異常的訊息。

FreeBSD 相對而言雖然是比較安全的操作系統(tǒng),但是有時候問題不是在操作系統(tǒng)本身,而是所安裝的軟件。在 FreeBSD 中常見的情形是安裝非 FreeBSD 內(nèi)定的軟件,但該軟件被收錄在 ports 中,F(xiàn)reeBSD 也會提出警告。因此,我們必須到 FreeBSD 的網(wǎng)站上查看是否有系統(tǒng)安全的消息,網(wǎng)址是 http://www.freebsd.org/security/index.html 。當發(fā)現(xiàn)問題時,可以依照發(fā)布的文件中所提供的修正方式來進行修補。

基本上只要計算機電源打開,系統(tǒng)就沒有安全的一天,更何況要連上網(wǎng)絡(luò)提供服務(wù)。系統(tǒng)安全的范圍很廣,從硬設(shè)備的保全、人員管理、網(wǎng)絡(luò)規(guī)劃、到系統(tǒng)本身的管理,我們并不打算說明如何制定一個安全性政策 ,也無法在這里說明所有系統(tǒng)安全的相關(guān)議題,我們所提及的只是筆者在 FreeBSD 使用上的建議。如果想要更多 FreeBSD Security 的信息,可以參考 FreeBSD Handbook,我們在安裝 FreeBSD 時己經(jīng)將 doc 安裝在 /usr/share/doc 中,你可以使用 lynx 來觀看 FreeBSD 的文件。例如:

# lynx /usr/share/doc/en_US.ISO8859-1/books/handbook/security.html

系統(tǒng)安全并不局限在如何防止他人入侵,對于防止系統(tǒng)內(nèi)部問題的產(chǎn)生一樣重要。主要的概念就是要讓我們的系統(tǒng)能正常的提供服務(wù),并且對于我們不想讓他人取得的信息加以保護。然而,為了系統(tǒng)安全往往必須限制某些功能的使用,而犧牲了便利性。身為系統(tǒng)管理者往往因為對于系統(tǒng)限制太多而受到來自使用者的抱怨,在取舍上本來就不是件容易的事。正因為如此,一個盡責的管理者在行事上必須具有高度的抗壓性及對安全性的偏執(zhí)。

19.2 系統(tǒng)管理

19.2.1 執(zhí)行程序的路徑

有沒有注意到當我們要執(zhí)行所在目錄中的某一個程序時,例如,在執(zhí)行所在目錄中的 myscript.sh,我們必須要打 ./myscript.sh。預設(shè)的 PATH 中,并沒有將所在目錄 "." 加入路徑中。如果把 "." 加入 PATH 的設(shè)定中,可能會產(chǎn)生安全性的問題。例如,如果使用者在 /tmp 中加入一個名為 ls 的 shell script,內(nèi)容為 rm -rf /usr,而我們又將 "." 加入路徑中,當以 root 在 /tmp 中執(zhí)行 ls 指令時,后果可想而知。因此,我們在執(zhí)行指令時,最好能指定路徑名稱,如 /bin/ls,并檢查在 shell 設(shè)定中是否有將 "." 加入路徑中:

# echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin

為了避免 /bin 及 /sbin 等重要執(zhí)行檔遭到修改,我們可以為這些檔案設(shè)定禁止修改的 schg flag:

# chflags schg /bin/*
# # chflags scgh /sbin/*

當然,設(shè)定了 schg 之后,我們要將 Kernel Security Level 調(diào)高到 1 以上,這樣連 root 都不可以移除 flags。不過設(shè)了 schg 之后,我們可能不能執(zhí)行一些指令,如 make world 等。

19.2.2 降低安裝軟件的風險

我們可以在網(wǎng)絡(luò)上找到許多免費的軟件,這些軟件固然可以讓我們在系統(tǒng)的使用上更加便利,但卻難保它們不會對系統(tǒng)安全造成任何危害。有的軟件可能存在某些漏洞,即使在我們安裝前尚無任何安全性的問題,日后還是有可能會被人發(fā)現(xiàn)軟件的缺陷。因此,我們應(yīng)該盡可能不要安裝一些雜七雜八的軟件,而安裝之后,一發(fā)現(xiàn)有安全性問題也要隨時更新。

不要直接在重要的服務(wù)器上安裝一套新的軟件,最好先在較不重要的計算機上測試,沒問題后再安裝。另外,在安裝軟件時,應(yīng)注意軟件取得來源是否可靠。如果軟件提供 MD5 或 PGP 的檢查,最好下載后先檢查,再解壓縮。而安裝軟件時,最好取得軟件的原始碼來編譯,我們可以瀏覽程序代碼,以了解其架構(gòu)。閱讀 Makefile 的內(nèi)容,了解軟件將安裝的確認位置,先確保程序不會在不該出現(xiàn)的地方產(chǎn)生。

19.2.3 kernel Security Level

FreeBSD 中有所謂的 Security Level,它掌控了系統(tǒng)核心的行為運作。只有超級使用者可以使用指令提高 Secruity Level,但不能降低它。如果要降低它必須在 rc.conf 中設(shè)定,并重開機。以下為各 Secruity Level 的意義:

我們可以使用 sysctl 來顯示或設(shè)定 Security Level:

# sysctl kern.securelevel

如果要將 Security Level 設(shè)為 1:

# sysctl -w kernel.securelevel=1

當我們將 Security Level 設(shè)為 1 以上時,我們會發(fā)現(xiàn)沒有辦法安裝新的 kernel (因為不能移除 schg flag),也沒有辦法使用 big5con 、X Window 等軟件。如果我們的 FreeBSD 只作為服務(wù)器,而不使用 big5con 或 X Window 的話,可以將 Security Level 的值調(diào)高一點。

如果要在開機時設(shè)定 Security Level,可以在 /etc/rc.conf 中以下面二行來設(shè)定:

kern_securelevel_enable="YES" # 是否啟動 Security Level
kern_securelevel="1" # level 從 -1 到 3

19.2.4 檢視系統(tǒng)記錄

/var/log 中,記錄了許多系統(tǒng)的信息,我們應(yīng)該要時常檢視它們。這些檔案如下表:

檔案 用途
adduser 使用 adduser 的記錄。
cron 定時排程的記錄。
maillog 郵件記錄。
messages 系統(tǒng)訊息記錄。
security 安全性記錄,如防火墻。

除了系統(tǒng)的記錄外,如果有提供其它服務(wù),會有更多的 log 數(shù)據(jù)。

如果我們有其它程序為留下 log 文件,最好在 /etc/newsyslog.conf 中設(shè)定定時備份壓縮,以免檔案過大。另外,這些備份的 log 檔在 newsyslog.conf 中設(shè)定權(quán)限 (mode) 時,最好設(shè)為 600,以避免其它使用者可以讀取。

FreeBSD 預設(shè)每天定時執(zhí)行一些分析的工作,并將結(jié)果寄給 root,建議你最好每天閱讀它們。我們可以在 /etc/mail/aliases 的開頭中加入下面這一行:

root: me@my.domain

將 me@my.domain 改成你的 email,設(shè)定完后,請執(zhí)行 newaliases 來讓設(shè)定生效。如此一來,所有寄給 root 的信件,都會自動轉(zhuǎn)給所設(shè)定的信箱。root 每天會收到 "daily run output" 及 "security check output" 這二封信,這是依照我們在 /etc/defaults/periodic.conf 中所設(shè)定的定時執(zhí)行工作輸出的結(jié)果。在 daily 執(zhí)行的任務(wù)中,預設(shè)并沒有設(shè)定定期清除 /tmp,原則上,在開機時系統(tǒng)會清理 /tmp。如果我們不常重開機,可以在 periodic.conf 中設(shè)定每天清理 /tmp。

19.2.5 數(shù)據(jù)的保全

UNIX 系統(tǒng)的安全防護中,第一道防線是計算機實體的安全防護,防止不相干的人接觸計算機及周邊設(shè)施。如果很不幸的,外人可接近系統(tǒng)時,第二道防線是系統(tǒng)密碼保護,我們將在下一章說明賬號的防護。然而,如果密碼泄露或被破解,還有第三道防線,就是在 UNIX 系統(tǒng)中的使用者權(quán)限及檔案權(quán)限控制。如果某一個使用者賬號遭到入侵,我們能限制其活動范圍及資源的存取。而第四道防線就是將重要的數(shù)據(jù)加以編碼保護,即使數(shù)據(jù)被使用者竊取,至少還多一道防護措施。而最后一首防線就是數(shù)據(jù)備份了,我們平時應(yīng)該有完善的備份計劃,一旦系統(tǒng)發(fā)生錯誤或是被摧毀,至少還可以復原。

我們先來談?wù)剶?shù)據(jù)編碼加密的方法,我們可以使用 crypt 這個指令來為我們的檔案加密。例如,有一個檔名為 myfile.txt 的檔案,我們使用的金鑰 (key)是 mykey 這個字符串,加密后的文件名為 myfile.cyp,可以使用下列指令:

# crypt mykey < myfile.txt > myfile.cyp

加密后,就可以將 myfile.txt 刪除。如果日后要解密,只要執(zhí)行下列指令:

# crypt mykey < myfile.cyp > myfile.out

crypt 是一個歷史悠久的編碼軟件,實際上并非十分安全,不過我們可以多加密幾次,讓檔案加密后再加密,只要記得所使用的 key 就好了:

# crypt mykey1< myfile.txt | crypt mykey2 | crypt mykey3 > myfile.cyp

如果要解密,只要再反過來即可:

# crypt mykey3 < myfile.cyp | crypt mykey2 | crypt mykey1 > myfile.out

除了 crypt 外,我們也可以使用其它比較好的編碼程序,例如 pgp。pgp 并非 FreeBSD 內(nèi)附的軟件,但我們可以使用 ports 來安裝它:

# cd /usr/ports/security/pgp
# make install

安裝完 pgp 之后,我們必須先產(chǎn)生 key pair。請執(zhí)行 pgpk -g

首先請在自己的家目錄中建立一個存放 pgp 金鑰的目錄。
$ mkdir ~/.pgp
$ pgp -kg
Pretty Good Privacy(tm) 2.6.3ia - Public-key encryption for the masses.
(c) 1990-96 Philip Zimmermann, Phil's Pretty Good Software. 1996-03-04
International version - not for use in the USA. Does not use RSAREF.
Current time: 2004/04/27 18:05 GMT

Pick your RSA key size:
1) 512 bits- Low commercial grade, fast but less secure
2) 768 bits- High commercial grade, medium speed, good security
3) 1024 bits- "Military" grade, slow, highest security
Choose 1, 2, or 3, or enter desired number of bits: 3 (輸入金鑰的長度)

Generating an RSA key with a 1024-bit modulus.

You need a user ID for your public key. The desired form for this
user ID is your name, followed by your E-mail address enclosed in
<angle brackets>, if you have an E-mail address.
For example: John Q. Smith <12345.6789@compuserve.com>
Enter a user ID for your public key: (輸入使用者名稱)
John Chung <john@mydomain.com>

You need a pass phrase to protect your RSA secret key.
Your pass phrase can be any sentence or phrase and may have many
words, spaces, punctuation, or any other printable characters.

Enter pass phrase: (輸入密碼)
Enter same pass phrase again: (再輸入一次密碼,以確認無誤)
Note that key generation is a lengthy process.

We need to generate 944 random bits. This is done by measuring the
time intervals between your keystrokes. Please enter some random text
on your keyboard until you hear the beep:
(隨機在鍵盤上輸入一些字,直到數(shù)字為零)
0 * -Enough, thank you.
..........................**** ..****
Pass phrase is good. Just a moment....
Key signature certificate added.
Key generation completed.

產(chǎn)生了 pgp key 之后,我們就可以使用 pgp 來編碼了。

指令 用途
pgp -kx user -o outfile 取出 user 的公開金鑰至outfile 中
pgp -ka keyfile 將公開鑰匙 keyfile 加入鑰匙環(huán)中
pgp -kvc user 印出 user 的公開金鑰
pgp -e textfile -o outfile user 加密 txtfile 至 outfile
pgp -s textfile -o outfile user 加簽 txtfile 至 outfile
pgp -d cypfile -o outfile 解密 cypfile 至 outfile

例如,我們要將 myfile.txt 加密,輸出檔為 myfile.cyp

# pgp -e myfile.txt -o myfile.cyp john

這里的使用者是 john,他的全名是 John Chung <john@mydomain.com>,我們只要輸入名字的部份關(guān)鍵詞即可。而解密可以使用:

# pgp -d myfile.cyp -o myfile.out

上面的指令會問你通行碼,輸入后即完成解密。目前 PGP 的主要應(yīng)用是在于網(wǎng)絡(luò)傳輸文件的加密,我們可以使用它來為 E-mail 加密,PGP 的用法很多,請自行 man pgp。

不過,即使加密也無法對抗數(shù)據(jù)的損毀,對于放在計算機中的重要數(shù)據(jù),必須維持完整的備份。就算系統(tǒng)都沒有問題,我們永遠不知道哪天會因為我們自己失手刪除重要數(shù)據(jù),或是數(shù)據(jù)遭到破壞。需要備份的不只是程序所產(chǎn)生的數(shù)據(jù),自己開發(fā)的程序也應(yīng)該備份。否則即便有了數(shù)據(jù)可以復原,而沒有程序可以執(zhí)行。

舉例而言,一個 BBS 站應(yīng)該要備份的除了使用者數(shù)據(jù)、精華區(qū)及看版文章外,BBS 本身運作的程序也要備份,畢竟那是我們精心撰寫或修改的結(jié)晶。備份的數(shù)據(jù)不應(yīng)該和運作的系統(tǒng)放在一起,不僅不應(yīng)放在同一臺計算機中,最好不要放在同一個房間、同一棟大樓、同一個城市,甚至同一個國家。

19.3 賬號管理

19.3.1 慎選合宜的密碼

對于系統(tǒng)安全的維護,密碼可以說是最基礎(chǔ)的防線,因此慎選密碼絕對是必要的。不管是超級使用者或是一般的使用者,在設(shè)定密碼時,都應(yīng)該注意一些原則:

一個好的密碼應(yīng)該是容易記憶,不必另外以紙筆記下的。例如,Gohiy!m (Get out here if you aren't me),或 ru4@xj4# (以注音輸入法輸入「記錄」)??傊褪且寗e人意想不到,這里提到的密碼也不要使用。

我們可以使用一些工具來找出系統(tǒng)中密碼太簡單的使用者,例如位于 /usr/ports/security/crack 這套軟件。

19.3.2 控制 root 的使用

在 FreeBSD 中,如果要使用指令 su 來取得 root 的權(quán)限,必須將該使用者加入 wheel 群組中。但是 su 并未對使用者執(zhí)行過的指令留下記錄,如果系統(tǒng)中有許多使用者,我們要針對不同使用者給予不同的權(quán)限,也不是 su 所能做到的,因此我們可以使用 sudo。關(guān)于 sudo 的使用,請參考第五章使用者管理中的「控制 root 的使用」。

root 賬號不應(yīng)該可以使用 telnet、ssh、或 ftp 的方式登入,在 /etc/ftpuser 中應(yīng)該有 root 的賬號來限制 root 使用 ftp 登入。而在 /etc/ssh/sshd_config 中,應(yīng)該有 PermitRootLogin no 的字樣來限制 root 使用 ssh 登入。我們注意的就是避免 root 能從網(wǎng)絡(luò)上直接登入,以減少安全性的問題。在 /etc/ttys 中,預設(shè)了 root 只能有某些 tty 登入系統(tǒng),這種允許 root 直接登入的 tty 設(shè)定中有 secure 的字樣。例如,ttyv0 指的是 console,該行設(shè)定最后有 secure,表示 root 可以從該 tty 登入。而 ttyp* 等是遠程登入的 tty,所以禁止 root 直接登入。

19.3.3 限制系統(tǒng)資源的使用

如果使用者登入系統(tǒng)后,執(zhí)行大量消耗 CPU、內(nèi)存或磁盤的程序,我們的系統(tǒng)將無法正常提供服務(wù),因此,限制使用者對于系統(tǒng)資源的存取是必要的。針對系統(tǒng)所提供的服務(wù),來限制系統(tǒng)的資源,并避免提供不必要的服務(wù)。例如,以一臺單純的網(wǎng)頁服務(wù)器、DNS 服務(wù)器而言,并不需要開放使用者遠程登入的服務(wù)。遠程登入提供使用者對系統(tǒng)有直接的操作,而往往也是漏洞開放的起點。一般使用者對于安全的要求不一定和系統(tǒng)管理者的期望相符,他可能會將密碼寫在自己辦公桌上、或是登入系統(tǒng)執(zhí)行一些不必要的程序。如果迫不得已一定要為使用者在系統(tǒng)上開一個賬號,也應(yīng)該視情況限制其使用遠程登入。如果只要為使用者開一個 FTP 賬號或是郵件賬號,只要設(shè)定使用者所用的 shell 為 /sbin/nologin 即可。例如,在 /etc/master.passwd 中,使用者 jack 的賬號數(shù)據(jù)如下:

jack:Bk5AI4MiRKDJ4:1000:1000::0:0:Tom Chang:/home/tom:/sbin/nologin

就算使用者不能登入,但能使用磁盤空間,所以還是要為使用者設(shè)定磁盤配額。雖說現(xiàn)在硬件價格便宜,但若每個使用者都有數(shù)百 MB 的郵件,集合起來也十分驚人。關(guān)于磁盤配額的設(shè)定,請參考第五章使用者管理中的「磁盤配額」。在限制使用者郵件容量方面,最簡單的方式就是將使用者的郵件從 /var/mail 中搬移到使用者的目錄中,再對使用者目錄做磁盤配額的限制。例如,使用者 jack 的家目錄位于 /home/jack,我們可以:

# cd /var/mail
# mkdir /home/jack/mail
# mv /var/mail/jack /home/jack/mail/
# ln -s /home/jack/mail/jack

如此就可以將使用者原本的郵件放在其家目錄下,我們只要將該檔案再鏈接到 /var/mail 中,如此就可以不必更動郵件軟件的設(shè)定,而達到限制空間的效果了。

如果你堅持要讓使用者登入的話,除了磁盤配額外,應(yīng)該要再為他們設(shè)定其它系統(tǒng)資源的使用限制,例名 CPU 的使用量、內(nèi)存等。我們可以經(jīng)由設(shè)定 /etc/login.conf 來做到。而 login.conf 的設(shè)定,可以參考安裝設(shè)定篇中,/etc 下的檔案介紹。

19.3.4 限制 crontab 及 at 的使用

使用者可以用 crontab 和 at 指令來安排自己定時執(zhí)行的工作。一般的使用者并不需要擁有 crontab 或 at 的執(zhí)行權(quán),我們可以為這個指令設(shè)限,只允許必要的使用者執(zhí)行。如果要限制使用 crontab,只需要在 /var/cron 目錄中,加入 allow 或是 deny 這個檔即可。例如,我們只允許少數(shù)幾個使用者執(zhí)行 crontab,我們可以在 /vra/cron 目錄中編輯文件名為 allow 的文字文件,內(nèi)容為該使用者的名稱。相對的,如果我們要限制少數(shù)幾個使用者執(zhí)行 crontab,只要編輯 deny 這個檔即可。而指令 at 的限制也是一樣,不同的只是允許執(zhí)行 at 指令的名單是 /var/at/at.allow,而拒絕的名單是 /var/at/at.deny。

19.4 網(wǎng)絡(luò)管理

19.4.1 關(guān)閉不必要的服務(wù)

一臺計算機可以提供的服務(wù)很多,我們要做的是在許可的范圍內(nèi),盡量減少所提供的服務(wù)。許多安全性的問題來自于非第三者 (Third Party) 所提供的軟件,如果沒有必要就停止這些服務(wù)吧。

我們先來看一下目前系統(tǒng)提供哪些服務(wù):

# netstat -a|grep LISTEN
tcp4       0      0  *.http                 *.*                    LISTEN
tcp4       0      0  *.https                *.*                    LISTEN
tcp6       0      0  *.telnet               *.*                    LISTEN
tcp4       0      0  *.telnet               *.*                    LISTEN
tcp6       0      0  *.ftp                  *.*                    LISTEN
tcp4       0      0  *.ftp                  *.*                    LISTEN
tcp4       0      0  *.imaps                *.*                    LISTEN
tcp4       0      0  *.pop3s                *.*                    LISTEN
tcp4       0      0  *.imap                 *.*                    LISTEN
tcp4       0      0  *.pop3                 *.*                    LISTEN
tcp4       0      0  *.smtp                 *.*                    LISTEN
tcp4       0      0  *.ssh                  *.*                    LISTEN
tcp6       0      0  *.ssh                  *.*                    LISTEN

這里所看到的就是目前系統(tǒng)中所提供的服務(wù)。我們可以檢視一下有沒有不必要的服務(wù),并將它移除。最明顯的例子是 sendmail,如果我們的系統(tǒng)不提供郵件處理,就將它停掉吧。即使我們要提供郵件服務(wù),也應(yīng)該限制寄信者的身份或來源地址。一臺沒有設(shè)限的郵件服務(wù)器,最后的結(jié)果是惡名昭彰,再也沒有機器會愿意轉(zhuǎn)送我們發(fā)送的信件。如果我們要停止 sendmail,只要在 /etc/rc.conf 中加入下面這一行:

sendmail_enable="NONE"

我們可以使用 sysctl 來設(shè)定當外部機器要使用我們沒有提供的服務(wù)時便記錄下來,例如有人嘗試掃我們的 port,或者我們沒有開放 telnet,卻有人嘗試從 port 23 連接,在 /var/log/messages 中便會留下記錄。這個設(shè)定只要執(zhí)行下列指令:

# sysctl -w net.inet.tcp.log_in_vain=1
# sysctl -w net.inet.udp.log_in_vain=1

如果要在開機時就啟動這個設(shè)定,可以將上面二行指令加到 /etc/rc.local 或是在 /etc/sysctl.conf 中加入下面二行:

net.inet.tcp.log_in_vain=1
net.inet.udp.log_in_vain=1

另外,F(xiàn)reeBSD 自從 4.4-Release 起,預設(shè)將 telnet 及 ftp 的服務(wù)也停止了。原因除了 telnet 本身有漏洞外(己修補),就是這些以明碼方式在網(wǎng)絡(luò)上傳送使者賬號及密碼的服務(wù)其實是系統(tǒng)安全的另一個潛在危險。我們可以檢視一下 /etc/inetd.conf,發(fā)現(xiàn)每一行前面都有批注符號 "#",也就是說目前根本沒有任何經(jīng)由 inetd 啟動的服務(wù),我們可以經(jīng)由 /etc/rc.conf 加入下列這一行來停止 inetd 服務(wù):

inetd_enable="NO"

如果我們必須使用遠程登入來管理系統(tǒng),不要使用 telnet,請使用 ssh。ssh 對于在網(wǎng)絡(luò)上流動的數(shù)據(jù)有加密保護,比起 telnet 安全多了。如果真的有必要使用 inetd 來啟動某些服務(wù),例如 ftp,建議將使用情形記錄下來 。以 ftpd 為例,F(xiàn)reeBSD 在執(zhí)行 ftpd 時,內(nèi)定加上參數(shù) -l,我們要做的只是修改 /etc/syslog.conf。編輯 /etc/syslog.conf 并在該檔案的最后加入下面這二行:

!ftpd
*.*                                /var/log/ftpd.log

這個設(shè)定會讓所有登入成功及失敗的記錄都寫在 /var/log/ftpd.log 這個檔案中,我們必需先手動建立 ftpd.log 這個檔案:

# touch /var/log/ftpd.log

因為我們已經(jīng)修改了 /etc/syslog.conf ,所以必須重新啟動 syslogd。syslogd 是 FreeBSD 專門記錄系統(tǒng)信息的 daemon,您可以使用下列指令重跑 syslogd:

# kill -1 `cat /var/run/syslogd.pid`

由于每次使用 ftp 的情形都會被記錄下來,為了避免 log 檔肥大,我們在 newsyslog.conf 中加入 ftpd.log 的備份移轉(zhuǎn):

/var/log/ftpd.log       600  5  500  *  Z

另外,對于 ftpd 還有一個小建議,為了避免使用者 ftp 登入后可以到系統(tǒng)所有數(shù)據(jù)夾,我們最好將使用者的活動范圍限制在自己的家目錄中,這就叫做 chroot。方法很簡單,只要建立一個檔案 /etc/ftpchroot,內(nèi)容為使用 chroot 的使用者名稱即可。

其它的 inetd 服務(wù),能不用就不要用,尤其是 telnet。如果要管理計算機,我們可以使用 ssh。

為了防止一些 DoS (Deny of Service),建議最好把 ICMP 重導向 (redirect) 的封包丟棄,我們可以在 /etc/rc.conf 中加入以下的設(shè)定:

icmp_drop_redirect="YES"  # YES 表示丟棄 ICMP REDIRECT 封包
icmp_log_redirect="YES"    # YES 表示將丟棄的封包記錄下來

19.4.2 使用 ssh

ssh 是一個好用的軟件,F(xiàn)reeBSD 安裝預設(shè)啟動 sshd。我們可以檢查一下它是否己啟動:

# netstat -a | grep ssh

如果沒有,請在 /etc/rc.conf 中加入下面這一行:

sshd_enable="YES"

sshd 預設(shè)并未將使用者登入的數(shù)據(jù)記錄下來,不過我們可以修改 /etc/syslog.conf 來記錄,請找到 security 的項目,并將它修改成下面這樣:

security.*;auth.info                /var/log/security

如此一來,當使用者利用 ssh 登入時,便會記錄在 /var/log/security 中。

19.4.3 TCP Wrapper

對于 inetd 所提供的服務(wù),我們可以使用 TCP Wrapper 來限制 TCP 協(xié)議聯(lián)機來源。讓我們來檢視一下 /etc/hosts.allow 這個檔案:

ALL : ALL : allow

ftpd : localhost : allow
ftpd : .nice.guy.example.com : allow
ftpd : .evil.cracker.example.com : deny
ftpd : ALL : allow

語法:

daemon_list : client_list : option

其中 daemon_list 是我們在 /etc/services 中定義的服務(wù)名稱,client_list 是來源地址,option 則是我們要給的權(quán)限,簡單的設(shè)定如 allow(允許)、deny(拒絕)。ALL 可以代表所有服務(wù)或來源。這個檔案的設(shè)定是以先入為主 (first match wins) 的方式,也就是以先設(shè)定的項目為優(yōu)先。

在檔案開頭的地方有一行是 ALL : ALL : allow,表示預設(shè)所有服務(wù)允許所有來源使用。如果我們要使用 TCP Wrapped,必須先將該行批注,再針對每一個服務(wù)來設(shè)定開放的權(quán)限。以 ftpd 為例,假設(shè)除了 bad.cracker.com 以外,其它人都可以使用 ftpd 服務(wù),我們可以這樣設(shè)定:

ftpd : bad.cracker.com : deny
ftpd : ALL : allow

又如,假設(shè)我們的 telnet 只要讓 192.168.0.1 及 mydomain.com 網(wǎng)域下的計算機可以使用:

telnetd : 192.168.0.1 .mydomain.com : allow
telnetd : ALL : deny

TCP Wrapped 只針對 TCP 服務(wù),如果我們要功能更強大的防火墻,可以使用 ipfw。

19.4.4 ipfw

ipfw 是 FreeBSD 內(nèi)附的防火墻軟件,它直接針對 IP Layer 來做網(wǎng)絡(luò)控制,因此可以說是最有效的方法。在使用 ipfw 之前,我們必須先重編核心。關(guān)于防火墻的設(shè)定,請參考「NAT 及防火墻」一章的說明。

19.5 漏洞修補

FreeBSD 總部會不定期公布己知的安全漏洞,并提供修補方式,我們必須時常到 FreeBSD 的網(wǎng)站注意關(guān)于安全性的消息,該網(wǎng)站的位置是 http://www.freebsd.org/security/index.html。

連到上述頁面后,我們可以看到在 FreeBSD Security Advisories 區(qū)段中,有下列項目:

Advisories are always signed using the FreeBSD Security Officer PGP key and are archived, along with their associated patches, at our FTP CERT repository. At the time of this writing, the following advisories are currently available (note that this list may be a few days out of date - for the very latest advisories please check the FTP site):

  • FreeBSD-SA-04:07.cvs.asc
  • FreeBSD-SA-04:06.ipv6.asc
  • FreeBSD-SA-04:05.openssl.asc
  • FreeBSD-SA-04:04.tcp.asc

FreeBSD 5.2.1-RELEASE released.

  • FreeBSD-SA-04:03.jail.asc
  • FreeBSD-SA-04:02.shmat.asc
  • FreeBSD-SA-04:01.mksnap_ffs.asc
  • FreeBSD 5.2-RELEASE released.

我們可以看到自從 FreeBSD 5.2.1 release 之后,F(xiàn)reeBSD 公布了四個安全性修補,我們可以打開這些連結(jié),并了解這些修補的用途。例如 FreeBSD-SA-04:07.cvs.asc,顧名思義是用來修補 FreeBSD 內(nèi)附的 CVS 軟件 (一種用來架設(shè)源始碼管理服務(wù)器的軟件) 漏洞所使用,如果您并未架設(shè) CVS,您可以忽略這個修補檔。

我們現(xiàn)在以 FreeBSD-SA-04:04.tcp.asc 來做修補的范例。首先看到這個公告一開頭的部份:

FreeBSD-SA-04:04.tcp Security Advisory
                    The FreeBSD Project

                    Topic: many out-of-sequence TCP packets denial-of-service

                    Category: core
                    Module: kernel
                    Announced: 2004-03-02
                    Revised: 2004-03-16
                    Credits: iDEFENSE, Alexander Cuttergo
                    Affects: All FreeBSD releases
                    Corrected: 2004-03-02 17:19:18 UTC (RELENG_4)
                    2004-03-16 13:47:33 UTC (RELENG_5_2, 5.2.1-RELEASE-p2)
                    2004-03-15 20:02:06 UTC (RELENG_5_1, 5.1-RELEASE-p15)
                    2004-03-02 17:26:33 UTC (RELENG_4_9, 4.9-RELEASE-p3)
                    2004-03-02 17:27:47 UTC (RELENG_4_8, 4.8-RELEASE-p16)
                    2004-03-17 10:50:45 UTC (RELENG_4_7, 4.7-RELEASE-p26)
                    CVE Name: CAN-2004-0171
                    FreeBSD only: NO

這里的信息包含了主旨(Topic)、分類(Category)、影響的模塊名稱(Module)、公布時間(Announced)、修正日期(Revised)、發(fā)現(xiàn)者(Credits)、受到影響的版本(Affects)、已修正的版本(Corrected)、漏洞編號(CVE Name, Common Vulnerabilities and Exposures)、是否只發(fā)生在 FreeBSD(FreeBSD only)。

如果我們的系統(tǒng)是受影響的版本之一,我們必須進行漏洞修補。在上述開頭信息之后,會有一些說明,包含這個模塊的背景(Background)、問題描述(Problem Description)、所產(chǎn)生的影響(Impact)。我們可以先讀一下這個部份,以了解這個漏實際上所帶來的影響。

接下來會有避免發(fā)生的方法(Workaround)、及解決之道(Solution)。Workaround 的意思是如果不進行修補,我們是否有方法可以避掉這個問題。例如當 CVS 服務(wù)器有漏洞時,可能的 workaround 方式是停止 CVS 的運作,而 Solution 是告訴我們下載修補程序的方式及修補方式。以下我們就以這個范例來說明如何進行漏洞修補:

V.   Solution

                    Do one of the following:

                    1) Upgrade your vulnerable system to 4-STABLE, or to the RELENG_5_2,
                    RELENG_4_9, or RELENG_4_8 security branch dated after the correction
                    date.

                    OR

                    2) Patch your present system:

                    The following patch has been verified to apply to FreeBSD 4.x and 5.x
                    systems.

                    a) Download the relevant patch from the location below, and verify the
                    detached PGP signature using your PGP utility.

                    [FreeBSD 5.2]
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp52.patch
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp52.patch.asc

                    [FreeBSD 5.1]
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp51.patch
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp51.patch.asc

                    [FreeBSD 4.7, 4.8, 4.9]
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp47.patch
                    # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp47.patch.asc

                    b) Apply the patch.

                    # cd /usr/src
                    # patch < /path/to/patch

                    c) Recompile your kernel as described in
                    <URL:http://www.freebsd.org/handbook/kernelconfig.html> and reboot the
                    system.

我們可以選擇下列二種方式其中之一來進行修補,第一種方式是將您的 FreeBSD 升級至 4-STABLE、RELENG_5_2、RELENG_4_9、或 RELENG_4_8。第二種方式是我們最常用的方法,也就是下載修補的原始碼。通常我們必須依照所使用的 FreeBSD 系統(tǒng)來下載不同版本所使用的補丁。上述范例中,其修補文件分別供 FreeBSD 5.2, 5.1, 4.7, 4.8, 及 4.9 使用。

我們以 FreeBSD 5.2 (含 5.2.1) 為例,首先,我們必須下載更新檔,請使用下列指令下載:

# cd /usr/src
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-04:04/tcp52.patch

我們將檔案下載到 /usr/src 目錄下,這個檔案是修補的檔案,而 tcp52.patch.asc 是用來檢查 pgp 簽名的簽名檔,如果您不使用 pgp 檢查所下載的檔案是否正確,您可以忽略這個檔案。

我們所下載的 patch 檔是將漏洞修補前及修補后的原始碼差異存成一個檔案,接下來我們必須將這個差異和我們系統(tǒng)中的原始碼合并。因此,我們系統(tǒng)中一定要安裝 FreeBSD 的原始碼,也就是 /usr/src 這個目錄下有原始碼的數(shù)據(jù),如果您在安裝 FreeBSD 時并未安裝原始碼,您可以使用 /stand/sysinstall 來安裝原始碼套件。接下來我們就可以將所下載的檔案合并到系統(tǒng)中:

# cd /usr/src
# patch < /usr/src/tcp52.patch

最后,依照這個修補檔的說明,我們必須重新編譯系統(tǒng)核心,請參考「編譯核心」一章,并于安裝新核心之后重新開機即可。并非所有修補都必須重新編譯系統(tǒng)核心,有的修補可能要重新編譯其它非核心程序,甚至整個系統(tǒng),我們必須按照 Solution 的說明執(zhí)行適當?shù)牟襟E。