Linux等保三级整改

一、操作系统的检测

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次登录会卡住,限制登录
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片