linux系統安全

目前隨着網絡的逐漸普及,安全問題越來越引起了人們的注意。Linux作爲免費的開放源代碼操作系統,正在被越來越多地用作服務器平臺,而且隨着Linux下應用軟件的多樣化,很多人(包括筆者)也喜歡使用Linux作爲桌面。在這一系列文章中我們把主要精力放在用Linux搭建安全的服務器上面。我們通過系統設置和一些共享的安全軟件固化我們的系統,使其能做到真正的安全。由於篇幅原因,不可能論述的很詳細,我在這裏只是把我們要注意和關心的地方舉出來,至於一些其他的常識性的細節不再贅述。

第一部分主要從安裝和設置方面闡述 Linux 作爲服務器應注意的方面。
大家一定都安裝過Linux系統,也許您可能已經很熟練了,但是在這裏我們提出一些在安裝過程中應該注意的問題:
首先在分區的時候不要只圖簡單把所有的空間都留給根分區,應該把不同的部分放在不同的分區。強烈的建議您把"/var"和"/tmp"放在不同的分區,如果您的服務器有較多的用戶訪問,這幾乎是您所必須做的。另外最好把"/var"和"/usr"放在不同的分區,這樣可以避免由於日誌或用戶的原因是您的硬盤被佔滿或直接導致您的服務器性能降低。對分區的最後一點警告就是如果您要提供一種或多種服務,一定要把這個服務有關的東西放在單獨一個分區,例如:您如果要建一臺WWW服務器,您在分區時候一定要留一個單獨的分區(例如:"/www"),將來您可以用chroot提高這種服務的安全性。
另外一個重要的問題是安裝時軟件包的選擇。我們用Redhat作爲例子,出於安全和性能的考慮,您必須選擇"Select individual package"單選框,這樣您就可以進行軟件包的選擇。有些軟件是您不必安裝的,有些軟件是安裝後必須卸載的,有些是安裝後必須安裝的。我們下面給出清單:
不必安裝的軟件包:
Applications/Archiving: dump
Applications/File: git
Applications/Internet: finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing: ghostscript, ghostscript-fonts, mpage, rhs-printfilters
Applications/System: arpwatch, bind-utils, knfsd-clients, procinfo, rdate, rdist, 
  screen, ucd-snmp-utils
Documentation/indexhtml
System Environment/Base: chkfontpath, yp-tools
System Environment/Daemons: XFree86-xfs, lpr, pidentd, portmap, routed, 
 rusers, rwho, tftp, ucd-snmp, ypbind
System Environment/Libraries: XFree86-libs, libpng
User Interface/X: XFree86-75dpi-fonts, urw-fonts

 
安裝後必須卸載的軟件包:
pump  apmd  isapnptools  redhat-logos  mt-st  kernel-pcmcia-cs  setserial
redhat-release  eject  linuxconf  kudzu  gd  bc  getty_ps  raidtools   
   pciutils  mailcap  setconsole  gnupg

 
安裝後必須安裝的軟件包(有了這些軟件包我們纔可以編譯程序):
autoconf-2.13-5.noarch.rpm  m4-1.4-12.i386.rpm  automake-1.4-5.noarch.rpm
dev86-0.14.9-1.i386.rpm  bison-1.28-1.i386.rpm  byacc-1.9-11.i386.rpm
cdecl-2.5-9.i386.rpm  cpp-1.1.2-24.i386.rpm  cproto-4.6-2.i386.rpm
ctags-3.2-1.i386.rpm  egcs-1.1.2-24.i386.rpm  ElectricFence-2.1-1.i386.rpm
flex-2.5.4a-7.i386.rpm  gdb-4.18-4.i386.rpm  kernel-headers-2.2.12-20.i386.rpm
glibc-devel-2.1.2-11.i386.rpm  make-3.77-6.i386.rpm  patch-2.5-9.i386.rpm

 
在您對您的服務器的所有工作做完以後(以後不再有編譯的需要了),把上面這些軟件包從您的系統中刪除。這樣即使有人侵入了您的系統,他也不能在上面編譯程序,而且這樣還可以使您以後進行完整性檢查的速度加快。您可以把上面這些軟件包保存在活動介質上以便以後使用,可能上面這些不是最新的版本,您可以去下載目前最新最穩定的版本。

