CentOS或Red Had Enterprise Linux 4 的用戶要首先要打開SElinux,方法是修改/etc/selinux/config文件中的SELINUX="" 為enforcing 。它可以保證你的系統不會非正常的崩潰。有些人認為應該關閉,我強烈不推薦,當然只是將centos用來玩玩,不是用於實際服務器則無所謂了。
2、啟用iptables 防火牆,對增加系統安全有許多好處。設置好防火牆的規則。
3、執行setup 關閉那些不需要的服務 ,記住少開一個服務,就少一個危險。
4、禁止Control-Alt-Delete 鍵盤關閉命令
在"/etc/inittab" 文件中注釋掉下面這行(使用#):
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
改為:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
為了使這項改動起作用,輸入下面這個命令:
# /sbin/init q
5、給"/etc/rc.d/init.d" 下script文件設置權限
給執行或關閉啟動時執行的程序的script文件設置權限。
# chmod -R 700 /etc/rc.d/init.d/*
這表示只有root才允許讀、寫、執行該目錄下的script文件。
6、修改"/etc/host.conf"文件
"/etc/host.conf"說明了如何解析地址。編輯"/etc/host.conf"文件(vi /etc/host.conf),加入下面這行:
# Lookup names via DNS first then fall back to /etc/hosts.
order bind,hosts
# We have machines with multiple IP addresses.
multi on
# Check for IP address spoofing.
nospoof on
第一項設置首先通過DNS解析IP地址,然後通過hosts文件解析。第二項設置檢測是否"/etc/hosts"文件中的主機是否擁有多個IP地址(比如有多個以太口網卡)。第三項設置說明要注意對本機未經許可的電子欺騙。
7、使"/etc/services"文件免疫
使"/etc/services"文件免疫,防止未經許可的刪除或添加服務:
# chattr +i /etc/services
8.阻止你的系統響應任何從外部/內部來的ping請求。
既然沒有人能ping通你的機器並收到響應,你可以大大增強你的站點的安全性。你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次啟動後自動運行。
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
9、對你的系統上所有的用戶設置資源限制可以防止DoS類型攻擊(denial of service attacks)
如最大進程數,內存數量等。例如,對所有用戶的限制象下面這樣:
vi /etc/security/limits.conf
下面的代碼示例中,所有用戶每個會話都限制在 10 MB,並允許同時有四個登錄。第三行禁用了每個人的內核轉儲。第四行除去了用戶 bin 的所有限制。ftp 允許有 10 個並發會話(對匿名 ftp 帳號尤其實用);managers 組的成員的進程數目限制為 40 個。developers 有 64 MB 的 memlock 限制,wwwusers 的成員不能創建大於 50 MB 的文件。
清單 3. 設置配額和限制
* hard rss 10000
* hard maxlogins 4
* hard core 0
bin -
ftp hard maxlogins 10
@managers hard nproc 40
@developers hard memlock 64000
@wwwusers hard fsize 50000
要激活這些限制,您需要在 /etc/pam.d/login 底部添加下面一行: session required /lib/security/pam_limits.so
10、注釋掉不需要的用戶和用戶組。
vipw
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpm:x:37:37::/var/lib/rpm:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
netdump:x:34:34:Network Crash Dump user:/var/crash:/bin/bash
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
sshd:x:74:74:Privilerpc:x:32:32:Portmapper RPC user:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin
smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin
pcap:x:77:77::/var/arpwatch:/sbin/nologin
xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
gdm:x:42:42::/var/gdm:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin
htt:x:100:101:IIIMF Htt:/usr/lib/im:/sbin/nologin
wangjing:x:500:500::/home/wangjing:/bin/bash
mysql:x:101:102:MySQL server:/var/lib/mysql:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
ge-separated SSH:/var/empty/sshd:/sbin/nologin
對於不需要的用戶全部加 # 注釋掉。注意,我不建議直接刪除,當你某種原因需要某個用戶時,自己重新會很麻煩。
vi /etc/group
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
disk:x:6:root
lp:x:7:daemon,lp
mem:x:8:
kmem:x:9:
wheel:x:10:root
mail:x:12:mail
news:x:13:news
uucp:x:14:uucp
man:x:15:
games:x:20:
gopher:x:30:
dip:x:40:
ftp:x:50:
lock:x:54:
nobody:x:99:
users:x:100:
dbus:x:81:
floppy:x:19:
vcsa:x:69:
rpm:x:37:
haldaemon:x:68:
utmp:x:22:
netdump:x:34:
nscd:x:28:
slocate:x:21:
sshd:x:74:
rpc:x:32:
rpcuser:x:29:
nfsnobody:x:65534:
mailnull:x:47:
smmsp:x:51:
pcap:x:77:
xfs:x:43:
ntp:x:38:
gdm:x:42:
pegasus:x:65:
htt:x:101:
wangjing:x:500:
mysql:x:102:
apache:x:48:
對於不需要的用戶組全部加 # 注釋掉。注意,我不建議直接刪除,當你某種原因需要某個用戶組時,自己重新會很麻煩。
11、用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
注意執行這個操作後,以root身份都不能向系統增加用戶或者修改密碼了。如果我們要增加用戶或者修改密碼的。應該先用chattr -i /etc/passwd等命令解除不可寫設置,再進行操作。
12、改變sshd缺省端口
SSHD的默認端口就是 22 ,地球人都知道,通常黑客在沒有准確目標的情況下要尋找 Linux機器的最好方法就是掃描所有開放了 22 端口的機器,然後放在一個列表裡,一個個去探求它的漏洞。
比如 nmap4 的新功能 nmap -v -iR 10000 -P0 -p 22 可隨機在10000個IP裡去尋找開放了 22 端口的機器。當然也可以有目標的把日本或者其他國家的ip段添上再掃描。
通常是按照服務對應的常規端口去掃描,除非用全端口1-65535,但除非是針對性的對一台機器掃描,否則這樣效率不高。www.britepic.org
把默認端口改變成60022的步驟如下:
vi /etc/ssh/sshd_config
找到#Port 22,標識默認使用22端口,如果需要更改為8888則去掉前面的 # 注釋符號,修改為:Port 60022
然後重啟服務進程
# /etc/init.d/sshd restart
sshd_config其他安全選項
把 #PermitRootLogin yes 改為 PermitRootLogin no 可防止 root 遠程登陸
把 #Protocol 1,2 改 Protocol 2 ,不用 SSH protocol 1 協議,只用 2
當然還有一些選項,視需要而定,比如:Banner的偽造、登陸失敗後的的鎖定時間、是否允許空口令帳號登陸、服務器密鑰的位數等、允許登陸的用戶和IP等。
13、 內核參數調整
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
#sysctl -w net.ipv4.icmp_echo_ignore_all=1
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
sysctl -w net.ipv4.ip_conntrack_max=65535
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_syn_retries=1
sysctl -w net.ipv4.tcp_fin_timeout=5
sysctl -w net.ipv4.tcp_synack_retries=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.route.gc_timeout=100
sysctl -w net.ipv4.tcp_keepalive_time=500
sysctl -w net.ipv4.tcp_max_syn_backlog=10000
14、經常檢查系統日志。系統日志主要位於/var/log/目錄下。防患於未然。
通過以上設置你的系統一般來說就比較安全了。當然安全與不安全是道與魔的斗爭