一、身份鉴别
1.1 密码复杂度及策略
第一种
修改 /etc/login.defs 文件内容即可
# 密码最大有效期
PASS_MAX_DAYS 90
# 两次修改密码的最小间隔时间
PASS_MIN_DAYS 90
# 密码最小长度,对于root无效
PASS_MIN_LEN 8
# 密码过期前 7 天开始提示
PASS_WARN_AGE 7
第二种
vim /etc/pam.d/system-auth
password requisite pam_pwquality.so try_first_pass local_users_only remember=5 retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-3 dcredit=-3 authtok_type=
retry 。就是说,如果用户输入的密码强度不够就退出。可以使用这个选项设置输入的次数,以免一切都从头再来。
remember=5 表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)
minlen=10 表示最小密码长度为 10 类型数量,这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果你的密码同时用上了这4种类型的符号,并且你的 minlen 设为10,那么最短的密码长度允许是6个字符。
ucredit=-1 表示密码必须至少包含一个大写字母
lcredit=-2 表示密码必须至少包含两个小写字母
dcredit=-1 表示密码必须至少包含一个数字
ocredit=-1 表示密码必须至少包含一个标点符号
dictpath 这个是验证用户的密码是否是字典一部分的关键。
remember=5 必须在每一行 password 中后 都要添加,否则不生效
1.2 登录超时,登录次数限制
CentOS中有一个pam_tally2.so的PAM模块,来限定用户的登录失败次数,如果次数达到设置的阈值,则锁定用户。
# 终端
vim /etc/pam.d/login
# ssh连接
vim /etc/pam.d/sshd
在 #%PAM-1.0 下添加如下
auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=120
在 -auth 下加入如下
account required pam_tally2.so
even_deny_root 也限制root用户;
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。
查看登录失败
[root@node102 sh]# pam_tally2 --user
Login Failures Latest failure From
xulei 31 01/20/21 17:43:14 192.168.200.89
删除数据
pam_tally2 -r -u user
会话超时
vim /etc/profile
单位秒
export TMOUT=900
source /etc/profile
二、访问控制
归根到底,访问控制里面的所有要求基本就是对不同的文件和进程进行权限控制,所以就需要我们对用户进行分组管理。
组
作用
数据库
只负责管理数据库的用户
服务
负责业务服务或其他组件的用户
安全
负责系统安全,日志审计登的用户
先添加组
添加用户,并分配到对应的组
给组分配权限
ACL
[root@node102 ~]# getfacl ./anaconda-ks.cfg
# file: anaconda-ks.cfg
# owner: root
# group: root
user::rw-
group::---
other::---
owner 为文件所属者
group 为文件所属组
user 代表文件所属者有 读写权限
group 组内的其他人不能操作该文件
other 其他人也不能操作该文件
三、安全审计
安全审计简单的来讲就是日志,操作日志,行为日志,失败日志等。按等保要求要满足以下几点:
启用安全审计功能
审计覆盖每个用户
审计内容应包括:具体时间、用户、事件类型、事件是否成功。
定期备份审计
对审计进程或文件给与不同的权限
audit
audit 主要用来记录安全信息,用于对系统安全事件的追溯;audit 来记录内核信息,包括文件的读写,权限的改变等。
查看 auditctl 是否启动
[root@node102 ~]# auditctl -s
enabled 1
failure 1
pid 838
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
loginuid_immutable 0 unlocked
里面的enabled的值即为auditd内核模块的状态,enabled 为 0 则代表auditd内核模块没有启动,系统不会记录任何信息。如果 enabled 为 1,则代表auditd内核模块正常开启,此时可以正常收集信息。如果 enabled 为 2,似乎是代表审计规则被锁定,不能修改升级规则。
而当enabled为1但auditd守护进程没有开启时,内核收集到的信息将会记录到写到/var/log/messages中。
当然,一般情况下不会出现这种状态,使用service auditd start或stop命令启动或停止auditd守护进程时,内核的状态和auditd守护进程的状态是一致的。 也就是start时,会开启auditd守护进程,同时auditd内核的enabled也会被设为1,stop时,也一样。
除非你使用auditctl -e命令特意去这么做:
[root@node102 ~]# service auditd stop
Stopping logging: [ 确定 ]
[root@node102 ~]# auditctl -e 1
enabled 1
failure 1
pid 0
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
是否覆盖到每个用户和是否对重要行为、事件进行审计
我们可以通过auditctl -l查看现在运行着的审计规则(默认是无规则):
[root@node102 ~]# auditctl -l
No rules
还可以通过查看/etc/audit/audit.rules文件,得到写在配置文件中的永久审计规则:
[root@node102 ~]# cat /etc/audit/audit.rules
## This file is automatically generated from /etc/audit/rules.d
-D
-b 8192
-f 1
实际运行的规则和配置文件中写的规则有什么区别吗?对于实际运行的规则,你可以临时的增加、删除、修改(服务重启就恢复原样)。 而对于写在配置文件中的规则,如果你修改了配置文件却没有重启服务,那么你修改的也不会生效。
audit的审计规则大概有两类:一类是对文件的监控,一类是对系统调用的监控。
例1:监控 /etc/my.cnf 文件,只要在文件加如以下内容
-w /etc/my.cnf -p wa
-w 路径
-p 权限 如果没有 -p 选项,则默认监视所有动作 rwxa(读、写、执行、修改文件属性)
-k 关键字
例2:监控系统调用行为,监视文件权限变化,因为改变权限必须调用umask
-a entry,always -S umask -S chown
-a always 总是记录审计;none 不记录;exit 行为完成后记录审计;entry 行为刚刚开始 时记录审计
-S 系统调用名称
-F 字段=值
-k 关键字
请查阅系统调用列表后决定监控那种行为,系统调用是底层的、全局性的,监控不合适的调用,会给系统带来巨大负担。
备份
复制以下脚本,并添加到定时任务中,每天执行一遍即可
#!/bin/bash
# 日志位置
FILE=/var/log/audit/audit.log
current_time=`date +%y%m%d`
cat $FILE |while read LINE
do
Udate=`echo $LINE|awk -F'[(.]+' '{print $2}'`
#Udate=`echo $LINE|awk -F. '{print $1}' | awk -F'(' '{print $2}'`
Cdate=`date -d @$Udate`
echo $LINE|sed "s/[0-9]\{10\}/$Cdate/" >> /home/sh/log/audit${current_time}.log
done
对于内容不理解的看这里
权限
audit.log 默认只有root有读写权限,其余人全没有
[root@node102 audit]# ll
total 13536
-rw-------. 1 root root 5456443 Jan 22 11:52 audit.log
-r--------. 1 root root 8388686 Oct 18 03:01 audit.log.1
audit.rules 默认如下,我们把组的读权限也去掉,保证绝对安全。(命令:chmod g-r audit.rules)
[root@node102 audit]# ll /etc/audit/audit.rules
-rw-r-----. 1 root root 81 Jun 15 2020 /etc/audit/audit.rules
然后就是我们每天的备份文件,权限也是一样,要么只给安全组用户可读权限,要么就只有管理员最高权限。
四、入侵防范
应遵循最小安装的原则,仅安装需要的组件和应用程序;
应关闭不需要的系统服务、默认共享和高危端口;
应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
一般我们安装的centos7及以上都是系统默认的软件以及端口,相对于来说一个刚装好的centos应该是安全的,所以我们只需要关注我们程序业务需要哪些端口或应用包即可。而防火墙应该都是默认开启原则,我们需要端口被允许访问的话,我建议使用 iptables 命令,写到一个脚本中,当启动的时候执行脚本就行。
写到这里就是目前能做到的,其余大家可以自己看看,有些需要购买杀毒软件装入。