Centos7等保三級整改項


一、操作系統的檢測

       文章如有所改動請移步到新連接:點擊此處

  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次登錄會卡住,限制登錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM