這篇文章是在REDHAT 6.1 FOR SPARC 和INTEL基礎上進行解釋的,也對MANDRAKE 7.0 FOR INTEL 做了測試
目錄:
准備工作
初始化操作系統安裝
安裝SSH Bastille: 介紹,運行,檢查和問題
安全工具和系統管理軟件
補丁和LOG記錄
完整性檢查和備份
安裝,測試和安全安裝應用程序
啟動
常規維護
其他注意點
1,准備工作
-使事情盡量簡單化:最好的期望是在主機上只運行一或者兩個服務。並且把運行 的服務盡量在分散在多台機器,因為這樣要比在所有事情都同在一台機器上運行 要安全的多,這樣可以方便的隔離應用程序,使其更牢固,更容易查找錯誤和 升級軟硬件。一切運行的規則是你所需服務的最低限度要求。 -硬件部分:如果你有Sun/SPARC硬件,考慮通過串行口控制台(console)來進行 安裝,去掉鍵盤屏幕和幀緩沖區(framebuffer),避免使用X11並是使用熟悉的 命令行進行操作。
-安全地下載:安全過程需要在一個隔離的或者沒有路由網絡來安裝,在這種情 況下,你可以通過控制台以ROOT身份FTP到系統,或者從新的系統中下載。如果 你沒有隔離的網絡(這通常不推薦),那就改變ROOT的密碼以方便的下載文件, 完成後再次改變密碼,馬上關閉網絡系統。這樣就減少存在潛在攻擊者危險的 機會。
-明確知道系統究竟要干什麼和硬件將被怎樣配置等等,著重注意一些如要調用 RPC的應用程序。
-理解應用程序是怎樣工作是非常重要的一步(他們使用的端口,設備和文件)。 判斷使用某些程序有可能所承受的安全風險。
2,安全操作系統 在x86硬件上,屏幕,鍵盤和鼠標是必須的,從CDROM或者啟動軟盤啟動並選擇 安裝。
在SPARC硬件上,整個的安裝可以不使用屏幕和鍵盤(稱為"headless sever"), 連接串口控制台,開機,通過發送Stop-A(如~#,~%b或者F5,具體是依據你是使用 tip,cu或者vt100終端)出現OK提示符,再開始安裝過程:boot cdrom -安裝。
REDHAT的安裝過程有點不符常理並且安裝版本的不同,選項也各有不同:
-理論上"定制安裝(custom install)"是用來安裝一些需要的模塊,但其中有點 不正常,如FTP服務器沒有安裝(在SPARC版本中,可以使用rpm-i /mnt/cdrom/RedHat/RPMS/wu-ftpd-2.6.0-1.sparc.rpm)來進行修正。
-Gnome永遠是被安裝的,即使你選者KDE或者選者不包括GNOME。可以使用startx 來啟動GNOME和使用kde來啟動KDE -在所有安裝模式中,國際鍵盤映射對於命令行和GUI沒有進行正確的設置。
MANDRAKE 7.0安裝中沒有這些問題
在此,選擇server或者custom安裝,設置主機名,IP參數,時區等等。不要激活 任何名字服務如NIS和NFS,選者手工磁盤分區:
-考慮一個獨立的,容量較大的/var文件系統作為syslog/web/news/proxy服務 或者防火牆過濾器。
-一些包含很多數據的服務,如WEB,FTP,應該使用獨立的磁盤來進行數據處理。
-如果你不想要以只讀方式來安裝(mount)分區,並且沒有LOG記錄數據和應用 程序數據,就考慮把整個啟動盤放在根目錄下。
-對於2G磁盤的分區建議:500MB/(root+var),200MB交換分區,1300MB/usr分區.
-對於1G磁盤的分區建議: 300MB/(root+var),200MB交換分區,500MB/usr分區.
-推薦使用8G大小來作為LOG服務器空間數據:100MB/root,300MB/交換分區, 800MB/usr,6.9G/var
-請查看[9]來獲得更多的磁盤分區討論
為ROOT設置一個強壯的密碼(至少8個由字母,數字和標點符號組成),建立一個額外 的test用戶,因為你不能通過以ROOT身份來登錄網絡."init level"必須設置為3 級(是命令行登錄級別),這比設置為5(圖形形式登錄級別)更安全,如果確實需要 GUI,可以使用startx手工來啟動GUI系統.
通過串行端口登錄對於安裝故障檢查和熟悉命令行是很有幫助的.想要在X86硬件 上通過串行口A來進行登錄,可以在/etc/inittab增加下面的一行文字: con:23:respawn:/sbin/getty ttyS0 VC 上面的設置對於SPARC機器是不需要的,因為SPARC機是自動配置好這工作的,如果 要允許通過這個串行口來允許ROOT登錄,則必須在/etc/securetty增加ttsS0.
3,安裝SSH
安裝SSH,對於保護SHELL很有好處.Bastille can do this.但你需要有INTERNET 訪問能力,我在SPARC問題上存在問題並且更喜歡知道在編譯SSH時到底使用了什麼 選項.I had problems with SPARC, and prefer to know exactly what options are used to compile SSH.
對於Linux中'ssh1'和'OpenSSH'有兩個KEY來實施,這裡我們使用ssh1來做例子, OpenSSH在某些方法上更具戲劇性,但ssh1還支持securid,請在[7]這裡查看SSH 的具體討論.
可以使用下載源代碼和RPM來獲得SSH(可以在[7]下查看網站列表:
1)源代碼使用下面的方法來安裝:
zcat ssh-1.2.27.tar.gz | tar xf - cd ssh-1.2.27; ./configure --prefix=/usr --without-none --without-rsh --without-idea make && make install
2)RPMS使用下面的方法來安裝(下面是SPARC的例子):
rpm -i ssh-1.2.27-7i.sparc.rpm ssh-clients-1.2.27-7i.sparc.rpm
rpm -i ssh-extras-1.2.27-7i.sparc.rpm ssh-server-1.2.27-7i.sparc.rpm
拷貝一啟動文件(如sshd)到/etc/rc.d/init.d/ssh並且設置連接。
正確配置/etc/ssh_config文件(查看[7]),使只有有"知名公共鑰匙"(known public keys) 命名的主機可以訪問,並且不啟用rhosts認證方式來避免信任方式來訪問,只 允許特定的用戶和主機來訪問SSH。
拒絕守護程序(daemon)帳號訪問系統,如確定下面守護程序帳號不能訪問系統: DenyUsers daemon bin sync adm lp shutdown halt mail news uucp nobody operator sympa, squid, postgres, gopher, postfix, xfs.
-------------------------------------------
4,Bastille
介紹
Bastille是一套開放源代碼腳本,設計目的是用來使REDHAT 6.0或者6.1系統安裝 更強壯更安全(此腳本將很快支持6.2版本)。第一版本在1999年的12月推出並 作出了一些重大的改進。現在使用的2000年3月15號V1.0.4版本。
那Bastille究竟做什麼樣的工作呢:不起用不需要的守護程序,起用和改進LOG記 錄,提高SUID和文件權限的嚴格使用性,提高帳號安全問題和甚至為DNS服務提供 chroot環境。但請注意Bastille在其他如SUSE變種的LINUX上不適用,因為各個 LINUX系統變種有自己的運行機制和不同的啟動文件。
Bastille啟用自動化的和交互的接口,基於文本菜單的交互式安裝能非常有幫助的解釋 有關的各種選項和生成用來在下一步實際配置收緊系統安全使用的配置文件 (tuigenerated-raw-config)。此配置文件可以編輯和拷貝到其他同樣系統中 以用來更快的配置系統安全。
--運行Bastille
1,下載Bastille並展開到/root目錄下。
2,在這階段停止網絡接口,如下面所示(接口名字在各個系統中各不相同): ifconfig eth0 down
3,運行Bastille交互式腳本: CD /root/run-Bastille; ./InteractiveBastille.pl
注意:在SPARC機器上此交互腳本不能很好的工作,會出現下面的錯誤提示: Can't load './Curses.so' for module Curses: ./Curses.so: ELF file data encoding not big-endian at /usr/lib/perl5/5.00503/sparc-linux/DynaLoader.pm line 169.
可以按照下面的方法來進行修補以在SPARC機器上工作:
從CPAN中下載Curses-1.02.tar.gz並按如下方法來進行補丁安裝:
perl Makefile.PL; make && make install 在改變至Bastille目錄和去掉Curses庫:
CD /root/run-Bastille; mv Curses.* /tmp; 在再次運行InteractiveBastille.pl腳本。
InteractiveBastille.pl的運行可以逐步的來更安全的設置,提示那些你系統 需要更加加強哪些不需要,你可以通過提示來關閉不需要的守護程序,起用LOG 記錄,加強SUID和文件的權限設置,提高帳號安全和為DNS服務提供chroot環境。
下面的這個腳本默認接受的配置(查看tuigenerated-raw-config):
--SUID:除了ping和Traceroute關閉所有SUID屬性工具,啟用shadow密碼檔。
--檢查並設置無第二個UID為0的帳號。
--沒有LILO密碼
--不啟用編譯器(只有ROOT可以訪問)。
--守護程序設置:關閉SENDMAIL服務,並通過cron來運行SENMAIL,下載SSH, 啟用Apache,CGI,關閉打印,關閉匿名FTP服務。
--關閉所有RPC服務,即使你需要使用KDE。
回顧你所選擇的設置,可以通過view等編輯器來查看tuigenerated-raw-config 配置文件。
4,下面是運行實際的系統安全收緊操作:
./BackEnd.pl < tui-generated-raw-config > screen.log
檢查結果
--檢查安全收緊操作的LOG記錄:/root/bastille-action-log
--重新啟動
--以ROOT身份登錄並檢查進程列表,其結果應該是如下所示:
tests# ps-ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 10 17:07 ? 00:00:03 init [3]
root 2 1 0 17:07 ? 00:00:00 [kflushd]
root 3 1 0 17:07 ? 00:00:00 [kupdate]
root 4 1 0 17:07 ? 00:00:00 [kpiod]
root 5 1 0 17:07 ? 00:00:00 [kswapd]
root 6 1 0 17:08 ? 00:00:00 [mdrecoveryd]
root 276 1 1 17:08 ? 00:00:00 syslogd -m 0 -a /home/dns/dev/lo
root 286 1 0 17:08 ? 00:00:00 klogd
root 301 1 0 17:08 ? 00:00:00 crond
root 310 1 3 17:08 ? 00:00:00 /usr/sbin/sshd
root 369 1 0 17:08 ttyS0 00:00:00 login -- root
root 370 1 0 17:08 tty1 00:00:00 /sbin/mingetty tty1
root 371 1 0 17:08 tty2 00:00:00 /sbin/mingetty tty2
root 372 1 0 17:08 tty3 00:00:00 /sbin/mingetty tty3
root 373 1 0 17:08 tty4 00:00:00 /sbin/mingetty tty4
root 374 1 0 17:08 tty5 00:00:00 /sbin/mingetty tty5
root 375 1 0 17:08 tty6 00:00:00 /sbin/mingetty tty6
root 378 369 1 17:08 ttyS0 00:00:00 -bash
root 390 378 0 17:08 ttyS0 00:00:00 Ps -ef
--檢查網絡連接,如:
# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:ssh *:* LISTEN
raw 0 0 *:icmp *:* 7
raw 0 0 *:tcp *:* 7
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] DGRAM 239 /dev/log
UNIX 0 [ ] STREAM CONNECTED 108 @0000000f
UNIX 0 [ ] DGRAM 241 /home/dns/dev/log
UNIX 0 [ ] DGRAM 353
UNIX 0 [ ] DGRAM 282
UNIX 0 [ ] DGRAM 254
BASTILLE存在問題和限制性
Bastille Linux hardening腳本存在一些應該注意的問題:
--此腳本運行只運行在一個干淨的原始的安裝系統。
--Bastille腳本不允許你使用Ctrl-C來退出並且窗口必須和菜單的大小相符合。
--在"MiscellaneousDaemons.pm Module 10 of 16" 後的默認菜單指向是"back" 其實NEXT,可以使用手工來選擇"next".
--配置系統不足之處:
--一些不需要的帳號如uucp, games, LP, operator, xfs沒有移除。而且它們 SHELL沒有設置為/dev/null或者/bin/false.
--xfs(X字符服務系統)還在運行,當然X FONT SERVER不存在重大安全漏洞, 但還是有一些細小的漏洞(可以在BUGTRAQ中發現XFS漏洞的描述)。 修補方法:不啟動XFS服務並重新啟動:chkconfig
--del xfs 重點:你不要在控制台上長期使用KDE或者X11服務,但偶爾也需要使用到,所以 你必須在你需要的時候手工啟動FONT服務/etc/rc.d/init.d/xfs start
--許多系統帳號需要增加到/etc/ftpusers文件中,如下所示: sympa, squid, postgres, gopher, postfix, xfs.
--如果SSH已經安裝,改變sshd_config (DenyUser) 配置文件,禁止/etc/ftpusers 配置文件中的賬號登錄。
--改變在/etc/passwd 文件中的ROOT描述,把"root" 改為 "root MACHINENAME" 。
--此Bastille腳本沒有使用CHROOT配置來設置FTP,CHROOT環境可以把用戶從系統 文件中隔離開來。使用CHROOT環境來設置FTP服務是非常有用的。
----------------------------------------------------
5,安裝工具和Sysadmin系統管理軟件
在這階段將安裝標准工具。這些工具必須以近個編譯好和在其他系統上測試過的。 這些工具一般在CD上或者通過FTP進行作為tar文件來傳遞。 下面是一些工具可以通過linuxconf來進行設置:
--環境:/.cshrc,/.profile,/.bashrc,/etc/profiel,/etc/bashrc:設置umask 077 權限或者027權限。
--Mount 磁盤:為了減少木馬的危險和未授權的修改,在/etc/vfstab必須以"nosuid" 方式在mount /var目錄數據或者其他數據。
--在/etc/hosts文件中設置鑒定過的主機列(那些不需要通過DNS解析的主機)。
--DNS客戶端:在/etc/resolv.conf中增加域名和DNS服務器。在/etc/nsswitch.conf 文件中增加主機的DNS入口(並移除NIS和NISPLUS入口)。
--鍵盤安全:如果你的主機在一個安全的房間,你可以保留鍵盤,但必須禁止如下 部分的功能鍵(這就是說如果你想要你的主機有物理上的安全就存在一定的不便利)。
--在SPARC機器上:在/etc/sysconfig/init文件中enable/disable STOP-A鍵 盤順序以立即到eprom中的提示。
--disable啟動時候的交互熱鍵,在/et/sysconfig/init文件中設置PROMPT=no,
--在x86機器上:如果你要允許ctrl-alt-delete可以關閉系統,可以在 /etc/inittab文件中加入如下命令語句:
# Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now 重新啟動系統或者使用"killall -HUP init"來激活命令。
--使用默認路由:在/etc/sysconfig/network中增加路由器的IP地址。
--在/etc/inetd.conf文件中,應該先關閉所有服務,在選擇一些你必須使用的 服務。並要對/etc/hosts.allow和/etc/hosts.deny進行控制。
--EMAIL:如果主機不要求在子網外發送郵件,就不需要配置MAILHOST別名,如果你 不需要任何類型的EMAIL,你需要刪除/usr/lib/sendmail程序。否則:
--編輯/etc/mail/aliases文件(至少要對ROOT指向一個真實的地址)。
--在/etc/hosts中設置MAILHOST並且為這台機器增加一 hostname.YOURDOMAIN.COM別名。
--在/etc/mail/sendmail.cf中設置如下來保證所有向外的EMAIL流經MAILHOST 這台機器: Dj$w.YOURDOMAIN.COM. [only needed if sendmail complains]
DSmailhost [smart relay]
DRmailhost [send emails with no host/domain here]
DHmailhost [skip this if local delivery is allowed]
O FallbackMXhost=mailhost
--發送一封測試信檢測配置: mail -v -s test_email root
--如果有多人管理一台比較敏感的主機時,考慮使用sudo工具,請看[9].
--如果在系統中允許普通用戶的帳號,考慮對下面工具作出相應的限制:
--cron:通過編輯配置/etc/cron.allow和cron.deny(請看[9])。
--at: 通過編輯配置/etc/al.allow和at.deny.
--ftp: 不允許使用在/etc/ftpusers中列出的用戶。
--ssh:/etc/sshd_config(查看AllowUsers DenyUsers AllowHosts DenyHosts 條目).
--常規的inetd中的服務:/etc/hosts.allow和hosts.deny.
--文件系統組:/etc/groups和使用文件的權限等。
-----------------------------------------------------------
6,補丁和LOG記錄
補丁程序
對於Red Hat 6.1,補丁可以在下面的站點裡找到:
http://www.redhat.com/errata. 其中提供安全建議,BUG修補和工具包升級。
Mandrake在下面的站點提供補丁程序和一些升級程序: http://www.linux-mandrake.com/en/fupdates.php3,Mandrake提供一些在KDE 下不錯的補丁程序檢查和安全工具。
一般你如果升級下載的補丁,可以采用下面的命令進行安裝和更新: rpm - Uvh filename.rpm 那裡還有一些特殊的內核補丁程序用來增加內核系統的安全性,如crypto,請看[9].
配置LOG記錄:
syslog logging:
通過Bastille用來增加syslog配置是很有幫助的,但這適用 於本地LOG的主機或者LOGHOSTS(專門的syslog服務器). syslog "clents":建議大多數重要的主機把LOG指向一專門的syslog服務器-- loghost,可以通過在/etc/syslog.conf中進行如下配置:
# syslog.conf for clients
#
# send all messages to "loghost": *.* @loghost *.emerg *
# Save boot messages also to boot.log local7.* /var/log/boot.log
# Log all logins to /var/log/loginlog auth.*;user.*;daemon.none /var/log/loginlog
# Log additional data to the Alt-F7 and Alt-F8 screens (TTY 7 and 8) *.info;mail.none;authpriv.none /dev/tty7 authpriv.* /dev/tty7 *.warn;*.err /dev/tty7 kern.* /dev/tty7 mail.* /dev/tty8
###########
Syslog "loghost" :在loghost主機上設置一巨大的/var磁盤空間來存放 LOG文件. 按下面的描述來設置幾個LOG記錄:
--Root cron條目:
--LINUX上的cron程序比UNIX的要好,/etc/crontab文件中包含標准的 運行腳本,可以以小時,日,星期,月來運行(當然以ROOT身份)。
--logrotate可以在/etc/logrotate.conf中配置,它是用來修剪整理 系統和應用程序的LOG記錄的。應用程序可以增加腳本到/etc/logrotate.d, 默認狀況下syslog, ftp, apache, cron 和 linuxconf應用程序有相應 的條目。此特征確實比有些商業的UNIX要好。建議按如下方式來改變 /etc/logrotate.conf中的默認條目以得到更好的LOG控制:
rotate 30 [保持 30 星期的LOG記錄-前提是你有足夠的空間] compress [壓縮一些老的LOG記錄] 並在/var/log/wtmp和/var/log/lastlog部分增加設置'rotate 24',這樣 可以使記錄和最後LOGIN登陸信息保存兩年。
--使用rdate工具來設置時間日期(考慮使用NTP,它更精確,但比較復雜, 會增加額外的帶寬和安全問題)。
## 同步時間: 0,15,30,45 * * * * /usr/bin/rdate timehost1 >/dev/null 2>&1
# 在一周內每小時處理郵件隊列: 0 * * * 1-5 /usr/lib/sendmail -q
文件權限:
設置更嚴格的權限,並限制ROOT部分工具或者不啟動這些工具:
chmod u-s /usr/sbin/sendmail
#不適合郵件網關機器或者多用戶主機。
chmod 400 /.shosts /etc/sshd_config /etc/ssh_known_hosts 建立文檔記錄
在文本文件如/etc/mods中對配置進行歸檔,對每一次改變配置,需對日期 改動者,影響文件,描述記錄和更新在歸檔文件中,如: cat > /etc/mods <
7,完整性檢查和備份
把系統備份在兩盤磁帶中,一盤放在安全的地方(最好是刻盤)。 在這階段,我們需要對安裝的文件使用安全的hashing(散列)算法進行完整性檢查, 初始化它的數據庫並運行合格的檢查以便來監視以後的改變。如果可能,把主數據 庫存放在離線的另外一台機器上,或者寫入一次性媒質上。 對於數據完整性的我們需要那些項目?
--下面的意思是RPM可以用來報告文件的改變(但本人有點對這句英文不理解, 所以只好貼上原文,慚愧): The RPM commands also be used report changes installed files "poor man's tripwire": for file in $(rpm -qa); do -V $file; done > rpm_changes 它可以打印出一列表,指示Size, MD5 hash, Links, Time (mtime), Device, User, Group, Mode (permissions)等是否改變: S.5....T c /etc/host.conf S.5....T c /etc/hosts.allow S.5....T c /etc/motd S.5....T c /etc/securetty S.5....T c /etc/services S.5....T c /etc/localtime S.5....T c /etc/nsswitch.conf .M...... /usr/sbin/rpcinfo 你可以存儲一份拷貝並在以後作為對比的基准。
--Tripwire [5]:此程序有商業和免費兩種版本。REDHAT X86是唯一正式使用 商業信息的的LINUX:
--免費的版本如果使用適當可以工作的不錯,但存在一些BUG,提供源 代碼,在很大的磁盤上出現過崩潰現象。
--商業版本相對來說比較貴,報告也相對來說比較冗長(你需要使用過濾 的腳本來查找你所需的東西),提供多個配置樣板文件,相對於免費版本較穩定。 可以在UNIX和NT平台上很好的運行,通過一些政策化和配置化的文件提高安全性。 但售後支持不是很好(即使你付了不少錢,呵呵)。
--兩個版本在定義方針化規則時都不支持正常表達式,如你不能為 "/home/*/www/cgi-bin"下的文件特定一規則。
--也可以使用PGP,通過對文件的簽名來得到保護的作用,並寫一有效腳本來 檢查有效正確的簽名。但PGP的不好之處是對文件的權限,連接,字節和修改的 日期等改變不能進行檢驗。
--MD5簽證也可以作為文件效驗,如果要更好的保護MD5,最好使用PGP簽名或者 使用其他方法加密。
--在OPENBSD中可以使用mtree工具。或許這個工具不久會在LINUX上搭帶。
--Aide是一新的GPL效驗工具,可能不久的將來將會代替tripwire. 下面是使用免費Tripwire v1.2的例子: --在x86存在RPM包,在SPARC中的RPM已經被編譯了,下載[5]並安裝RPM工具包。
--安裝後Tripwire兩進制程序在/usr/sbin目錄下,配置文件位於/etc/tw.config, 並且其通過/etc/cron.daily/tripwire.verify由cron進行每天的檢測。數據庫存放 在/var/spool/tripwire下,也可以使用MAN查看使用方法:tripwire(8), twconvert(8), tw.config(5).
--在安裝後,需要保存系統的初始化狀態("initial state"),可以使用下面的方法: /usr/sbin/tripwire -initialise 上面的命令會在/var/spool/tripwire下建立一新的數據庫。
--要通知Tripwire你所改變的文件或者整個目錄,可以使用下面的方法: /usr/sbin/tripwire -update [path]
--可以由cron或者手工來每天進行系統檢查: /etc/cron.daily/tripwire.verify
--使用帶"-i 2"的選項來運行Tripwire可以增加其檢查速度(此選項關閉了 一個檢驗算法snerfu,但SHA1和MDS5還是繼續使用)。
--為了增強安全性和自動檢查多個系統,你可以把Tripwire存放在一絕對安全 的主機,拷貝Tripwire和它的數據庫到安全主機並使用SSH遠程的進行維護。在效驗 某一主機後,刪除目標機上的數據庫,這可以讓攻擊者不輕易發現你在使用tripwire 進行系統檢驗。另外,立即更新tripwire數據庫,這樣可以在連續運行的情況下 知道與原來的不同之處。你可以查看下面的 Trip_linux.sh 的腳本。
如果使用這個腳本,你需要使用下面的方法來關閉本地檢測功能:
mv /etc/cron.daily/tripwire.verify /etc/cron.daily/.tripwire.verify
--拷貝一份備份的配置文件和數據庫到軟盤或者一次性介質。
8,安裝,測試和更嚴格控制應用程序 綜述 --根據服務器所需的相應功能,而采用相應的應用程序如ftpd,BIND,proxy等。 WEB SERVER和防火牆更特別,需要很復雜和小心的配置,下面是server/application 需要遵守的規則列表:
--對於重要應用程序考慮安裝在獨立的分區,這分區在安裝和測試階段 需要安裝為讀寫狀態,但在這些過程後最好需要把屬性改變為只讀屬性。
--在應用程序啟動或者之前使用umask設置嚴格的屬性,如(022)。
--檢查應用程序是否以最低權限的非ROOT用戶運行?其本身的密碼是否 "禁用"並對其設置/dev/null類的SHELL。如果確實需要使用其本身密碼來運行, 是不是把其密碼的標准設置為最小為8個字符並是字母,數字和符號混合的類型。
--如果某應用程序以ROOT的身份,綁定一個低點的端口,要清楚其是否 可以立即派生(fork)出一沒有特權的用戶來最小化減低危險程序?
--應用程序有關的所有文件的權限是否設置正確,即四否只有應用程序 可以讀寫,檢查是否有全局可讀寫的文件,檢查並正確設置。
--檢查應用程序寫LOG記錄的權限是否安全?檢查應用程序是否把有關的 密碼寫入LOG記錄(這樣的事情很多)。
--是否可以把應用程序設置CHROOT環境? FTP服務(ftpd)
--如果你使用Washington University的wu-ftpd,它的LOG記錄和訪問控制及 其他特征有一定的獨特程序,但必須要參考一些以前的BUG(請參看http://www.cert.org/ 站點的關於wu-ftpd的安全建議:advisories CA-93:06, CA-94:07, CA-95:16和 Auscert AA-97.03 和 AA-1999.02). 必須使用V2.6.0以上的版本。
--在/etc/ftpusers(相當於黑名單)中加入系統帳號,使這些系統帳號不能 用來FTP(如你要求ROOT不允許FTP,你把"root"加入到/etc/ftpusers文件中)。 在一個全新的系統中,你可以使用下面的方法把所有系統帳號加入到ftpusers: awk -F: '{print $1}' /etc/passwd > /etc/ftpusers
--可以先把全部帳號加入到/etc/ftpusers中,在把需要FTP的帳號挑選出來, 在進行相應設置(必須在ftpusers去掉相應的帳號)。或者使用下面的技巧:對於 那些沒有FTP訪問的用戶,給他們一個不是標准的SHELL(如tcsh),並不要把這個 新的SHELL加入到/etc/shells中去,FTP的訪問就會被拒絕,如果想要正常工作就 必須在/etc/shells裡面加入相應的SHELL。
--FTP可以使用IP地址或者主機名來控制,請看/etc/hosts.allow和/etc/hosts.deny.
--如果需要匿名FTP,必須非常小心,你必須使用chroot環境,Bastille可以為 你設置這方面的環境。
--如果使用正常的"user ftp",推薦使用chroot。
--把FTP的數據存放在一個獨立的分區並把起安裝為nosuid. DNS 服務 使用最新版本的BIND(Berkeley Internet Name Server),請查看下面的站點: http://www.isc.org/products/BIND 是喲功能8.2.2-P5或者更新的版本,在zone transfers文件中限制次級的IP地址 (在/etc/named.conf)。 可以使用Bastille來設置DNS服務器,它會自動設置下面的配置:
--建立一"dns"用戶和組並使用"named -u dns"來啟動DNS,這樣BIND可以派生 (fork)和改變身份為dns用戶。必須提供dns用戶可以讀BIND配置文件的權利( 然而它們原屬於ROOT)。
--把BIND設置在chrooted的環境中(/home/dns)。 發現並修補故障(Troubleshooting):
--使用nslookup或者dig來檢查服務器的配置結果。
--客戶端:如果你有DNS客戶端問題,檢查/etc/nsswitch.conf和/etc/resolv.conf 文件,並使用帶有"-d2"選項的nslookup來獲得調試信息。
--服務器端:使用debug選項"-d"來啟動named守護程序,並閱讀控制台和LOG 信息,代表性的LOG可以在syslog的"daemon"部分找到。
--下面站點的工具對於測試激活的守護程序有非常大的幫助: http://www.uniplus.ch/direct/testtool/dnstest.html
--要從name服務中獲得統計信息,可以使用下面的方法: kill -ABRT `cat /etc/named.pid` 其中的統計文件會存放在/usr/tmp/named.stats文件中。
--最後對named發送HUP信號,使其重新讀取新的配置文件: kill -HUP `cat /etc/named.pid` HTTP服務 如果WEB的內容很少改變,把內容存儲在CD-ROM中,這樣可以很簡單的防止黑客很 常見的喜好"篡改站點"。因為HTTPD服務有緩存頁面的能力,必須保證其訪問速度 不依靠CD-ROM的速度。 把"simple read-only"內容的服務從電子商務的服務器中分離出來。
請查看http://www.ciac.org/公告http://ciac.llnl.gov/ciac/bulletins/j-042.shtml, 其中對怎樣更好的設置INTERNET WEB服務器做了很好的描述。 使用ServerAdmin設置WEBMASTER的電子郵件,在APACHE設置中不啟用UserDir( 除非用戶確實允許從他們的HOME目錄發布頁面),可以把ServerSignature設置值為 NO,這樣可以避免洩露APACHE版本信息。不起用/manual/alias,除非你確實需要 發布APACHE的文檔信息。不要啟動server-info, server-status 或 perl-status 設置。 RedHat 下apache其設置如下(在RH6.1上是apache 1.3.9):
--配置文件存放在/etc/httpd/conf目錄下
--HTML的目錄根部為/home/httpd/html
--使用nobody運行apache
--服務器狀態(Server-stats) 和服務器信息(server-info)連接是關閉的
------------------------------------------------
運行系統
運行整個系統前的准備 考慮安裝一腳本來檢查重要守護程序的運行,安裝 http://www.boran.com/security/sp/linux/monitor_processes.pl腳本文件並 把其加入到cron文件中: ## Check that important processes are running during office hours:
## [If you run 7x24, modify accordingly]
0,30 8-19 ** 1-5 /secure/monitor_processes.pl inetd sshd httpd
在應用程序安裝和測試階段,如果數據分區必須安裝為讀寫狀態,現在考慮是否 安裝為只讀狀態。 重新初始化tripwire(或者類似的完整性檢查軟件)。
把系統備份兩個磁帶中去(即兩份),一份妥善保管。
在系統上運行網絡掃描器,保證只有一些自己必須的服務在運行。可以使用商業 工具ISS或者免費免費工具Nessus,nmap或者Satan來進行相應的檢查,打印出結果 並保存結果。
如果可能,盡量使用多個人員來進行最後的測試,以防止忘記某些東西進行設置。 可以測試下面的工作--什麼運行了?什麼禁止了?檢查console/log條目,你的 系統按照你的設想在工作嗎,在系統開頭幾天經常檢查LOG。
開始運轉系統
詳細測試,檢查LOG條目,系統是否正常運行的檢查?
對所有應用程序進行詳細測試,通過不同的人員和不同的觀點和不同的網絡來 進行測試。
常規維護
下面的行為必須是每月或者每天,星期或者每小時維護,其頻率依據系統的 安全程度來決定:
--檢查所有新出補丁的情況,更新必須的補丁,注意每個內核補丁( 在沒有應用程序的機器上測試),安裝一些軟件確實需要的補丁,因為大多數 守護程序在主機上是關閉的。
--檢查所有錯誤和不尋常的活動LOG記錄:/var/log/* 和所有的應用程序LOG。
--寫一腳本程序用於報告:重要系統PING不通,一些重要守護程序崩潰。
--經常運行tripwire(或者其他類似完整性檢查)。
--訂閱一些新的漏洞和安全信息的MAILLIST,可以在 http://www.cert.org/;http://www.ciac.org/;http://www.securityfocus.com 站點訂閱。
-------------------------------------------------------------
附加注意信息
上面的文章用於一些系統,當然每一個安全管理員有自己的方式來配置, 也必須要考慮每一個站點的不同來安全配置自己的站點
--RedHat提供一個自動安裝的設備,並提供了一安裝說明的文本,可以 很好的提示用戶來安裝系統,可以在下面的站點找到類似的說明: http://www.redhat.com/mirrors/LDP/HOWTO/KickStart-HOWTO.html
--Mandrake:Mandrake是一個完全兼容RED HAT的LINUX發行版本,但其中 有自己獨特的地方:
--它提供更好的安裝向導,有很好的GUI界面可以使安裝更加 直觀。
--ROOT的密碼必須是8位的長度(應該指的是7.0的版本)。
--Mandrake提供MSEC工具包(Mandrake Security)允許你為 系統設置安全級別,但MSEC有些有趣的地方: 要改變安全級別,運行/et/security/msec/init.sh X,默認狀態 X的級別是3,當我們把其轉變為4的級別後重新啟動 ,系統會詢問一運行 級別的數字,如果輸入3,系統會停止在那裡知道一個關於找不到運行級別錯誤為止, 並且所有其他的TTYS將不可使用。
--MSEC:init.sh可以使用"custom"參數來運行,這樣系統會提示一系列 安全問題並允許你想對什麼樣的安全條目進行安裝。注意這個參數的運行會不允許 ROOT通過串行來進行登錄,如果你確實需要通過ROOT來登錄,你就在/etc/securetty 中加入ttyS0條目。
--Mandrake的硬件適應性:它不支持Sun SuperSPARCs,但支持UltraSPARC 版本已經是BETA版了,另外支持Compaq Alpha BETA版也以支持。
--如果發現某些工具包沒有安裝,可以在/mnt/cdrom/Mandrake/RPMS找到 工具包,並使用rpm -i進行安裝。
--Mandrake提供一個非常漂亮的GUI工具
--darkxconf:可以列出所有服務 並可以停止和繼續運行服務。還可以adduserdrake
--增加用戶,diskdarke一個 非常優秀的磁盤分區GUI工具,drakesec允許低/中/高安全級別。
--命令行工具chkconfig可以用來啟用/關閉服務,可以使用下面的方法來列 表服務:chkconfig
--list ,如chkconfig httpd on 。
--LOG記錄 --除一主要SYSLOG記錄外,你需要保留一份本地的拷貝-以防止syslog 服務器不正常關閉或者被遭到拒絕服務攻擊而不產生記錄,如果你使用本地LOG 必須確保/var是一個獨立的文件系統,這是為了避免目錄被填滿而是系統提高 停止工作。
--使用性能更高的syslog守護程序來代替原來syslog: syslog-ng: http://www.balabit.hu/products/syslog-ng (提供TCP連接,內容過濾,加密,認證等功能)
secure syslog: http://www.core-sdi.com/english/slogging/ssyslog.html Nsyslogd: coombs.anu.edu.au/~avalon/nsyslog.html (TCP連接和SSL功能)
--入侵檢測:
--經常使用定制的腳本和工具如logcheck 和swatch 來對LOG文件 進行詳細的分析。
--也可以使用下面的perl腳本: http://www.boran.com/security/sp/linux/monitor_socket.pl 來對一系列socket進行監聽並通過MAIL來通知管理員,但不需要從inetd 來運行。
--Snort是一個基於網絡入侵檢測很好的工具
[email protected] 2000.06.06
摘自:太平洋電腦信息