Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom
Bar]
[Photo of the
Author]
Michael Jastremski
作者簡介: Michael Jastremski 這四年以來, 一直都在專研 Unix, 他的網站通常可以在 http://westphila.net/mike 找到, 他感謝 Andrew 的英文協助。

與作者聯繫


內容目錄
導讀
系統安全之實作步驟

為 Linux 安裝套件強化系統安全

[Illustration]

內容摘要: 本文介紹系統安全防護策略, 讓系統管理員借以阻絕入侵者。 針對不同的 Linux 系統, 討論一些改善方式。




導讀

不少人開始廣泛談論入侵網路主機的話題, 而 Linux 與 FreeBSD 則成為近日主要的攻擊對象, 包括像 imapd 與 BIND 程式裡的 buffer overflow 問題。 每天, 各式各樣的「系統漏洞」, 都會在 BUGTRAQ 郵遞論壇中宣布, 此一郵遞論壇已有將近 20,000 位訂閱者。 ( 若是您只想訂閱一份系統安全相關的郵遞論壇, 那麼這個不容錯過 )。

假設上述的 19,305 位訂閱者當中, 有至少一位打算寫個 for() 迴圈, 配合公開的系統漏洞攻擊程式, 藉以快速取得網路上主機的控制權... 事實上這樣的假設並不為過。

如此一來, 您的電腦早晚會成為下一個遭受攻擊的目標, 到時候, 您可能就措手不及了。

或許有些「專家」已經讓您以為, 安裝及維護一部安全的電腦, 有如「太空科學」般地複雜, 事實上沒那麼難啦。 擁有一套完善而健全的系統管理措施, 才能保障您免於來自全球網路的威脅, 而本文討論的便是, 我在規畫 Red Hat Linux 網路系統時, 一般會採取的預防措施。 雖然文中提供了保障系統安全的指引, 但它絕不是一份完整的參考說明。

下列的步驟, 用意在使您的系統, 不要成為網路程式安全漏洞公開後的受害者。 請特別注意: 如果您不確定清楚自己在做什麼, 那麼就別動手。 有些步驟是假設, 您已經具備程度之上的相關知識。 文末另外還附上一些建議的參考讀物。

系統安全之實作步驟

1. 將系統中所有沒必要的網路服務全部移除。 可以連到您電腦的方式越少, 表示入侵者惡闖的途徑越少。 把 /etc/inetd.conf 檔案中, 所有不需要的項目都加註取消, 如果系統並不需要 telnet, 那就將它取消, 諸如 ftpd、 rshd、 rexecd、 gopher、 chargen、 echo、 pop3d 等, 也是同樣的處理原則。 改完 inetd.conf 檔案後, 別忘了要做個 'killall -HUP inetd' 動作。 另外, 也別忽略 /etc/rc.d/init.d 目錄裡的東西, 有些網路服務 ( 像 BIND、 印表機伺服程式 ) 是獨自執行的程式, 透過目錄裡的命令稿來啟動。

2. 安裝 SSH。 SSH 是一個用來取代 'r' 系列指令的程式, 原本那些 Berkeley 版本的程式已經老舊了。 下列是摘自 http://www.cs.hut.fi/ssh 網頁的資料:

Ssh (Secure Shell) 是一個用來登入網路主機、
在遠端主機上執行指令、 或是在兩台主機間搬移檔案的程式。
它提供了強大的認證功能, 並確保能夠在網路上進行安全的資料通訊。

它額外還能夠處理一些事情, 可能會是有心鑽研之高手所感興趣的。 請由 http://ftp.rge.com/pub/ssh 下載 SSH 程式。

