一、操作系统的检测
更多最新更新:请点击这里
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 <=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访问控制 AllowUsersAllowGroups DenyUsers DenyGroups 配置加密算法 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 </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次登录会卡住,限制登录