CentOS7 系統安全加固實施方案介紹

CentOS7.0系統安全加固手冊

 

目錄

 

一、用戶帳號和環境……………………………………………………………………………………. 2

二、系統訪問認證和授權……………………………………………………………………………… 3

三、核心調整……………………………………………………………………………………………… 4

四、需要關閉的一些服務……………………………………………………………………………… 5

五、SSH安全配置……………………………………………………………………………………….. 5

六、封堵openssl的Heartbleed漏洞…………………………………………………………………. 6

七、開啓防火牆策略……………………………………………………………………………………. 6

八、啓用系統審計服務…………………………………………………………………………………. 8

九、部署完整性檢查工具軟件………………………………………………………………………. 10

十、部署系統監控環境……………………………………………………………………………….. 11

 

以下安全設置均是在CentOS7.0_x64環境下minimal安裝進行的驗證。

一、用戶帳號和環境

 檢查項註釋:
1清除了operator、lp、shutdown、halt、games、gopher 帳號

刪除的用戶組有: lp、uucp、games、dip

其它系統僞帳號均處於鎖定SHELL登錄的狀態

 

 
2驗證是否有賬號存在空口令的情況:

awk -F:   ‘($2 == “”) { print $1 }’ /etc/shadow

 

 
3檢查除了root以外是否還有其它賬號的UID爲0:

awk -F:   ‘($3 == 0) { print $1 }’ /etc/passwd

 

任何UID爲0的賬號在系統上都具有超級用戶權限.
4檢查root用戶的$PATH中是否有’.’或者所有用戶/組用戶可寫的目錄超級用戶的$PATH設置中如果存在這些目錄可能會導致超級用戶誤執行一個特洛伊木馬
5用戶的home目錄許可權限設置爲700用戶home目錄的許可權限限制不嚴可能會導致惡意用戶讀/修改/刪除其它用戶的數據或取得其它用戶的系統權限
6是否有用戶的點文件是所有用戶可讀寫的:

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下通常以”.”開頭的文件是用戶的配置文件,如果存在所有用戶可讀/寫的配置文件可能會使惡意用戶能讀/寫其它用戶的數據或取得其它用戶的系統權限
7爲用戶設置合適的缺省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

 

爲用戶設置缺省的umask值有助於防止用戶建立所有用戶可寫的文件而危及用戶的數據.
8設備系統口令策略:修改/etc/login.defs文件

將PASS_MIN_LEN最小密碼長度設置爲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

修改後執行/usr/bin/newaliases

 
   
13修改帳戶TMOUT值,設置自動註銷時間

vi /etc/profile

增加TMOUT=600

無操作600秒後自動退出
14設置Bash保留歷史命令的條數

#vi /etc/profile

修改HISTSIZE=5

即只保留最新執行的5條命令
   
16防止IP   SPOOF:

#vi /etc/host.conf 添加:nospoof on

不允許服務器對IP地址進行欺騙
17使用日誌服務器:

#vi /etc/rsyslog.conf 照以下樣式修改

*.info;mail.none;authpriv.none;cron.none    @192.168.10.199

 

這裏只是作爲參考,需要根據實際決定怎麼配置參數

 

 

二、系統訪問認證和授權

 檢查項註釋:
1限制   at/cron給授權的用戶:

cd /etc/

rm -f   cron.deny at.deny

echo root   >cron.allow

echo root   >at.allow

chown   root:root cron.allow at.allow

chmod 400   cron.allow at.allow

 

Cron.allow和at.allow文件列出了允許允許crontab和at命令的用戶名單, 在多數系統上通常只有系統管理員才需要運行這些命令
5Crontab文件限制訪問權限:

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.*

 

系統的crontab文件應該只能被cron守護進程(它以超級用戶身份運行)來訪問,一個普通用戶可以修改crontab文件會導致他可以以超級用戶身份執行任意程序
6建立恰當的警告banner:

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可以隱藏操作系統類型和版本號和其它系統信息,這些信息可以會對攻擊者有用.
7限制root登錄到系統控制檯:

cat   <<END_FILE >/etc/securetty

tty1

tty2

tty3

tty4

tty5

tty6

END_FILE

chown   root:root /etc/securetty

chmod 400   /etc/securetty

 

通常應該以普通用戶身份訪問系統,然後通過其它授權機制(比如su命令和sudo)來獲得更高權限,這樣做至少可以對登錄事件進行跟蹤
8設置守護進程掩碼

vi /etc/rc.d/init.d/functions

設置爲 umask 022

系統缺省的umask 值應該設定爲022以避免守護進程創建所有用戶可寫的文件

 

 

三、核心調整

 設置項註釋:
1禁止core   dump:

cat <<END_ENTRIES   >>/etc/security/limits.conf

* soft core 0

* hard core 0

END_ENTRIES

允許core   dump會耗費大量的磁盤空間.
2chown root:root /etc/sysctl.conf

chmod 600 /etc/sysctl.conf

log_martians將進行ip假冒的ip包記錄到/var/log/messages

其它核心參數使用CentOS默認值。

 

