- 一、用戶帳號(hào)和環(huán)境
檢查項(xiàng):
1. 清除了operator、lp、shutdown、halt、games、gopher 帳號(hào) 刪除的用戶組有: lp、uucp、games、dip 其它系統(tǒng)偽帳號(hào)均處于鎖定SHELL登錄的狀態(tài)
2. 驗(yàn)證是否有賬號(hào)存在空口令的情況: awk -F: '($2 == "") { print $1 }' /etc/shadow
3. 檢查除了root以外是否還有其它賬號(hào)的UID為0:
awk -F: '($3 == 0) { print $1 }' /etc/passwd(任何UID為0的賬號(hào)在系統(tǒng)上都具有超級(jí)用戶權(quán)限.)
4. 檢查root用戶的$PATH中是否有’.’或者所有用戶/組用戶可寫的目錄(超級(jí)用戶的$PATH設(shè)置中如果存在這些目錄可能會(huì)導(dǎo)致超級(jí)用戶誤執(zhí)行一個(gè)特洛伊木馬)
5. 用戶的home目錄許可權(quán)限設(shè)置為700 (用戶home目錄的許可權(quán)限限制不嚴(yán)可能會(huì)導(dǎo)致惡意用戶讀/修改/刪除其它用戶的數(shù)據(jù)或取得其它用戶的系統(tǒng)權(quán)限 )
6. 是否有用戶的點(diǎn)文件是所有用戶可讀寫的: for dir in
`awk -F: '($3 >= 500) { print $6 }' /etc/passwd` do
for file in $dir/.[A-Za-z0-9]* do
if [ -f $file ]; then chmod o-w $file fi done done(Unix/linux下通常以”.”開頭的文件是用戶的配置文件,如果存在所有用戶可讀/寫的配置文件可能會(huì)使惡意用戶能讀/寫其它用戶的數(shù)據(jù)或取得其它用戶的系統(tǒng)權(quán)限)
7. 為用戶設(shè)置合適的缺省umask值:
cd /etc
for file in profile csh.login csh.cshrc bashrc do
if [ `grep -c umask $file` -eq 0 ]; then
echo "umask 022" >> $file
fi
chown root:root $file
chmod 444 $file
done
(為用戶設(shè)置缺省的umask值有助于防止用戶建立所有用戶可寫的文件而危及用戶的數(shù)據(jù)).
8. 設(shè)備系統(tǒng)口令策略:修改/etc/login.defs文件 將PASS_MIN_LEN最小密碼長(zhǎng)度設(shè)置為12位。
10. 限制能夠su為root 的用戶:#vi /etc/pam.d/su 在文件頭部添加下面這樣的一行
auth required pam_wheel.so use_uid
(這樣,只有wheel組的用戶可能su到root 操作樣例:
#usermod -G10 test 將test用戶加入到wheel組)
11. 修改別名文件/etc/aliases:#vi /etc/aliases
注釋掉不要的 #games: root #ingres: root #system: root #toor: root #uucp: root
#manager: root #dumper: root #operator: root #decode: root #root: marc
修改后執(zhí)行/usr/bin/newaliases
13. 修改賬戶TMOUT值,設(shè)置自動(dòng)注銷時(shí)間 vi /etc/profile 增加TMOUT=600
(無(wú)操作600秒后自動(dòng)退出)
14. 設(shè)置Bash保留歷史命令的條數(shù) #vi /etc/profile 修改HISTSIZE=5
(即只保留最新執(zhí)行的5條命令)
16. 防止IP SPOOF:
#vi /etc/host.conf 添加:nospoof on
(不允許服務(wù)器對(duì)IP地址進(jìn)行欺騙)
17. 使用日志服務(wù)器:
#vi /etc/rsyslog.conf 照以下樣式修改
*.info;mail.none;authpriv.none;cron.none @192.168.10.199
(這里只是作為參考,需要根據(jù)實(shí)際決定怎么配置參數(shù))
- 二、系統(tǒng)訪問(wèn)認(rèn)證和授權(quán)
檢查項(xiàng)
1. 限制 at/cron被授權(quán)的用戶:
cd /etc/
rm -f cron.deny at.deny
(Cron.allow和at.allow文件列出了允許允許crontab和at命令的用戶名單, 在多數(shù)系統(tǒng)上通常只有系統(tǒng)管理員)
2. Crontab文件限制訪問(wèn)權(quán)限:
chown root:root /etc/crontab chmod 400 /etc/crontab
chown -R root:root /var/spool/cron chmod -R go-rwx /var/spool/cron chown -R root:root /etc/cron.* chmod -R go-rwx /etc/cron.*
(系統(tǒng)的crontab文件應(yīng)該只能被cron守護(hù)進(jìn)程(它以超級(jí)用戶身份運(yùn)行)來(lái)訪問(wèn),一個(gè)普通用戶可以修改crontab文件會(huì)導(dǎo)致他可以以超級(jí)用戶身份執(zhí)行任意程序)
3. 建立恰當(dāng)?shù)木鎎anner:
echo "Authorized uses only. All activity may be
monitored and reported." >>/etc/motd
chown root:root /etc/motd chmod 644 /etc/motd
echo "Authorized uses only. All activity may be
monitored and reported." >> /etc/issue
echo "Authorized uses only. All activity may be monitored and reported." >> /etc/issue.net
(改變登錄banner可以隱藏操作系統(tǒng)
類型和版本號(hào)和其它系統(tǒng)信息,這些
信息可以會(huì)對(duì)攻擊者有用.)
4. 限制root登錄到系統(tǒng)控制臺(tái):
cat < tty5 tty4 tty3 tty2 tty1 securetty>
END_FILE
chown root:root /etc/securetty
chmod 400 /etc/securetty
(通常應(yīng)該以普通用戶身份訪問(wèn)系統(tǒng),然后通過(guò)其它授權(quán)機(jī)制(比如su命令和sudo)來(lái)獲得更高權(quán)限,這樣做至少可以對(duì)登錄事件進(jìn)行跟蹤)
5. 設(shè)置守護(hù)進(jìn)程掩碼 vi /etc/rc.d/init.d/functions
設(shè)置為 umask 022
(系統(tǒng)缺省的umask 值應(yīng)該設(shè)定為022以避免守護(hù)進(jìn)程創(chuàng)建所有用戶可寫的文件)
- 三、核心調(diào)整
檢查項(xiàng)
1. 禁止core dump:
cat <>/etc/security/limits.conf
* soft core 0
* hard core 0
END_ENTRIES
(允許core dump會(huì)耗費(fèi)大量的磁盤空間.)
2. chown root:root /etc/sysctl.conf
chmod 600 /etc/sysctl.conf
(log_martians將進(jìn)行ip假冒的ip包記錄到/var/log/messages
其它核心參數(shù)使用centos默認(rèn)值。)
- 四、需要關(guān)閉的一些服務(wù)
設(shè)置項(xiàng)
1. 關(guān)閉Mail Server chkconfig
postfix off
(多數(shù)Unix/Linux系統(tǒng)運(yùn)行Sendmail作為郵件服務(wù)器, 而該軟件歷史上出現(xiàn)過(guò)較多安全漏洞,如無(wú)必要,禁止該服務(wù))
- 五、SSH安全配置
設(shè)置項(xiàng)
1. 配置空閑登出的超時(shí)間隔: ClientAliveInterval 300
ClientAliveCountMax 0
(Vi /etc/ssh/sshd_config)
2. 禁用 .rhosts 文件
IgnoreRhosts yes(Vi /etc/ssh/sshd_config)
3. 禁用基于主機(jī)的認(rèn)證
HostbasedAuthentication no (Vi /etc/ssh/sshd_config)
4. 禁止 root 帳號(hào)通過(guò) SSH 登錄 PermitRootLogin no
(Vi /etc/ssh/sshd_config)
5. 用警告的 Banner Banner /etc/issue
(Vi /etc/ssh/sshd_config)
6. iptables防火墻處理 SSH 端口 # 64906
-A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 64906 -j
ACCEPT
-A INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 64906 –j
ACCEPT
(這里僅作為參考,需根據(jù)實(shí)際需要調(diào)整參數(shù))
7. 修改 SSH 端口和限制 IP 綁定:
Port 64906
安裝selinux管理命令
yum -y install policycoreutils-Python
修改 port contexts(關(guān)鍵),需要對(duì)context進(jìn)行修改
semanage port -a -t ssh_port_t -p tcp 64906
semanage port -l | grep ssh ----查看當(dāng)前SElinux 允許的ssh端口
(Vi /etc/ssh/sshd_config僅作為參考,需根據(jù)實(shí)際需要調(diào)整參數(shù))
8. 禁用空密碼:
PermitEmptyPasswords no
(禁止帳號(hào)使用空密碼進(jìn)行遠(yuǎn)程登錄SSH)
9. 記錄日志:
LogLevel INFO
(確保在 sshd_config 中將日志級(jí)別 LogLevel 設(shè)置為 INFO 或者 DEBUG,可通過(guò) logwatch or logcheck 來(lái)閱讀日志。)
10. 重啟SSH
systemctl restart sshd.service
(重啟ssh)
- 六、封堵openssl的Heartbleed漏洞
檢測(cè)方法:在服務(wù)器上運(yùn)行以下命令確認(rèn)openssl版本
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
以上版本的openssl存在Heartbleed bug,需要有針對(duì)性的打補(bǔ)丁。 升級(jí)補(bǔ)丁:
#yum -y install openssl 驗(yàn)證:
# openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Thu Jun 5 12:49:27 UTC 2014
以上built on 的時(shí)間是2014.6.5號(hào),說(shuō)明已經(jīng)修復(fù)了該漏洞。
注:如果能夠臨時(shí)聯(lián)網(wǎng)安裝以上補(bǔ)丁,在操作上會(huì)比較簡(jiǎn)單一些。如果無(wú)法聯(lián)網(wǎng),則有兩種處理辦法:首選從安裝光盤拷貝獨(dú)立的rpm安裝文件并更新;另一個(gè)辦法是提前下載最新版本的openssl源碼,編譯并安裝。
- 七、開啟防火墻策略
在CentOS7.0中默認(rèn)使用firewall代替了iptables service。雖然繼續(xù)保留了iptables命令,但已經(jīng)僅是名稱相同而已。除非手動(dòng)刪除firewall,再安裝iptables,否則不能繼續(xù)使用以前的iptables配置方法。以下介紹的是firewall配置方法:
#cd /usr/lib/firewalld/services //該目錄中存放的是定義好的網(wǎng)絡(luò)服務(wù)和端口參數(shù),只用于參考,不能修改。這個(gè)目錄中只定義了一部分通用網(wǎng)絡(luò)服務(wù)。在該目錄中沒(méi)有定義的網(wǎng)絡(luò)服務(wù),也不必再增加相關(guān)xml定義,后續(xù)通過(guò)管理命令可以直接增加。 #cd /etc/firewalld/services/
//從上面目錄中將需要使用的服務(wù)的xml文件拷至
這個(gè)目錄中,如果端口有變化則可以修改文件中的數(shù)值。
- 八、啟用系統(tǒng)審計(jì)服務(wù)
審計(jì)內(nèi)容包括:系統(tǒng)調(diào)用、文件訪問(wèn)、用戶登錄等。編輯/etc/audit/audit.rules,在文中添加如下內(nèi)容:
-w /var/log/audit/ -k LOG_audit
-w /etc/audit/ -p wa -k CFG_audit
-w /etc/sysconfig/auditd -p wa -k CFG_auditd.conf
-w /etc/libaudit.conf -p wa -k CFG_libaudit.conf
-w /etc/audisp/ -p wa -k CFG_audisp
-w /etc/cups/ -p wa -k CFG_cups
-w /etc/init.d/cups -p wa -k CFG_initd_cups
-w /etc/netlabel.rules -p wa -k CFG_netlabel.rules
-w /etc/selinux/mls/ -p wa -k CFG_mac_policy
-w /usr/share/selinux/mls/ -p wa -k CFG_MAC_policy
-w /etc/selinux/semanage.conf -p wa -k CFG_MAC_policy
-w /usr/sbin/stunnel -p x
-w /etc/security/rbac-self-test.conf -p wa -k CFG_RBAC_self_test
-w /etc/aide.conf -p wa -k CFG_aide.conf
-w /etc/cron.allow -p wa -k CFG_cron.allow
-w /etc/cron.deny -p wa -k CFG_cron.deny
-w /etc/cron.d/ -p wa -k CFG_cron.d
-w /etc/cron.daily/ -p wa -k CFG_cron.daily
-w /etc/cron.hourly/ -p wa -k CFG_cron.hourly
-w /etc/cron.monthly/ -p wa -k CFG_cron.monthly
-w /etc/cron.weekly/ -p wa -k CFG_cron.weekly
-w /etc/crontab -p wa -k CFG_crontab
-w /var/spool/cron/root -k CFG_crontab_root
-w /etc/group -p wa -k CFG_group
-w /etc/passwd -p wa -k CFG_passwd
-w /etc/gshadow -k CFG_gshadow
-w /etc/shadow -k CFG_shadow
-w /etc/security/opasswd -k CFG_opasswd
-w /etc/login.defs -p wa -k CFG_login.defs
-w /etc/securetty -p wa -k CFG_securetty
-w /var/log/faillog -p wa -k LOG_faillog
-w /var/log/lastlog -p wa -k LOG_lastlog
-w /var/log/tallylog -p wa -k LOG_tallylog
-w /etc/hosts -p wa -k CFG_hosts
-w /etc/sysconfig/network-scripts/ -p wa -k CFG_network
-w /etc/inittab -p wa -k CFG_inittab
-w /etc/rc.d/init.d/ -p wa -k CFG_initscripts
-w /etc/ld.so.conf -p wa -k CFG_ld.so.conf
-w /etc/localtime -p wa -k CFG_localtime
-w /etc/sysctl.conf -p wa -k CFG_sysctl.conf
-w /etc/modprobe.conf -p wa -k CFG_modprobe.conf
-w /etc/pam.d/ -p wa -k CFG_pam
-w /etc/security/limits.conf -p wa -k CFG_pam
-w /etc/security/pam_env.conf -p wa -k CFG_pam
-w /etc/security/namespace.conf -p wa -k CFG_pam
-w /etc/security/namespace.init -p wa -k CFG_pam
-w /etc/aliases -p wa -k CFG_aliases
-w /etc/postfix/ -p wa -k CFG_postfix
-w /etc/ssh/sshd_config -k CFG_sshd_config
-w /etc/vsftpd.ftpusers -k CFG_vsftpd.ftpusers
-a exit,always -F arch=b32 -S sethostname
-w /etc/issue -p wa -k CFG_issue
-w /etc/issue.net -p wa -k CFG_issue.net
重啟audit服務(wù)
#service auditd restart
- 九、部署完整性檢查工具軟件
AIDE(Advanced Intrusion Detection Environment,高級(jí)入侵檢測(cè)環(huán)境)是個(gè)入侵檢測(cè)工具,主要用途是檢查文檔的完整性。
AIDE能夠構(gòu)造一個(gè)指定文檔的數(shù)據(jù)庫(kù),它使用aide.conf作為其配置文檔。AIDE數(shù)據(jù)庫(kù)能夠保存文檔的各種屬性,包括:權(quán)限(permission)、索引節(jié)點(diǎn)序號(hào)(inode number)、所屬用戶(user)、所屬用戶組(group)、文檔大小、最后修改時(shí)間(mtime)、創(chuàng)建時(shí)間(ctime)、最后訪問(wèn)時(shí)間(atime)、增加的大小連同連接數(shù)。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個(gè)文檔的校驗(yàn)碼或散列號(hào)。
在系統(tǒng)安裝完畢,要連接到網(wǎng)絡(luò)上之前,系統(tǒng)管理員應(yīng)該建立新系統(tǒng)的AIDE數(shù)據(jù)庫(kù)。這第一個(gè)AIDE數(shù)據(jù)庫(kù)是系統(tǒng)的一個(gè)快照和以后系統(tǒng)升級(jí)的準(zhǔn)繩。數(shù)據(jù)庫(kù)應(yīng)該包含這些信息:關(guān)鍵的系統(tǒng)二進(jìn)制可執(zhí)行程式、動(dòng)態(tài)連接庫(kù)、頭文檔連同其他總是保持不變的文檔。這個(gè)數(shù)據(jù)庫(kù)不應(yīng)該保存那些經(jīng)常變動(dòng)的文檔信息,例如:日志文檔、郵件、/proc文檔系統(tǒng)、用戶起始目錄連同臨時(shí)目錄 安裝方法:
#yum -y install aide
注:如果主機(jī)不能聯(lián)網(wǎng)安裝AIDE,那么也可以從安裝光盤拷貝至目標(biāo)主機(jī)。
檢驗(yàn)系統(tǒng)文件完整性的要求:
因?yàn)锳IDE可執(zhí)行程序的二進(jìn)制文檔本身可能被修改了或數(shù)據(jù)庫(kù)也被修改了。因此,應(yīng)該把AIDE的數(shù)據(jù)庫(kù)放到安全的地方,而且進(jìn)行檢查時(shí)要使用確保沒(méi)有被修改過(guò)的程序,最好是事先為AIDE執(zhí)行程序生成一份MD5信息。再次使用AIDE可執(zhí)行程序時(shí),需要先驗(yàn)證該程序沒(méi)有被篡改過(guò)。
建立、更新樣本庫(kù):
1)執(zhí)行初始化,建立第一份樣本庫(kù) # aide --init
# cd /var/lib/aide/
# mv aide.db.new.gz aide.db.gz //替換舊的樣本庫(kù)
2)更新到樣本庫(kù)
#aide --update
# cd /var/lib/aide/
# mv aide.db.new.gz aide.db.gz //替換舊的樣本庫(kù)
執(zhí)行aide入侵檢測(cè):
1)查看入侵檢測(cè)報(bào)告
#aide --check
報(bào)告的詳細(xì)程度可以通過(guò)-V選項(xiàng)來(lái)調(diào)控,級(jí)別為0-255,-V0 最簡(jiǎn)略,-V255 最詳細(xì)。 或
#aide --compare
這個(gè)命令要求在配置文件中已經(jīng)同時(shí)指定好了新、舊兩個(gè)庫(kù)文件。
2)保存入侵檢測(cè)報(bào)告(將檢查結(jié)果保存到其他文件)
aide --check --report=file:/tmp/aide-report-20120426.txt
3)定期執(zhí)行入侵檢測(cè),并發(fā)送報(bào)告
# crontab -e
45 17 * * * /usr/sbin/aide -C -V4 | /bin/mail -s "AIDE REPORT $(date +%Y%m%d)" abcdefg#163.com
或
45 23 * * * aide -C >> /var/log/aide/'date +%Y%m%d'_aide.log
記錄aide可執(zhí)行文件的md5 checksum:
#md5sum /usr/sbin/aide
- 十、部署系統(tǒng)監(jiān)控環(huán)境
該段落因?yàn)樾枰惭b或更新較多的依賴包,所以目前僅作為參考。 為了在將來(lái)合適的時(shí)候,可以支持通過(guò)一臺(tái)集中的監(jiān)控主機(jī)全面監(jiān)控主機(jī)系統(tǒng)和網(wǎng)絡(luò)設(shè)備的運(yùn)行狀態(tài)、網(wǎng)絡(luò)流量等重要數(shù)據(jù),可以在安全加固主機(jī)的系統(tǒng)中預(yù)先安裝和預(yù)留了系統(tǒng)監(jiān)控軟件nagIOS和cacti在被監(jiān)控主機(jī)中需要使用的軟件支撐環(huán)境。
由于以下軟件在安裝過(guò)程中需要使用源碼編譯的方式,由此而引發(fā)需要安裝GCC和OPENSSL-DEVEL。而為了安裝GCC和OPENSSL-DEVEL而引發(fā)的依賴包的安裝和更新大約有20個(gè)左右。這就違反了安全加固主機(jī)要保持最小可用系統(tǒng)的設(shè)計(jì)原則,所以該部分監(jiān)控軟件支撐環(huán)境的部署工作不作為默認(rèn)設(shè)置,但仍然通過(guò)下文給出了部署參考,以用于系統(tǒng)運(yùn)行運(yùn)維過(guò)程中需要部署全局性監(jiān)控系統(tǒng)時(shí)使用。
1)安裝net-snmp服務(wù) #yum -y install net-snmp
#chkconfig snmpd off ---將該服務(wù)設(shè)置為默認(rèn)關(guān)閉,這里只是為以后部署cacti先預(yù)置一個(gè)支撐環(huán)境
如果不能聯(lián)網(wǎng)安裝,則可以使用安裝光盤,并安裝以下幾個(gè)rpm包: lm_sensors , net-snmp , net-snmp-libs , net-snmp-utils
2)安裝nagios-plugin和nrpe
a. 增加用戶&設(shè)定密碼 # useradd nagios # passwd nagios
b. 安裝Nagios 插件
# tar zxvf nagios-plugins-2.0.3.tar.gz # cd nagios-plugins-2.0.3 # ./configure --prefix=/usr/local/nagios # make && make install
這一步完成后會(huì)在/usr/local/nagios/下生成三個(gè)目錄include、libexec和share。 修改目錄權(quán)限
# chown nagios.nagios /usr/local/nagios # chown -R nagios.nagios /usr/local/nagios/libexec
c. 安裝NRPE
# tar zxvf nrpe-2.15.tar.gz # cd nrpe-2.15 # ./configure
# make all
接下來(lái)安裝NPRE插件,daemon和示例配置文件。 c.1 安裝check_nrpe 這個(gè)插件 # make install-plugin
監(jiān)控機(jī)需要安裝check_nrpe 這個(gè)插件,被監(jiān)控機(jī)并不需要,在這里安裝它只是為了測(cè)試目的。
c.2 安裝deamon # make install-daemon c.3 安裝配置文件
# make install-daemon-config
現(xiàn)在再查看nagios 目錄就會(huì)發(fā)現(xiàn)有5個(gè)目錄了