首先你必須設置BIOS的口令,現在的個人計算機系統大都支持這種設置。
其次你必須爲你的lilo的單用戶模式設置口令限制,在/etc/lilo.conf中第一個引導的p_w_picpath前面加入下面的信息:
restricted
passwd="your password"

 
"your passwd"是您所所要設定的單用戶模式引導的密碼。設置完成用lilo -u使lilo重新讀取/etc/lilo.conf中的信息。
另外就是用戶的密碼包括根用戶的密碼,系統默認的用戶密碼是5位。您可以編輯"/etc/login.defs"文件,把最小口令長度由5改成8。找到 PASS_MIN_LEN 5 這一行,改爲:PASS_MIN_LEN 8 。"login.defs"是很重要的配置文件。可以在這個文件中設定一些其它的安全策略,比如:口令的有效期。
口令的選擇不應包括字典中有的詞彙,這樣是十分危險的。正確的口令應該足夠長,比且使用一些特殊字符。
系統中有許多預置帳號,如果你沒有使用,一定要將這些帳號刪掉。這些沒有安全的口令對系統的安全性是一個巨大的挑戰。
一個值得注意的命令是chage.您可以使用它設置帳號的時間限制。(具體見man chage).
對於根用戶而言,您可以設置/etc/securetty.這個文件可以限制根用戶登陸的控制檯。您可以用"#"符號註釋掉不許可根用戶登陸的控制檯號。
可以通過下面的腳本禁止對控制檯的訪問:
# !/bin/sh
cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $I
done

 
然後禁止使用所有的控制檯程序,如:shutdown和halt。可以運行下面的命令來實現:
[root@sound]# rm -f /etc/security/console.apps/servicename

 
截短您的"~/.bash_history"文件,這個文件中保存着以前使用的命令列表。截短這個文件可以使您以前執行過的命令暴露在別人眼光下的機會減小.(在您的命令中很可能包括象密碼信息這樣的保密信息)。通過編輯/etc/profile的下面兩項可以做到這一點:
HISTFILESIZE=20
HISTSIZE=20

 
__
通過下面的措施可以防止任何人都可以su爲root:
1編輯su文件(vi /etc/pam.d/su)在文件的頭部加入下面兩行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

 
2 然後把您想要執行su成爲root的用戶放入wheel組
[root@sound]# usermod -G10 admin

 
linux的ext2文件系統有屬性功能這個特點。我們可以用lsattr命令列出文件的屬性,用chattr命令改變文件的屬性。文件系統的屬性有很多種,我們在這裏要注意的是兩個屬性:
a   只可添加屬性
i   不可改變屬性

 
對於系統種的配置文件,最好設置不可改變屬性,而對於一些日誌文件最好設置只可添加屬性。下面是兩個具體例子:
chattr  +i  /etc/inetd.conf
chattr  +a  /var/log/secure

 
如果要去掉這些屬性,將上面命令中的"+"號變爲"-"號。
另外我們要對mount的文件系統做限制,這個配置在/etc/fstab中。通過設置mount選項我們可以使我們mount上來的文件系統更安全。常用的mount選項有default,nodev,noexec,nosuid,noatime,ro,user等。
我們還可以對系統資源做限制使我們的系統更加安全,看下面的方法:
編輯limits.conf文件(vi /etc/security/limits.conf),加入或改變下面這些行:
* hard core 0
* hard rss 5000
* hard nproc 20

 
這些行的的意思是:"core 0"表示禁止創建core文件;"nproc 20"把最多進程數限制到20;"rss 5000"表示除了root之外,其他用戶都最多隻能用5M內存。上面這些都只對登錄到系統中的用戶有效。通過上面這些限制,就能更好地控制系統中的用戶對進程、core文件和內存的使用情況。星號"*"表示的是所有登錄到系統中的用戶。
然後必須編輯"/etc/pam.d/login"文件,在文件末尾加入下面這一行:
session required /lib/security/pam_limits.so

 
1 在/etc/inetd.conf中註釋掉不需要的服務
2 在/etc/host.allow和/etc/host.deny中設置可以訪問您的系統的計算機。
3 通過下面的方法使系統對ping沒有反應 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
4_用下面的命令在你的服務器上禁止IP原路徑路由:
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done

 
__把上面的命令加到"/etc/rc.d/rc.local"文件中去.
5 用下面的方法提高系統防止SYN***的能力:
[root@sound]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

 
把這個命令加入"/etc/rc.d/rc.local"文件中
6 使Control-Alt-Delete軟關機無效
編輯inittab文件(vi /etc/inittab)把這一行:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 
改爲:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 
用下面的命令使改變生效:
[root@sound]# /sbin/init q

 
7 去掉用戶提示信息
編輯"/ect/rc.d/rc.local"文件,在下面這些行的前面加上"#":
--
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
--

 
然後刪除"/etc"目錄下的"issue.net"和"issue"文件: "/etc/issue.net"文件是用戶從網絡登錄計算機時(例如:telnet、SSH),看到的登錄提示。同樣在"/etc"目錄下還有一個"issue"文件,是用戶從本地登錄時看到的提示。這兩個文件都是文本文件,可以根據需要改變。但是,如果想刪掉這兩個文件,必須向上面介紹的那樣把"/etc/rc.d/rc.local"腳本中的那些行註釋掉,否則每次重新啓動的時候,系統又會重新創建這兩個文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章