3. 使用 vipw(1) 把所有不淮登入的帳號全都鎖起來。 值得注意的是, 那些沒有指定 login shell 的帳號, Red Hat Linux 會預設將它們指定為 /bin/sh, 這種情況可能不是你所期望的。 同時要確定, 您的使用者帳號中沒有把密碼欄給空下來, 下列是一個正常之密碼檔案的部份內容:

  daemon:*:2:2:daemon:/sbin:/bin/sync
  adm:*:3:4:adm:/var/adm:/bin/sync
  lp:*:4:7:lp:/var/spool/lpd:/bin/sync
  sync:*:5:0:sync:/sbin:/bin/sync
  shutdown:*:6:0:shutdown:/bin:/sync
  halt:*:7:0:halt:/sbin:/bin:/sync
  mail:*:8:12:mail:/var/spool/mail:/bin/sync
  news:*:9:13:news:/var/spool/news:/bin/sync
  uucp:*:10:14:uucp:/var/spool/uucp:/bin/sync
  operator:*:11:0:operator:/root:/bin/sync
  games:*:12:100:games:/usr/games:/bin/sync
  gopher:*:13:30:gopher:/usr/lib/gopher-data:/bin/sync
  ftp:*:14:50:FTP User:/home/ftp:/bin/sync
  nobody:*:99:99:Nobody:/:/bin/sync                    

4. 移除所有 root 所擁有之程式的 's' 位元權限, 如果它根本不需要這樣的權限。 這個動作可以由 'chmod a-s' 指令完成, 後面接的參數, 便是您要改的檔名。

上述所提之程式包括以下各類, 但不限於此:

  1. 您從來不會去使用的程式
  2. 您不希望 root 之外的使用者會去執行的程式
  3. 偶而會用, 但以 su(1) 變成 root 再去執行, 也無所謂的程式

我把自己會取消權限的程式列在下面, 並在前面放了星號 (*)。 記住, 由於您的系統仍然需要一些 suid root 的程式, 才能正常地執行, 因此要特別地小心。

另一種方式, 您可以建立一個叫做 'suidexec' 的特殊群組名稱, 然後將可信賴的使用者帳號設在裡面, 使用 chgrp(1) 指令將所有 suid 的程式改成屬於 suidexec 此一群組, 並將其他使用者可以執行的權限除掉。

     
# find / -user root -perm "-u+s"    
*/bin/ping              
*/bin/mount              -- 應該只有 root 才可以掛上檔案系統
*/bin/umount             -- 同上
/bin/su                  -- 別亂改它啊!
/bin/login
/sbin/pwdb_chkpwd
*/sbin/cardctl           -- PCMCIA 卡的控制工具程式
*/usr/bin/rcp            -- 改用 ssh
*/usr/bin/rlogin         -- 同上
*/usr/bin/rsh            --  "
*/usr/bin/at             -- 改用 cron, 或兩者都停用
*/usr/bin/lpq            -- 改裝 LPRNG
*/usr/bin/lpr            -- "
*/usr/bin/lprm           -- "
*/usr/bin/mh/inc
*/usr/bin/mh/msgchk
/usr/bin/passwd          -- 別亂改它啊!
*/usr/bin/suidperl       -- 每個新版的 suidperl 好像都有
                            buffer overflow 的問題
*/usr/bin/sperl5.003     -- 只有必要時才用它
/usr/bin/procmail        -- 
*/usr/bin/chfn
*/usr/bin/chsh
*/usr/bin/newgrp
*/usr/bin/crontab               
*/usr/X11R6/bin/dga      -- X11 裡也有許多 buffer overflow 的問題
*/usr/X11R6/bin/xterm    -- "
*/usr/X11R6/bin/XF86_SVGA   -- "    
*/usr/sbin/usernetctl           
/usr/sbin/sendmail
*/usr/sbin/traceroute    -- 您應該可以忍受偶而打一下 root 密碼吧

