作者: 阿瑟瑞德 網絡安全是一個非常重要的課題,基本上你運行的服務後台越多,你就可能打開更多的安全漏洞.如果配置的恰當的話,Linux本身是非常安全可靠的,假使在Linux系統中有某個安全缺陷,由於Linux的源碼是開放的,有成千上萬的志願者會立刻發現並修補它。本文旨在介紹用來增強你的網絡安全性的常用技巧,以Redhat Linux作為操作環境。 1.操作系統內部的log file是檢測是否有網絡入侵的重要線索,當然這個假定你的logfile不被侵入者所破壞,如果你有台服務器用專線直接連到Internet上,這意味著你的IP地址是永久固定的地址,你會發現有很多人對你的系統做telnet/FTP登錄嘗試,試著運行#more /var/log/secure grep refused 去檢查。 2. 限制具有SUID權限標志的程序數量,具有該權限標志的程序以root身份運行,是一個潛在的安全漏洞,當然,有些程序是必須要具有該標志的,象passwd程序。 3.BIOS安全。設置BIOS密碼且修改引導次序禁止從軟盤啟動系統。 4. 用戶口令。用戶口令是Linux安全的一個最基本的起點,很多人使用的用戶口令就是簡單的‘passWord,這等於給侵入者敞開了大門,雖然從理論上說沒有不能確解的用戶口令,只要有足夠的時間和資源可以利用。比較好的用戶口令是那些只有他自己能夠容易記得並理解的一串字符,並且絕對不要在任何地方寫出來。 5./etc/eXPorts 文件。如果你使用NFS網絡文件系統服務,那麼確保你的/etc/exports具有最嚴格的存取權限設置,這意味著不要使用任何通配符,不允許root寫權限,mount成只讀文件系統。編輯文件/etc/exports並且加:例如: /dir/to/export host1.mydomain.com(ro,root_squash) /dir/to/export host2.mydomain.com(ro,root_squash) /dir/to/export 是你想輸出的目錄,host.mydomain.com是登錄這個目錄的機器名,ro意味著mount成只讀系統,root_squash禁止root寫入該目錄。 為了讓上面的改變生效,運行/usr/sbin/exportfs -a 6.確信/etc/inetd.conf的所有者是root,且文件權限設置為600 。 [root@deep]# chmod 600 /etc/inetd.conf ENSURE that the owner is root. [root@deep]# stat /etc/inetd.conf File: "/etc/inetd.conf" Size: 2869 Filetype: Regular File Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Device: 8,6 Inode: 18219 Links: 1 Access: Wed Sep 22 16:24:16 1999(00000.00:10:44) Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16) Change:Mon Sep 20 10:22:44 1999(00002.06:12:16) 編輯/etc/inetd.conf禁止以下服務: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth, etc. 除非你真的想用它。特別是禁止那些r命令.如果你用ssh/scp,那麼你也可以禁止掉telnet/ftp。 為了使改變生效,運行#killall -HUP inetd 你也可以運行#chattr +i /etc/inetd.conf使該文件具有不可更改屬性。只有root 才能解開,用命令 #chattr -i /etc/inetd.conf 7. TCP_WRAPPERS 默認地,Redhat Linux允許所有的請求,用TCP_WRAPPERS增強你的站點的安全性是舉手之勞,你可以放入 “ALL: ALL”到/etc/hosts.deny中禁止所有的請求,然後放那些明確允許的請求到/etc/hosts.allow中,如: sshd: 192.168.1.10/255.255.255.0 gate.openarch.com 對IP地址192.168.1.10和主機名gate.openarch.com,允許通過ssh連接。配置完了之後,用tcpdchk檢查 [root@deep]# tcpdchk tcpchk是TCP_Wrapper配置檢查工具,它檢查你的tcp wrapper配置並報告所有發現的潛在/存在的問題。 8. 別名文件aliases 編輯別名文件/etc/aliases(也可能是/etc/mail/aliases),移走/注釋掉下面的行。 # Basic system aliases -- these MUST be present. MAILER-DAEMON: postmaster postmaster: root # General redirections for pseudo accounts. bin: root daemon: root #games: root ?remove or comment out. #ingres: root ?remove or comment out. nobody: root #system: root ?remove or comment out. #toor: root ?remove or comment out. #uUCp: root ?remove or comment out. # Well-known aliases. #manager: root ?remove or comment out. #dumper: root ?remove or comment out. #operator: root ?remove or comment out. # trap decode to catch security attacks #decode: root # Person who should get roots mail #root: marc 最後更新後不要忘記運行/usr/bin/newaliases,使改變生效。 9.阻止你的系統響應任何從外部/內部來的ping請求。 既然沒有人能ping通你的機器並收到響應,你可以大大增強你的站點的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次啟動後自動運行。 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 10. 不要顯示出操作系統和版本信息。 如果你希望某個人遠程登錄到你的服務器時不要顯示操作系統和版本信息,你能改變 /etc/inetd.conf中的一行象下面這樣: telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 加-h標志在最後使得telnet後台不要顯示系統信息,而僅僅顯示login: 11.The /etc/host.conf file 編輯host.conf文件(vi /etc/host.conf)且加下面的行: # Lookup names via DNS first then fall back to /etc/hosts. order bind,hosts # We don have machines with multiple IP addresses on the same card (like virtual server,IP Aliasing). multi off # Check for IP address spoofing. nospoof on IP Spoofing: IP-Spoofing is a security exploit that works by tricking computers in a trust relationship that you are someone that you really aren . 12. The /etc/securetty file 該文件指定了允許root登錄的tty設備,/etc/securetty被/bin/login程序讀取,它的格式是一行一個被允許的名字列表,如你可以編輯/etc/securetty且注釋出下面的行。 tty1 #tty2 #tty3 #tty4 #tty5 #tty6 #tty7 #tty8 -意味著root僅僅被允許在tty1終端登錄。 13. 特別的帳號 禁止所有默認的被操作系統本身啟動的且不需要的帳號,當你第一次裝上系統時就應該做此檢查,Linux提供了各種帳號,你可能不需要,如果你不需要這個帳號,就移走它,你有的帳號越多,就越容易受到攻擊。 為刪除你系統上的用戶,用下面的命令: [root@deep]# userdel username 為刪除你系統上的組用戶帳號,用下面的命令: [root@deep]# groupdel username 在終端上打入下面的命令刪掉下面的用戶。 [root@deep]# userdel adm [root@deep]# userdel lp [root@deep]# userdel sync [root@deep]# userdel shutdown [root@deep]# userdel halt [root@deep]# userdel mail 如果你不用sendmail服務器,procmail.mailx,就刪除這個帳號。 [root@deep]# userdel news [root@deep]# userdel uucp [root@deep]# userdel operator [root@deep]# userdel games 如果你不用X windows 服務器,就刪掉這個帳號。 [root@deep]# userdel gopher [root@deep]# userdel ftp 如果你不允許匿名FTP,就刪掉這個用戶帳號。 === 打入下面的命令刪除組帳號 [root@deep]# groupdel adm [root@deep]# groupdel lp [root@deep]# groupdel mail 如不用Sendmail服務器,刪除這個組帳號 [root@deep]# groupdel news [root@deep]# groupdel uucp [root@deep]# groupdel games 如你不用X Windows,刪除這個組帳號 [root@deep]# groupdel dip [root@deep]# groupdel pppusers [root@deep]# groupdel popusers 如果你不用POP服務器,刪除這個組帳號 [root@deep]# groupdel slipusers ==== 用下面的命令加需要的用戶帳號 [root@deep]# useradd username 用下面的命令改變用戶口令 [root@deep]# passwd username 用chattr命令給下面的文件加上不可更改屬性。 [root@deep]# chattr +i /etc/passwd [root@deep]# chattr +i /etc/shadow [root@deep]# chattr +i /etc/group [root@deep]# chattr +i /etc/gshadow 14. 阻止任何人su作為root. 如果你不想任何人能夠su作為root,你能編輯/etc/pam.d/su加下面的行: auth sufficient /lib/security/pam_rootok.so debug auth required /lib/security/pam_wheel.so group=isd 意味著僅僅isd組的用戶可以su作為root. 然後,如果你希望用戶admin能su作為root.就運行下面的命令。 [root@deep]# usermod -G10 admin 16. 資源限制 對你的系統上所有的用戶設置