一、操作系統的檢測
文章如有所改動請移步到新連接:點擊此處
1、設置密碼安全策略
1)修改vim /etc/login.defs文件
#vim /etc/login.defs PASS_MAX_DAYS 90 # 密碼最長過期天數 PASS_MIN_DAYS 80 # 密碼最小過期天數 PASS_MIN_LEN 16 # 密碼最小長度 PASS_WARN_AGE 14 # 密碼過期警告天數
2)修改/etc/pam.d/system-auth文件
vim /etc/pam.d/system-auth 在 password requisite pam_cracklib.so 一行換成如下內容: password requisite pam_cracklib.so retry=5 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict 參數含義: 嘗試次數:5 ;最少不同字符:3 ;最小密碼長度:10 ;最少大寫字母:1;最少小寫字母:3 ;最少數字:3 ;字典位置:/usr/share/cracklib/pw_dict
2、查看是否存在特權用戶,通過判斷uid是否為0來查找系統是否存在特權用戶,使用命令awk即可查出
awk -F: '$3==0 {print $1}' /etc/passwd
3、查看是否存在空口令用戶
在/etc/passwd中用戶的密碼是被保護的狀態,即使用了*號來隱藏。而實際的密碼內容是加密后
保存在/etc/shadow文件中了,我們確認是否存在空口令的用戶就確認該文件中密碼對應字段的長度是否為0,
如果為0則證明該用戶密碼為空。
awk -F: 'length($2)==0 {print $1}' /etc/shadow
4、刪除多余的賬號
userdel uucp userdel nuucp userdel lp userdel adm userdel sync userdel shutdown userdel halt userdel news userdel operator userdel gopher userdel bin userdel mail userdel games userdel ftp userdel vcsa userdel abrt userdel ntp userdel saslauth userdel tcpdump
5、日志權限不得大於640 設置日志權限為640
chmod 640 /var/log/messages chmod 640 /var/log/secure chmod 640 /var/log/audit/audit.log
6、設置歷史命令的記錄為5條
sed -i 's/HISTSIZE\=1000/HISTSIZE\=5/g' /etc/profile
7、添加審計賬號
useradd audit
usermod -G audit audit
8、操作系統審計
安裝審計服務
yum -y install audit audit-libs-devel systemctl daemon-reload systemctl enable auditd
簡單版本:
vim /etc/audit/rules.d/audit.rules -a exit,always -F arch=b64 -S umask -S chown -S chmod -a exit,always -F arch=b64 -S unlink -S rmdir -a exit,always -F arch=b64 -S setrlimit -a exit,always -F arch=b64 -S setuid -S setreuid -a exit,always -F arch=b64 -S setgid -S setregid -a exit,always -F arch=b64 -S sethostname -S setdomainname -a exit,always -F arch=b64 -S adjtimex -S settimeofday -a exit,always -F arch=b64 -S mount -S _sysctl -w /etc/group -p wa -w /etc/passwd -p wa -w /etc/shadow -p wa -w /etc/sudoers -p wa -w /etc/ssh/sshd_config -w /etc/bashrc -p wa -w /etc/profile -p wa -w /etc/profile.d/ -w /etc/aliases -p wa -w /etc/sysctl.conf -p wa -w /var/log/lastlog # Disable adding any additional rules - note that adding *new* rules will require a reboot
詳細版本:
配置規則 cat >> /etc/audit/rules.d/audit.rules <<EOF ###記錄系統的日期和時間的修改 -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time-change -a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k timechange -a always,exit -F arch=b64 -S clock_settime -k time-change -a always,exit -F arch=b32 -S clock_settime -k time-change -w /etc/localtime -p wa -k time-change ####記錄用戶和組的修改的事件 -w /etc/group -p wa -k identity -w /etc/passwd -p wa -k identity -w /etc/gshadow -p wa -k identity -w /etc/shadow -p wa -k identity -w /etc/security/opasswd -p wa -k identity ####記錄網絡環境修改時間 -a always,exit -F arch=b64 -S sethostname -S setdomainname -k system-locale -a always,exit -F arch=b32 -S sethostname -S setdomainname -k system-locale -w /etc/issue -p wa -k system-locale -w /etc/issue.net -p wa -k system-locale -w /etc/hosts -p wa -k system-locale -w /etc/sysconfig/network -p wa -k system-locale -w /etc/sysconfig/network-scripts/ -p wa -k system-locale ####記錄登錄和登出事件 -w /var/log/lastlog -p wa -k logins -w /var/run/faillock/ -p wa -k logins ####記錄會話啟動事件 -w /var/run/utmp -p wa -k session -w /var/log/wtmp -p wa -k logins -w /var/log/btmp -p wa -k logins ####監視對文件權限、屬性、所有權和組的更改 -a always,exit -F arch=b64 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S chmod -S fchmod -S fchmodat -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b64 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S chown -S fchown -S fchownat -S lchown -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b64 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod -a always,exit -F arch=b32 -S setxattr -S lsetxattr -S fsetxattr -S removexattr -S lremovexattr -S fremovexattr -F auid>=1000 -F auid!=4294967295 -k perm_mod ####記錄未授權文件訪問嘗試 -a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access -a always,exit -F arch=b32 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access ####收集成功掛載磁盤事件 -a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=4294967295 -k mounts -a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=4294967295 -k mount ####收集用戶的文件刪除事件 -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete -a always,exit -F arch=b32 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete ####收集對系統管理范圍(sudoers)的更改 -w /etc/sudoers -p wa -k scope -w /etc/sudoers.d/ -p wa -k scope ####收集內核模塊加載和卸載 -w /sbin/insmod -p x -k modules -w /sbin/rmmod -p x -k modules -w /sbin/modprobe -p x -k modules -a always,exit -F arch=b64 -S init_module -S delete_module -k modules ####收集使用特權命令 -a always,exit -F path=/usr/bin/wall -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chfn -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chsh -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/su -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/chage -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/gpasswd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/newgrp -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/staprun -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/mount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/pkexec -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/umount -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/write -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/crontab -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/sudo -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/ssh-agent -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/bin/passwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/pam_timestamp_check -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/unix_chkpwd -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/netreport -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/usernetctl -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postdrop -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/sbin/postqueue -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/lib/polkit-1/polkit-agent-helper-1 -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/utempter/utempter -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/dbus-1/dbus-daemon-launch-helper -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged -a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F perm=x -F auid>=1000 -F auid!=4294967295 -k privileged EOF 然后重新加載規則 /sbin/augenrules --load
9、將/var/log/賦給audit
chown audit:audit -R /var/log chown root:root -R /var/log/audit
10、禁止root登陸
vim /etc/ssh/sshd_config
PermitRootLogin no
111、日志上傳服務器
vim /etc/rsyslog.conf *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages *.* @@172.16.x.xx:514 *.* @172.16.x.xx:514
12、ssh配置
修改/etc/ssh/sshd_config配置文件 ssh訪問控制 AllowUsers <userlist> AllowGroups <grouplist> DenyUsers <userlist> DenyGroups <grouplist> 配置加密算法 Ciphers aes256-ctr,aes192-ctr,aes128-ctr # 使用已批准的加密類型 MACs hmac-sha2-512,hmac-sha2-256 # 使用已批准的Mac算法 密碼驗證 PermitEmptyPasswords no # 禁止無密碼訪問服務器 PermitRootLogin yes # 是否禁止使用root登錄(為方便管理,暫未收回權限) 如果禁用root需要創建一個超級管理員。
openssh主機認證
HostbasedAuthentication no
限制用戶認證次數
MaxAuthTries 4 # 等保三要求該值小於等於 4 ssh空閑超時 ClientAliveInterval 300 # 小於等於300s ClientAliveCountMax 3 # 存活用戶數小於等於3
13、單個用戶做審計
cat >> /etc/profile <<EOFexport HISTTIMEFORMAT="[`whoami`] ${USER_IP} %F %T " history USER=`whoami` ##是從那個IP登錄的(例如是從堡壘機登錄服務器的) USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` if [ "$USER_IP" = "" ]; then USER_IP=`hostname` fi if [ ! -d /var/log/history ]; then mkdir /var/log/history chmod 777 /var/log/history fi if [ ! -d /var/log/history/${LOGNAME} ]; then mkdir /var/log/history/${LOGNAME} chmod 300 /var/log/history/${LOGNAME} fi export HISTSIZE=5 DT=`date +"%Y%m%d_%H:%M:%S"` export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT" chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null EOF source /etc/profile EOF ###修改過期用戶,並且配置最大的過期時間和警告天數 sudo cat /etc/shadow |grep -E -v ':(\*+|\!+):' |awk -F ':' '{print $1}'|xargs -I {} -n 1 sudo chage -M 90 -W 15 {}
a) 應對登錄的用戶進行身份標識和鑒別,身份標識具有唯一性,身份鑒別信息具有復雜度要求並定期更換;
在linux,設置密碼復雜度的方法有幾個 1. 一個是在/etc/login.defs文件,里面幾個選項 PASS_MAX_DAYS 90 #密碼最長過期天數 PASS_MIN_DAYS 80 #密碼最小過期天數 PASS_MIN_LEN 10 #密碼最小長度 PASS_WARN_AGE 7 #密碼過期警告天數 2. 另外一個方法是,修改/etc/pam.d/system-auth文件 找到 password requisite pam_cracklib.so這么一行替換成如下: password requisite pam_cracklib.so retry=5 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 dictpath=/usr/share/cracklib/pw_dict 參數含義: 嘗試次數:5 最少不同字符:3 最小密碼長度:10 最少大寫字母:1 最少小寫字母:3 最少數字:3
b) 應具有登錄失敗處理功能,應配置並啟用結束會話、限制非法登錄次數和當登錄連接超時自動退出等相關措施;
1.備份相關文件:
cp /etc/pam.d/sshd /etc/pam.d/sshd.bak
cp /etc/pam.d/login /etc/pam.d/login.bak
2.檢查是否有pam_tally2.so模塊
[root@mycloud security]# find /lib* -iname "pam_tally2.so" /lib64/security/pam_tally2.so [root@mycloud security]# find /lib* -iname "pam_tally.so" [root@mycloud security]# cat /etc/pam.d/sshd
3.終端登錄失敗處理功能
編輯系統/etc/pam.d/system-auth 文件,在 auth 字段所在的那一部分策 略下面添加如下策略參數:
auth required pam_tally2.so onerr=fail deny=3 unlock_time=40 even_deny_root root_unlock_time=30
說明:注意添加的位置,要寫在第一行,即#%PAM-1.0的下面。以上策略表示:普通帳戶和 root 的帳戶登錄連續 3 次失敗,就統一鎖定 40 秒, 40 秒后可以解鎖。如果不想限制 root 帳戶,可以把 even_deny_root root_unlock_time這兩個參數去掉, root_unlock_time 表示 root 帳戶的 鎖定時間,onerr=fail 表示連續失敗,deny=3,表示 超過3 次登錄失敗即鎖定。
4.遠程登錄失敗處理功能
上面只是限制了從終端登陸,如果想限制ssh遠程的話, 要改的是/etc/pam.d/sshd這個文件,添加的內容跟上面一樣!
如果在操作中間出現下面這個錯誤
Dec 7 15:06:51 iZ2zee7gmy40tbverl53rfZ sshd[15747]: PAM unable to dlopen(/lib64/security/pam_tally.so): /lib64/security/pam_tally.so: cannot open shared object file: No such file or directory Dec 7 15:06:51 iZ2zee7gmy40tbverl53rfZ sshd[15747]: PAM adding faulty module: /lib64/security/pam_tally.so 執行以下命令 [root@mycloud ~]# cd /lib64/security/ [root@mycloud ~]#ln -s pam_tally2.so pam_tally.so
5.配置連接超時自動退出功能
[root@mycloud /]$ cd ~ [root@mycloud ~]$ echo "TMOUT=300">>/etc/profile [root@mycloud ~]$ source /etc/profile
三、mysql數據庫
1、修改默認的root用戶
use mysql; update user set user='admin' where user='root'; flush privileges; ###以后登錄的時候就是用 mysql -uadmin -p登錄
2、添加審計功能
查看插件存放地: mysql> show global variables like 'plugin_dir'; 把解壓開的libaudit_plugin.so拷備到插件目錄下,並且給與+x權限,修改為屬主和組為mysql 在解壓開的utils目錄下 [root@edu-mysql-02 utils]# pwd /opt/audit-plugin-mysql-5.7-1.1.4-725/utils [root@edu-mysql-02 utils]# chmod +x offset-extract.sh [root@edu-mysql-02 opt]# which mysqld /usr/sbin/mysqld [root@edu-mysql-02 utils]# ./offset-extract.sh /usr/sbin/mysqld 獲取到一串的數字, 然后在/etc/my.cnf配置文件里面寫入 plugin-load=AUDIT=libaudit_plugin.so audit_offsets = 7824, 7872, 3632, 4792, 456, 360, 0, 32, 64, 160, 536, 7988, 4360, 3648, 3656, 3660, 6072, 2072, 8, 7056, 7096, 7080 audit_json_file = on audit_record_cmds = 'insert,delete,update,create,drop,alter,grant,truncate' 然后重啟mysql yum install gdb -y 然后再進入mysql mysql> install plugin audit soname 'libaudit_plugin.so'; 驗證: mysql> show plugins; mysql> show global status like 'AUDIT_version'; mysql> show variables like '%audit%'\G; 一般審計日志放在了數據庫的數據存放的路徑上也可以修改 mysql > set global audit_json_log_file='你想放置的路徑'; 縮減日志內容 mysql > set global audit_record_cmds = 'insert,delete,update'; 默認是所有的數據庫 audit_record_objs=null可以修改只是審計幾個數據庫或者那些表 mysql > set global audit_record_objs = 'mysql.*,test.*'; 白名單,那個不審計 mysql > set global audit_whitelist_users = 'z'; 查看審計的內容 cat /data0/mysql-data/mysql-audit.json
3、mysql登錄失敗限制
###登錄mysql管理用戶后 install plugin CONNECTION_CONTROL soname 'connection_control.so'; install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so'; ###查看是否已經安裝了插件,顯示為CONNECTION_CONTROL等 show plugins; 然后在/etc/my.cnf下添加 connection-control-failed-connections-threshold=5 #登陸失敗次數限制 connection-control-min-connection-delay=1800000 #限制重試時間,此處為毫秒,注意按需求換算 然后重啟mysql 再次登錄查看 show variables like '%connection_control%'; 驗證 輸錯5次后,第六次會發現第6次登錄會卡住,限制登錄