5.昇級 sendmail。 從 ftp://ftp.sendmail.org/pub/sendmail 下載最新的原始碼檔案, 解開後閱讀其說明文件, 如果您還有點多餘的時間, 可以安裝 smrsh ( 附隨在 sendmail 裡 ), 許多人所關心的 sendmail 安全問題, 如寄信給某些危害安全的程式, 這個程式大都考慮到了。 最後編輯 sendmail.cf 檔案, 把 'PrivacyOptions' 選項設定為 'goaway':

        O PrivacyOptions=goaway

如果您不打算收取網際網路上的電子郵件, 千萬不要將 sendmail 以收信狀態 (sendmail -bd) 來執行! 在上述的情況下, 請將 /etc/rc.d/init.d/sendmail.init 取消, 並執行 'killall -TERM sendmail' 命令。 不過, 您還是可以寄信到外面的。

6.如果您有使用 BIND, 也要記得昇級。 最新版的 BIND 可以在 http://www.isc.org 找到, 不然, 請將它們全部關閉掉。

7.重新編譯核心程式。 如果預設的核心程式太大, 我通常就會重新編譯它。 提示: 請將有關防火牆的選項全部打開, 即使您的電腦並不是防火牆。

       
        CONFIG_FIREWALL=y
        CONFIG_NET_ALIAS=y
        CONFIG_INET=y
        # CONFIG_IP_FORWARD is not set
        # CONFIG_IP_MULTICAST is not set
        CONFIG_SYN_COOKIES=y
        CONFIG_RST_COOKIES=y
        CONFIG_IP_FIREWALL=y
        CONFIG_IP_FIREWALL_VERBOSE=y
        # CONFIG_IP_MASQUERADE is not set
        # CONFIG_IP_TRANSPARENT_PROXY is not set
        CONFIG_IP_ALWAYS_DEFRAG=y
        CONFIG_IP_ACCT=y
        # CONFIG_IP_ROUTER is not set
        # CONFIG_NET_IPIP is not set
        CONFIG_IP_ALIAS=m

8.進行程式修補 所有已知的軟體問題, 都可以在 RedHat 的「修正網頁」上找到, ( 請查閱 http://www.redhat.com/support/docs/errata.html, 找出適合您版本的修補程式碼 ), RedHat 在維護更新這些網頁上, 確實做得相當不錯。 同時, 這些網頁還包括一些 RPM 檔案的連結, 您應該用得著, 請依照說明指示進行安裝。

9.設定 tcp_wrappers: tcp_wrappers 可以用來管理網路上, 哪些電腦可以與您的電腦進行「溝通」。 這一套程式, 是由一位系統安全高手 Wieste Venema 所寫成, 它會管理那些經由 inetd ( 或與 inetd 程式庫相連結 ) 所啟動的程式, 分析它們的設定檔案, 以決定是否拒絕或同意某一個網路連線要求。 舉例來說, 為了允許您從家裡能夠透過 ISP 進行 telnet 及 ftp, 同時間又要拒絕所有其他的連線, 可以在 /etc/hosts.allow 檔案裡寫入:

        in.ftpd : .dialup.your-isp.com : allow
        all : all : deny 

像 SSH、 sendmail 及其他程式, 都可以做成與 tcp_wrappers 相互支援。 請閱讀 tcpd(1) 的說明文件, 以取得進一步的資訊。

Solar Designer 所提供的 Secure Linux patches:
http://www.false.com/security/li nux/

replay.com 提供的 RedHat crypto pages:
http://www.replay.com/redhat/

Breaking Into it 所提供的 Improving the Security of Your Site:
http://www.alw.nih.gov/Security/Docs/admin-guide-to-cracking.101.html

Slashdot 提供最新而及時的消息:
http://www.slashdot.org

想要知道最新的軟體更新狀況, 請參考 FreshMeat regularly:
http://www.freshmeat.net

Smashing the stac:
http://reality.sgi.com/nate/machines/security/P49-14-Aleph-One


本文由 Penelope Marr 所翻譯

主網站由 Miguel Angel Sepulveda 維護
© Michael Jastremski
LinuxFocus 1998