四、需要關閉的一些服務

 設置項註釋:
1關閉Mail   Server

chkconfig postfix off

多數Unix/Linux系統運行Sendmail作爲郵件服務器, 而該軟件歷史上出現過較多安全漏洞,如無必要,禁止該服務

 

五、SSH安全配置

 設置項註釋:
1配置空閒登出的超時間隔:

ClientAliveInterval 300

ClientAliveCountMax 0

Vi /etc/ssh/sshd_config

 

2禁用   .rhosts 文件

IgnoreRhosts yes

Vi /etc/ssh/sshd_config

 

3禁用基於主機的認證

HostbasedAuthentication no

Vi /etc/ssh/sshd_config

 

4禁止   root 帳號通過 SSH   登錄

PermitRootLogin no

Vi /etc/ssh/sshd_config

 

5用警告的   Banner

Banner /etc/issue

Vi /etc/ssh/sshd_config

 

6iptables防火牆處理 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

這裏僅作爲參考,需根據實際需要調整參數
7修改 SSH   端口和限制 IP 綁定:

Port 64906

 

安裝selinux管理命令

yum -y install policycoreutils-python

修改   port contexts(關鍵),需要對context進行修改

semanage port -a -t ssh_port_t -p tcp 64906

semanage port -l | grep ssh      —-查看當前SElinux 允許的ssh端口

Vi /etc/ssh/sshd_config

僅作爲參考,需根據實際需要調整參數。

 

8禁用空密碼:

PermitEmptyPasswords no

禁止帳號使用空密碼進行遠程登錄SSH
9記錄日誌:

LogLevel    INFO

確保在   sshd_config 中將日誌級別   LogLevel 設置爲   INFO 或者   DEBUG,可通過 logwatch or

logcheck 來閱讀日誌。

10重啓SSH

systemctl restart sshd.service

重啓ssh

 

 

 

六、封堵openssl的Heartbleed漏洞

 

檢測方法:在服務器上運行以下命令確認openssl版本

# openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013

以上版本的openssl存在Heartbleed bug,需要有針對性的打補丁。

升及補丁:

#yum -y install openssl

驗證:

# openssl version -a

OpenSSL 1.0.1e-fips 11 Feb 2013

built on: Thu Jun  5 12:49:27 UTC 2014

以上built on 的時間是2014.6.5號,說明已經修復了該漏洞。

注:如果能夠臨時聯網安裝以上補丁,在操作上會比較簡單一些。如果無法聯網,則有兩種處理辦法:首選從安裝光盤拷貝獨立的rpm安裝文件並更新;另一個辦法是提前下載最新版本的openssl源碼,編譯並安裝。

 

 

七、開啓防火牆策略

在CentOS7.0中默認使用firewall代替了iptables service。雖然繼續保留了iptables命令,但已經僅是名稱相同而已。除非手動刪除firewall,再安裝iptables,否則不能繼續使用以前的iptables配置方法。以下介紹的是firewall配置方法:

#cd /usr/lib/firewalld/services   //該目錄中存放的是定義好的網絡服務和端口參數,只用於參考,不能修改。這個目錄中只定義了一部分通用網絡服務。在該目錄中沒有定義的網絡服務,也不必再增加相關xml定義,後續通過管理命令可以直接增加。
#cd /etc/firewalld/services/                  //從上面目錄中將需要使用的服務的xml文件拷至這個目錄中,如果端口有變化則可以修改文件中的數值。

 

# Check firewall state.
firewall-cmd --state
# Check active zones.
firewall-cmd --get-active-zones
# Check current active services.
firewall-cmd --get-service
# Check services that will be active after next reload.
firewall-cmd --get-service --permanent

 

查看firewall當前的配置信息,最後一個命令是查看寫入配置文件的信息。
# # Set permanent and reload the runtime config.
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --reload
# firewall-cmd --permanent --zone=public --list-services
打開HTTP服務端口並寫入配置文件

從配置文件中重載至運行環境中。

# firewall-cmd --permanent --zone=public --remove-service=https
# firewall-cmd --reload
從已有配置中刪除一個服務端口
# firewall-cmd --permanent --zone=public --add-port=8080-8081/tcp
# firewall-cmd --reload
# firewall-cmd --zone=public --list-ports
8080-8081/tcp
# firewall-cmd --permanent --zone=public --list-ports
8080-8081/tcp
#
# firewall-cmd --permanent --zone=public --remove-port=8080-8081/tcp
# firewall-cmd --reload
打開或關閉一段TCP端口的方法,同理如果使用了其它非通用端口,那麼也可以這麼操作。
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.4/24" service name="http" accept"
# firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" \
    source address="192.168.0.4/24" service name="http" accept"
The following command allows you to open/close   HTTP access to a specific IP address.
  

 

 

八、啓用系統審計服務

審計內容包括:系統調用、文件訪問、用戶登錄等。編輯/etc/audit/audit.rules,在文中添加如下內容:

 

-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服務

#service auditd  restart

 

 

九、部署完整性檢查工具軟件

