1.補丁安裝
1.1 系統補丁升級
編號
名稱
系統補丁
實施方案
#yum -y update
升級所有包,改變軟件設置和系統設置,系統版本內核都升級
#yum -y upgrade
升級所有包,不改變軟件設置和系統設置,系統版本升級,內核不改變
實施目的
可以使系統版本最新並解決安全問題。
實施要求
一般漏洞在三個月內完成修復,重大漏洞在一個月內完成修復,緊急漏洞當天完成修復。
實施風險
慎重對系統打補丁,補丁安裝先先在測試機上完成。補丁安裝可能導致
系統異常或無法啓動。
回退方案
驗證方法
2.升級openssl和openssh
編號
名稱
升級openssl和openssh
實施方案
1.安裝zlib
下載安裝包:wget http://www.zlib.net/zlib-1.2.11.tar.gz
(1)安裝zlib-1.2.11
sudo tar -zvxf zlib-1.2.11.tar.gz
cd zlib-1.2.11
sudo ./configure --prefix=/usr/local/zlib --shared
sudo make
sudo make install
(2)安裝zlib-devel
sudo yum -y install zlib-devel
2.升級openssl
注意:我們當前使用的是openssl1.0.2系列的版本,版本會隔一段時間升級一次,當前是openssl-1.0.2k版本,下次可能是更新的版本,升級時需要到openssl官網下載最新的版本來安裝。
下載安裝包:wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
sudo tar -zvxf openssl-1.0.2k.tar.gz
sudo cd openssl-1.0.2k
sudo ./config shared --prefix=/usr/local/ssl_1.0.2k \
--openssldir=/usr/local/ssl_1.0.2k zlib-dynamic
sudo make
sudo make install
備份openssl舊版本的相關文件
sudo mv /usr/bin/openssl /usr/bin/openssl.bak
sudo mv /usr/include/openssl /usr/include/openssl.bak
鏈接新版本的文件
sudo ln -s /usr/local/ssl_1.0.2k/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl_1.0.2k/include/openssl /usr/include/openssl
#設置庫文件路徑。
sudo vim /etc/ld.so.conf,在文件最後寫入/usr/local/ ssl_1.0.2k /lib
執行:
sudo ldconfig
注意,如果後面要部署nginx等使用到openssl可文件的程序,則需要引用openssl新版本的庫文件。
3.升級openssh
注意:openssh版本會隔一段時間升級一次,當前是openssh-7.4p1版本,下次可能是更新的版本,升級時需要到openssh官網下載最新的版本來安裝。
下載安裝包:
wget http://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-7.4p1.tar.gz
(1)卸載舊版openssh程序
rpm -e rpm -qa | grep openssh
--allmatches –nodeps
備份原ssh配置
sudo mkdir /etc/sshbak
sudo mv /etc/ssh/* /etc/sshbak/
(2)安裝 pam-devel
sudo yum install -y pam-devel
(3)安裝openssh
sudo tar -zvxf openssh-7.4p1.tar.gz
cd openssh-7.4p1
sudo ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl_1.0.2k/ --with-md5-passwords --mandir=/usr/share/man
sudo make
sudo make install
生成ssh服務管理腳本
sudo cp ./openssh-7.4p1/contrib/redhat/sshd.init /etc/init.d/sshd
sudo chmod +x /etc/init.d/sshd
sudo chkconfig --add sshd
sudo /etc/init.d/sshd start
Starting sshd: [ OK ]
sudo ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k 1 Mar 2016
(3)配置ssh的pam認證文件
查看/etc/pam.d/目錄下是否有sshd文件,如果沒有,則執行
sudo mv /etc/pam.d/sshd.rpmsave /etc/pam.d/sshd
注意:升級openssh後,登記該主機時可能會出現
RSA host key has changed錯誤
解決方法:在源主機上編輯/home/用戶賬號/.ssh/known_hosts文件,將包含有目標主機(升級了openssh版本的那臺主機)的IP的所在行刪掉,保存退出編輯即可。
實施目的
解決openssl和openssh低版本存在安全漏洞問題
實施要求
實施風險
在升級過程中可能導致ssh會話中斷連接不上目標主機,如果是無法通過VMware vSphere Client進行終端管理的主機,建議先安裝啓用telnet服務,能通過telnet服務連接後再升級openssh,成功升級openssh服務後,再卸載telnet服務。
回退方案
通過備份的配置文件進行回退
驗證方法
執行ssh –V
如果顯示的是所安裝的版本,則說明升級成功。
3.賬號、口令策略
3.1賬號最小化
編號
名稱
賬號最小化
實施方案
Linux下多餘可關閉的用戶如下:
IP,news,uucp,games,ftp
#groupdel (ip news uucp,games)
#userdel(ip,news,uucp,games)
更改一些用戶shell
chmod -s /bin/nologin ftp
實施目的
去除不需要的賬號,更改危險賬號缺省的shell
實施要求
實施風險
應當明確系統的角色,避免誤刪除默認賬號
回退方案
恢復默認配置
驗證方法
cat /etc/passwd
3.2設置密碼過期策略
編號
名稱
設置密碼過期策略
實施方案
備份配置文件
sudo cp -a /etc/login.defs /etc/login.defs.bak
修改/etc/login.defs文件如下:
sudo vi /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 6
PASS_MIN_LEN 8
PASS_WARN_AGE 30
參數說明:
PASS_MAX_DAYS 密碼有效期
PASS_MIN_DAYS 修改密碼的最短期限
PASS_MIN_LEN 密碼最短長度
PASS_WARN_AGE 密碼過期前提前提醒時間
實施目的
定期更換密碼,保護口令安全
實施要求
90天需要更換密碼,密碼最小長度要求8位以上
實施風險
口令過期前應修改密碼,tomcat用戶可能不可用,導致堡壘機腳本失敗
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/login.defs |grep PASS_MAX_DAYS
3.3超時自動註銷登錄
編號
名稱
超時自動註銷登錄
實施方案
如果用戶在離開系統前忘記註銷賬戶,將會帶來很大的安全隱患,應讓系統自動註銷。
#vi /etc/profile
增加或修改文件
export TMOUT=300
HISTFILESIZE=100
HISTSIZE=100
實施目的
避免用戶忘記註銷登錄,減少安全隱患
實施要求
登錄超時時間5分鐘,歷史命令記錄數100條
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/profile |grep TMOUT
3.4增強密碼加密算法
編號
名稱
增強密碼加密算法
實施方案
sudo authconfig --test |grep password
查看系統加密算法,如果爲MD5則需要改爲sha512
需要root用戶實施:
authconfig --passalgo=sha512 --enablenis –update
如果實施過程中NIS服務不能自動啓動,則需要手動重啓NIS服務:
service ypbind restart
實施目的
增強密碼加密算法,提升系統密碼安全性
實施要求
將密碼加密算法升級到sha512
實施風險
實施過程當中,會關閉NIS服務,NIS服務關閉後如未能再次成功啓動,此時用戶則不能同時NIS認證登錄系統,僅可以通過本地用戶登錄。
回退方案
還原回MD5
還原:authconfig --passalgo=md5 --enablenis --update
驗證方法
sudo authconfig --test |grep password
3.5密碼複雜度
編號
名稱
密碼複雜度
實施方案
sudo cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
sudo vi /etc/pam.d/system-auth
針對centos或者redhat 6.X版本
將
password requisite pam_cracklib.so retry=3 minlen=8 difok=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
改成
password requisite pam_cracklib.so minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
針對centos 7.X版本
將
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
改成
password requisite pam_pwquality.so try_first_pass local_users_only retry=1 dcredit=-1 lcredit=-1 ocredit=-1 minlen=8 difok=5 authtok_type=
備註:
minlen=8:最小長度8位
difok=5:新、舊密碼最少5個字符不同
dcredit=-1:最少1個數字
lcredit=-1:最少1個小寫字符,(ucredit=-1:最少1個大寫字符)
ocredit=-1:最少1個特殊字符
retry=1:1次錯誤後返回錯誤信息
type=xxx:此選項用來修改缺省的密碼提示文本
實施目的
防止系統弱口令和口令破解,減少安全隱患
實施要求
密碼最短要求8位,並必須至少同時含有1個數字,1個小寫字母,1個特殊符號。新、舊密碼最少5個字符不同。
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/pam.d/system-auth
3.6記住5個歷史密碼
編號
名稱
記住5個歷史密碼
實施方案
sudo vi /etc/pam.d/system-auth
在這行password sufficient pam_unix.so sha512 shadow nis nullok try_first_pass use_authtok
的後面添加remember=5
實施目的
防止系統弱口令和口令破解,減少安全隱患
實施要求
對密碼進行修改時,不允許設置與此前5個相同的密碼。
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/pam.d/system-auth
3.75次登陸失敗鎖定賬戶
編號
名稱
5次登陸失敗鎖定賬戶
實施方案
針對login進程登錄:
sudo vim /etc/pam.d/system-auth
在#%PAM-1.0的下面,即第二行,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
針對SSH進程登錄:
sudo cp -a /etc/pam.d/sshd /etc/pam.d/sshd.bak
sudo vim /etc/pam.d/sshd
在#%PAM-1.0的下面,即第二行,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
實施目的
防止系統弱口令和口令破解,減少安全隱患
實施要求
5次登錄失敗,鎖定賬號30分鐘。
實施風險
合法用戶忘記密碼多次輸入錯誤導致賬號被鎖
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/pam.d/system-auth
#cat /etc/pam.d/sshd
3.8 使用PAM禁止不相關人員su爲root
編號
名稱
使用PAM禁止不相關人員su爲root
實施方案
#sudo cp -a /etc/pam.d/su /etc/pam.d/su.bak
#sudo vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
Uncomment the following line to implicitly trust users in the "wheel" group.
auth sufficient pam_wheel.so trust use_uid
Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so
將這行的註釋去掉
#auth required pam_wheel.so use_uid
這表明只有wheel 組的成員可以使用su 命令成爲root 用戶
實施目的
避免無關人員可以su爲root,減少安全隱患。
實施要求
只有加入wheel組的人員才能su爲root。
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
#cat /etc/pam.d/su
4.網絡與服務加固
4.1禁止不必要的服務
編號
名稱
禁止不必要的服務
實施方案
Telnet,rsh,ldp,lpd,krb5-telnet,pcmcia
1、#chkconfig --list
1、#service 服務名 stop
3、#chkconfig --level 35 服務名 off
實施目的
禁用系統開機時啓動不需要的服務,減少安全隱患。避免敏感信息泄露
實施要求
實施風險
該服務或與之相關的服務不可用
回退方案
驗證方法
4.2 SSH安全配置
編號
名稱
SSH安全配置
實施方案
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo vi /etc/ssh/sshd_config
使用版本2
Protocol 2
禁止root通過ssh登錄
PermitRootLogin no
採用PAM模塊進行認證
UsePAM yes
允許密碼認證
PasswordAuthentication yes
使用密鑰進行身份驗證
PubkeyAuthentication yes
禁止空密碼登錄
PermitEmptyPasswords no
關閉ssh的tcp轉發
AllowTcpForwarding no
關閉S/KEY(質疑-應答)認證方式
ChallengeResponseAuthentication no
關閉基於GSSAPI 的用戶認證
將GSSAPIAuthentication yes參數,改成
GSSAPIAuthentication no
保存配置文件,並重啓ssh服務
sudo /etc/init.d/sshd restart
實施目的
使用加密協議登錄系統,避免密碼被監聽
實施要求
禁止root通過ssh遠程登錄系統,增強系統安全性
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
4.3設置登錄警告語
編號
名稱
設置登錄警告語
實施方案
#vi /etc/ssh/sshd_conf
把Banner /some/path修改爲 Banner /etc/ssh/alert
建立alert 文件
sudo vim /etc/ssh/alert
增加內容如入:
Warning!!!Any Access Without Permission Is Forbidden!!!
sudo service sshd restart(重啓sshd 服務)
實施目的
設置登錄警告語,明確系統歸宿,同時對非法登錄用戶起到震懾作用。
實施要求
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
5.安全性增強
5.1新建文件權限增強
編號
名稱
新建文件權限增強
實施方案
1.備份配置文件
sudo cp -a /etc/bashrc /etc/bashrc.default
2.編輯配置文件
sudo vim /etc/bashrc
在文件末尾增加參數
umask 027
3.保存配置文件
- 備份配置文件
sudo cp -a /etc/profile /etc/profile.default
5.編輯配置文件
sudo vim /etc/profile
在文件末尾增加參數
umask 027
6.保存配置文件
實施目的
設置新建文件權限,減少信息泄露風險
實施要求
實施風險
可能存在這樣的情況,web服務器使用非root啓動,但應用目錄的所有者爲root,web服務用戶將無法訪問在應用目錄下新建的文件。
回退方案
將變更參數還原或者使用備份文件恢復
驗證方法
5.2關鍵文件屬性增強
編號
名稱
關鍵文件屬性增強
實施方案
sudo chattr +a /var/log/messages
sudo chattr +a /var/log/secure
sudo chattr +a /var/log/wtmp
sudo chmod +t /tmp
sudo chmod 644 /var/log/wtmp
sudo chmod 644 /var/run/utmp
chmod -R 700 /etc/init.d/*
touch /root/.rhosts /root/.netrc /etc/hosts.equiv
chmod 0 /root/.rhosts /root/.netrc /etc/hosts.equiv
備註:
chattr +a
設定該參數後,只能向文件中添加數據,而不能刪除,多用於服務器日誌文件安全,只有root才能設定這個屬性。
chmod +t 設置粘着位,除文件所有者外,其他用戶不能刪除
實施目的
防止重要的日誌文件被篡改
實施要求
實施風險
實施chmod -R 700 /etc/init.d/*後,/etc/init.d目錄下的程序僅能通過root管理
回退方案
可通過chattr -a 取消a屬性
可通過chattr -i 取消i屬性
驗證方法
5.3賬號安全
編號
名稱
關鍵文件屬性增強
實施方案
chattr +i /etc/passwd
參數說明:
i:設定文件不能被刪除、改名、設定鏈接關係,同時不能寫入或新增內容。i參數對於文件 系統的安全設置有很大幫助。
實施目的
防止被非法創建系統賬號
實施要求
實施風險
不能創建系統賬號,如果在應用程序安裝時,要自動創建賬號,則需要將該屬性去掉。
回退方案
執行chattr -i /etc/passwd
驗證方法
5.4設置history 歷史命令時間戳
編號
名稱
設置history 歷史命令時間戳
實施方案
sudo cp -p /etc/profile /etc/profile.bak
sudo vim /etc/profile
在文件最後添加
export HISTTIMEFORMAT="%F %T whoami
"
實施目的
便於日誌審計和事件追查。
實施要求
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
5.5使PATH環境變更不包含當前目錄”.”
編號
名稱
使PATH環境變更不包含當前目錄”.”
實施方案
echo $PATH
修改環境變更,去除”.”部分
/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.6.0_45/bin:/usr/local/bin:/root/bin
實施目的
防止執行惡意特洛伊×××,減少安全隱患
實施要求
實施風險
無
回退方案
驗證方法
echo $PATH
5.6禁用control-alt-delete鍵盤關機命令
編號
名稱
禁用control-alt-delete鍵盤關機命令
實施方案
centos 6.x以上版本
修改/etc/init/control-alt-delete.conf文件
找到如下行在本行前面加“#”註釋掉命令功能
#exec /sbin/shutdown -r now "Control-Alt-Delete pressed"
centos 5.x:
vim /etc/inittab
找到:ca::ctrlaltdel:/sbin/shutdown -t3 -r now,在本行前面加“#”註釋掉命令功能
實施目的
增加系統安全性,降低安全隱患
實施要求
禁止ctl-alt-del使用在控制檯按ctl-alt-del不能重啓計算機
實施風險
無
回退方案
還原變更的參數值
驗證方法
5.7設置系統啓動時運行等級
編號
名稱
設置系統啓動時運行等級
實施方案
編輯/etc/inittab 文件:
id:5:initdefault:
改爲:
id:3:initdefault:
注:5 爲帶X-Windows 桌面系統的運行級別,3 爲多用戶運
行級別。
實施目的
最小化系統服務,降低安全隱患
實施要求
確保系統運行在級別3
實施風險
無
回退方案
還原變更的參數值
驗證方法
5.8隱藏系統提示信息
編號
名稱
隱藏系統提示信息
實施方案
隱藏Linux系統發行版的名稱、版本、內核版本、服務器的名稱
刪除/etc目錄下的isue.net和issue文件:
#rm -f /etc/issue
#rm -f /etc/issue.net
實施目的
減少系統提示信息,降低安全隱患。
實施要求
實施風險
無
回退方案
驗證方法
5.9NTP時間同步
編號
名稱
NTP時間同步
實施方案
0 /8 /usr/sbin/ntpdate 172.16.100.1; /sbin/hwclock –w
注意:實際的NTP服務器可能與這裏設置的不一樣,根據實際的NTP服務器IP來配置。
實施目的
統一時間,防止因時間不一致導致的審計和訂單錯誤
實施要求
每8小時同步一次時間
實施風險
無
回退方案
驗證方法
5.10設置grup密碼
編號
名稱
設置grup密碼(進入單用戶模式密碼)
實施方案
備份配置文件
sudo cp -p /boot/grub/menu.lst /boot/grub/menu.lst.bak
grup密碼使用MD5加密成密碼序列
sudo grub-md5-crypt
Password: ---此處輸入密碼
Retype password:
設置grup密碼
sudo vim /boot/grub/menu.lst
在splashimage=(hd0,0)下面添加
password --md5 xxxxxxxx (xxxxxxxx爲上面的密碼序列)
注意:如果設置了grup密碼,則需要做好記錄,以免關鍵時刻無法從單用戶模式進入系統。
實施目的
防止惡意用戶在本地通過單用戶模式登錄系統做非法操作
實施要求
實施風險
無
回退方案
還原變更的參數值或者使用備份文件進行還原
驗證方法
5.11日誌集中存儲
編號
名稱
日誌集中存儲
實施方案
#vi /etc/rsyslog.conf
增加一行:
. @172.16.200.5
注意:實際的日誌服務器的IP地址跟這裏配置的不一樣,根據實際的IP地址來配置。
實施目的
日誌集中發送到日誌服務器存儲,方便審計和日誌保留。
實施要求
實施風險
無
回退方案
驗證方法
5.12防惡意代碼軟件
編號
名稱
防惡意代碼軟件
實施方案
安裝ossec在/usr/local下
實施目的
文件一致性監控和報警
實施要求
監控系統重要文件的變更,如果是應用服務器,要監控應用服務器的目錄,
設置腳本,在diff目錄超過5G時,停止服務並刪除diff文件,防止因監控目錄過大導致的系統故障
實施風險
無
回退方案
驗證方法
5.13 DNS配置
編號
名稱
DNS配置
實施方案
#vi /etc/reslov.conf
nameserver 172.16.100.53
nameserver 114.114.114.114
nameserver 8.8.8.8
nameserver 58.60.188.178
search dinpay.com
options attempts:2
options timeout:2
實施目的
統一DNS解析,防止因修改DNS配置而導致的異常
實施要求
需要連接數據庫的主機,需要在第一行配置nameserver 172.16.100.53
實施風險
無
回退方案
驗證方法
5.14限制可使用sudo的用戶和命令
編號
名稱
限制可使用sudo的用戶和命令
實施方案
#vi /etc/sudoers
User_Alias ADMINS=fxg,cqs,hjt,bzy,wxl,pb
Cmnd_Alias CMD=/bin/vi,/bin/cat,/bin/more,/bin/ls
root ALL=(ALL) ALL
ADMINS ALL=(root) NOPASSWD: ALL,!/usr/bin/passwd
ADMINS ALL=(tomcat) NOPASSWD: ALL
實施目的
限制可使用sudo的用戶和命令,減少權限隱患
實施要求
實施風險
無
回退方案
驗證方法
5.15系統備份
編號
名稱
系統備份
實施方案
安裝bacula客戶端,設置備份目錄
實施目的
對裝有應用和系統配置文件進行備份,用於系統恢復。
實施要求
實施風險
無
回退方案
驗證方法
5.16系統監控
編號
名稱
系統監控
實施方案
安裝Zabbix客戶端
實施目的
對裝有應用和系統配置文件進行備份,用於系統恢復。
實施要求
監控系統本身和應用的端口
實施風險
無
回退方案
驗證方法
5.17腳本文件
編號
名稱
腳本文件
實施方案
實施目的
統一腳本放置目錄,方便管理
實施要求
腳本文件統一放在/usr/local/script目錄下,如果需要每日執行的,放在/etc/cron.daily目錄下
實施風險
無
回退方案
驗證方法
5.18日誌切割
編號
名稱
日誌切割
實施方案
例:
vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log{
daily
dateext
rotate 360
copytruncate
compress
notifempty
missingok
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ];then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}
實施目的
對Nginx和Tomcat日誌進行壓縮切割,防止日誌無限增大
實施要求
日誌保留1年後轉移到離線硬盤。
實施風險
無
回退方案
驗證方法
5.19 /etc/hosts配置
編號
名稱
/etc/hosts
實施方案
實施目的
實施要求
爲避免出現IP域名不一致的情況,原則上除了200網段的主機其它網段或公網的域名一率通過dns進行解析,不允許通過/etc/hosts進行解析,如果有例外,記錄在本文檔最後例外記錄裏。
實施風險
回退方案
驗證方法
4.20 NIS集中身份認證
編號
名稱
NIS集中身份認證
實施方案
#vi /etc/yp.conf
domain dinpay.com server 172.16.200.3
#vi /etc/rc.d/rc.local
/bin/nisdomainname dinpay.com
vi /etc/nsswitch.conf
passwd: files nis
shadow: files nis
hosts: files nis dns
#chkconfig ypbind on
實施目的
統一系統賬號管理
實施要求
實施風險
回退方案
驗證方法