1 身份鑒別
1.1 密碼安全策略
操作系統和數據庫系統管理用戶身份鑒別信息應具有不易被冒用的特點,口令應有復雜度要求並定期更換。
設置有效的密碼策略,防止攻擊者破解出密碼
1)查看空口令帳號並為弱/空口令帳號設置強密碼
# awk -F: '($2 == ""){print $1}' /etc/shadow
可用離線破解、暴力字典破解或者密碼網站查詢出帳號密鑰的密碼是否是弱口令
2)修改vi /etc/login.defs配置密碼周期策略
此策略只對策略實施后所創建的帳號生效, 以前的帳號還是按99999天周期時間來算。
3)/etc/pam.d/system-auth配置密碼復雜度:
在文件中添加如下一行:
password requisite pam_cracklib.so retry=3 difok=2 minlen=8 lcredit=-1 dcredit=-1
參數含義如下所示:
difok:本次密碼與上次密碼至少不同字符數
minlen:密碼最小長度,此配置優先於login.defs中的PASS_MAX_DAYS
ucredit:最少大寫字母
lcredit:最少小寫字母
dcredit:最少數字
retry:重試多少次后返回密碼修改錯誤
【注】用root修改其他帳號都不受密碼周期及復雜度配置的影響。
1.2 登錄失敗策略
應啟用登錄失敗處理功能,可采取結束會話、限制非法登錄次數和自動退出等措施。
遭遇密碼破解時,暫時鎖定帳號,降低密碼被猜解的可能性
1)方法一:/etc/pam.d/login中設定控制台;/etc/pam.d/sshd中設定SSH
/etc/pam.d/sshd中第二行添加下列信息
auth required pam_tally2.so deny=5 lock_time=2 even_deny_root unlock_time=60
###########參數解釋############
查看用戶登錄失敗次數
# pam_tally2 --user root
解鎖用戶
# pam_tally2 -r -u root
even_deny_root 也限制root用戶(默認配置就鎖定root帳號);
deny 設置普通用戶和root用戶連續錯誤登陸的最大次數,超過最大次數,則鎖定該用戶
unlock_time 設定普通用戶鎖定后,多少時間后解鎖,單位是秒;
root_unlock_time 設定root用戶鎖定后,多少時間后解鎖,單位是秒;
1.3 安全的遠程管理方式
當對服務器進行遠程管理時,應采取必要措施,防止鑒別信息在網絡傳輸過程中被竊聽。
防止遠程管理過程中,密碼等敏感信息被竊聽
執行如下語句,查看telnet服務是否在運行
禁止telnet運行,禁止開機啟動,如下圖:
2 訪問控制
應及時刪除多余的、過期的帳戶,避免共享帳戶的存在。
刪除或禁用臨時、過期及可疑的帳號,防止被非法利用。
主要是管理員創建的普通帳號,如:test
# usermod -L user 禁用帳號,帳號無法登錄,/etc/shadow第二欄顯示為!開頭
# userdel user 刪除user用戶
# userdel -r user將刪除user用戶,並且將/home目錄下的user目錄一並刪除
加固后如圖
3 安全審計
3.1 審核策略開啟
審計范圍應覆蓋到服務器和重要客戶端上的每個操作系統用戶和數據庫用戶;
開啟審核策略,若日后系統出現故障、安全事故則可以查看系統日志文件,排除故障、追查入侵者的信息等。
查看rsyslog與auditd服務是否開啟
rsyslog一般都會開啟,auditd如沒開啟,執行如下命令:
# systemctl start auditd
auditd服務開機啟動
# systemctl start auditd
3.2 日志屬性設置
應保護審計記錄,避免受到未預期的刪除、修改或覆蓋等。
防止重要日志信息被覆蓋
讓日志文件轉儲一個月,保留6個月的信息,先查看目前配置,
# more /etc/logrotate.conf | grep -v "^#\|^$"
需要修改配置為下圖所示:
4 入侵防御
操作系統遵循最小安裝的原則,僅安裝需要的組件和應用程序,並通過設置升級服務器等方式保持系統補丁及時得到更新。
關閉與系統業務無關或不必要的服務,減小系統被黑客被攻擊、滲透的風險。
禁用藍牙服務
# systemctl stop bluetooth
禁止藍牙開機啟動
5 系統資源控制
5.1 訪問控制
應通過設定終端接入方式、網絡地址范圍等條件限制終端登錄。
對接入服務器的IP、方式等進行限制,可以阻止非法入侵。
1) 在/etc/hosts.allow和/etc/hosts.deny文件中配置接入限制
最好的策略就是阻止所有的主機在“/etc/hosts.deny”文件中加入“ ALL:ALL@ALL, PARANOID ”,然后再在“/etc/hosts.allow” 文件中加入所有允許訪問的主機列表。如下操作:
編輯 hosts.deny文件(vi /etc/hosts.deny),加入下面該行:
# Deny access to everyone.
ALL: ALL@ALL, PARANOID
編輯hosts.allow 文件(vi /etc/hosts.allow),加入允許訪問的主機列表,比如:
ftp: 202.54.15.99 foo.com //202.54.15.99是允許訪問 ftp 服務的 IP 地址
//foo.com 是允許訪問 ftp 服務的主機名稱。
2) 也可以用iptables進行訪問控制
5.2 超時鎖定
應根據安全策略設置登錄終端的操作超時鎖定。
設置登錄超時時間,釋放系統資源,也提高服務器的安全性。
/etc/profile中添加如下一行
exprot TMOUT=900 //15分鍾
# source /etc/profile
改變這項設置后,必須先注銷用戶,再用該用戶登錄才能激活這個功能。
如果有需要,開啟屏幕保護功能
設置屏幕保護:設置 -> 系統設置 -> 屏幕保護程序,進行操作
6 最佳經驗實踐
對Linux系統的安全性提升有一定幫助。
6.1 DOS攻擊防御
防止拒絕服務攻擊
TCP SYN保護機制等設置
1)打開 syncookie:
# echo“1”>/proc/sys/net/ipv4/tcp_syncookies //默認為1,一般不用設置
表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防范少量SYN攻擊,默認為0,表示關閉;
2)防syn 攻擊優化
用vi編輯/etc/sysctl.conf,添加如下行:
net.ipv4.tcp_max_syn_backlog = 2048
進入SYN包的最大請求隊列.默認1024.對重負載服務器,增加該值顯然有好處.可調整到2048.
6.2 歷史命令
為歷史的命令增加登錄的IP地址、執行命令時間等
1)保存1萬條命令
# sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
2)在/etc/profile的文件尾部添加如下行數配置信息:
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}' |sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
##source /etc/profile讓配置生效