AIDE(Advanced Intrusion Detection Environment,高級入侵檢測環境)是個入侵檢測工具,主要用途是檢查文檔的完整性。

AIDE能夠構造一個指定文檔的數據庫,他使用aide.conf作爲其配置文檔。AIDE數據庫能夠保存文檔的各種屬性,包括:權限(permission)、索引節點序號(inode number)、所屬用戶(user)、所屬用戶組(group)、文檔大小、最後修改時間(mtime)、創建時間(ctime)、最後訪問時間(atime)、增加的大小連同連接數。AIDE還能夠使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每個文檔的校驗碼或散列號。

在系統安裝完畢,要連接到網絡上之前,系統管理員應該建立新系統的AIDE數據庫。這第一個AIDE數據庫是系統的一個快照和以後系統升級的準繩。數據庫應該包含這些信息:關鍵的系統二進制可執行程式、動態連接庫、頭文檔連同其他總是保持不變的文檔。這個數據庫不應該保存那些經常變動的文檔信息,例如:日誌文檔、郵件、/proc文檔系統、用戶起始目錄連同臨時目錄

安裝方法:

#yum -y install aide

注:如果主機不能聯網安裝AIDE,那麼也可以從安裝光盤拷貝至目標主機。

 

檢驗系統文件完整性的要求:

因爲AIDE可執行程序的二進制文檔本身可能被修改了或數據庫也被修改了。因此,應該把AIDE的數據庫放到安全的地方,而且進行檢查時要使用確保沒有被修改過的程序,最好是事先爲AIDE執行程序生成一份MD5信息。再次使用AIDE可執行程序時,需要先驗證該程序沒有被篡改過。

 

配置說明:

序號參數註釋
1/etc/aide.conf配置文件
2databaseAide讀取文檔數據庫的位置,默認爲/var/lib/aide,默認文件名爲aide.db.gz
3database_outAide生成文檔數據庫的存放位置,默認爲/var/lib/aide,默認文件名爲aide.db.new.gz
 database_new在使用aide   –compare命令時,需要在aide.conf中事先設置好database_new並指向需要比較的庫文件
4report_url/var/log/aide,入侵檢測報告的存放位置
5其它參數繼續使用默認值即可。

 

 

建立、更新樣本庫:   

1)執行初始化,建立第一份樣本庫

# aide –init

# cd /var/lib/aide/

# mv aide.db.new.gz aide.db.gz   //替換舊的樣本庫

2)更新到樣本庫

#aide –update

# cd /var/lib/aide/

# mv aide.db.new.gz aide.db.gz   //替換舊的樣本庫

 

執行aide入侵檢測:

1)查看入侵檢測報告

#aide –check

報告的詳細程度可以通過-V選項來調控,級別爲0-255,-V0 最簡略,-V255 最詳細。

#aide –compare

這個命令要求在配置文件中已經同時指定好了新、舊兩個庫文件。

2)保存入侵檢測報告(將檢查結果保存到其他文件)

aide –check –report=file:/tmp/aide-report-20120426.txt

3)定期執行入侵檢測,併發送報告

# 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可執行文件的md5 checksum:

#md5sum /usr/sbin/aide

 

 

十、部署系統監控環境

該段落因爲需要安裝或更新較多的依賴包,所以目前僅作爲參考

爲了在將來合適的時候,可以支持通過一臺集中的監控主機全面監控主機系統和網絡設備的運行狀態、網絡流量等重要數據,可以在安全加固主機的系統中預先安裝和預留了系統監控軟件nagios和cacti在被監控主機中需要使用的軟件支撐環境。

由於以下軟件在安裝過程中需要使用源碼編譯的方式,由此而引發需要安裝GCC和OPENSSL-DEVEL。而爲了安裝GCC和OPENSSL-DEVEL而引發的依賴包的安裝和更新大約有20個左右。這就違返了安全加固主機要保持最小可用系統的設計原則,所以該部分監控軟件支撐環境的部署工作不作爲默認設置,但仍然通過下文給出了部署參考,以用於系統運行運維過程中需要部署全局性監控系統時使用。

 

1)安裝net-snmp服務

#yum -y install net-snmp

#chkconfig snmpd off     —將該服務設置爲默認關閉,這裏只是爲以後部署cacti先預置一個支撐環境

 

如果不能聯網安裝,則可以使用安裝光盤,並安裝以下幾個rpm包:

lm_sensors  , net-snmp  ,  net-snmp-libs  ,   net-snmp-utils

 

2)安裝nagios-plugin和nrpe

 

a. 增加用戶&設定密碼

# 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

這一步完成後會在/usr/local/nagios/下生成三個目錄include、libexec和share。

修改目錄權限

# 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

接下來安裝NPRE插件,daemon和示例配置文件。

c.1 安裝check_nrpe 這個插件

# make install-plugin

監控機需要安裝check_nrpe 這個插件,被監控機並不需要,在這裏安裝它只是爲了測試目的。

c.2 安裝deamon

# make install-daemon

c.3 安裝配置文件

# make install-daemon-config

現在再查看nagios 目錄就會發現有5個目錄了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章