一、账号管理
1、口令锁定策略
基线检查:
查看文件more /etc/pam.d/password-auth
判定条件:是否存在以下内容
auth required pam_tally2.so deny=5 onerr=fail unlock_time=300 even_deny_root=5 root_unlock_time=600
安全加固:
(1)执行备份
(2)修改策略,编辑文件,增加以上内容。
ps:如果要对root用户生效,请在内容后继续添加:
even_deny_root=5 root_unlocak_time=600
查询被锁定的账号:
pam_tally2 -u
手动解锁某个被锁定账号:
pam_tally2 -u 用户名 -r
2、口令生存期
基线检查:
查看文件more /etc/login.defs
判定条件:检查参数值是否满足要求
PASS_MAX_DAYS用户密码最长使用天数不大于90
PASS_WARN_AGE用户密码到期提前提醒天数为7
安全加固:
(1)执行备份
(2)修改策略,编辑文件,增加以下内容,如果存在则修改。
PASS_MAX_DAYS 90
PASS_WARN_AGE 7
执行命令:修改已有用户的口令生存期和过期告警天数
chage -M 9 -W 7 username
3、口令复杂度
基线检查:执行命令查看是否有返回结果
grep -E "^minlen|/^minclass" /etc/security/pwquality.conf
判定条件:
有返回结果等于或大于,则合规。minlen=8,minclass=3。
安全加固:
(1)执行备份
(2)执行命令:
authconfig --passminlen=8 --passminclass=3 --update
至少包含数字、小写字母、大写字母、特殊字母三项,且长度大于等于8。
4、检查密码重用是否受限制
基线检查:查看文件
cat /etc/pam.d/system-auth
找到password sufficient pam_unix.so这行
判定条件:
检查末尾是否有remember参数,有参数且值大于等于5合规
安全加固:
(1)备份
(2)执行命令,编辑文件:
vim /etc/pam.d/system-auth
找到password sufficient pam_unix.so这行
末尾添加remember参数且值等于5
它表示禁止使用最近用过的五个密码(使用过的密码会保存在/etc/security/opasswd下面)。
5、检查是否存在除root之外UID为0的用户
基线检查:执行命令查看返回值
awk -F:'($3 == 0){print $1}' /etc/passwd
判定条件:
返回值包括root以外的条目,则低于安全要求
安全加固:
(1)备份
(2)执行命令
userdel -r username删除返回值除root外的用户
usermod -u uid username为他们分配新的UID
6、禁止存在空密码的账号
基线检查:执行命令
awk -F:'($2 == ""){print $1}' /etc/shadow
判定条件:
执行命令后没有返回值合规
安全加固:
为账户设置满足密码复杂度的密码:
passwd username
二、服务管理
1、禁止SSH空密码用户登录
基线检查:执行命令
more /etc/ssh/sshd_config
判定条件:
查看PermitEmptyPasswords的值是no则合规。
安全加固:
1、备份
2、将其值改为no
3、systemctl restart sshd
2、SSH多次登录失败后锁定用户
基线检查:执行命令
more /etc/pam.d/sshd
判定条件:
查看是否存在
auth required pam_tally2.so deny=5 unlock_time=300
deny小于等于5,unlock_time大于等于300则合规
安全加固:
1、备份
2、编辑/etc/pam.d/sshd,将上述内容添加。
备注:如果要对root用户也限制,继续添加:
even_deny_root=5 root_unlock_time=1200
3、限制root用户远程登录
基线检查:执行命令
more /etc/ssh/sshd_config
查看PermitRootLogin参数的值
判定条件:
PermitRootLogin参数值为no且该行没有被注释则合规。
安全加固:
1、备份
2、编辑/etc/ssh/sshd_config找到PermitRootLogin将其后面的yes改为no,并删除前面的#
3、systemctl restart sshd
4、检查SSH使用的端口
基线检查:执行命令
more /etc/ssh/sshd_config
查看port的值
判定条件:
Port参数值不是默认值(22)且该行没有被注释则合规
安全加固:
1、编辑/etc/ssh/sshd_config找到port将其后方的22改为其他端口号,然后删除#注释。
2、执行命令:semanage port -a -t ssh_port_t tcp 修改后的端口号
将修改后的端口添加到SELinux开放给ssh使用的端口
3、执行命令:firewall-cmd --zone=public --add-port=ssh 端口号/tcp --permanent
防火墙放行刚修改的ssh端口
4、执行命令:systemctl restart sshd; systemctl restart firewalld
重启ssh和防火墙。
5、设置登录超时自动注销
基线检查:执行命令
more /etc/profile 查看是否有export TMOUT=180
判定条件:
存在export TMOUT且他的值小于等于180则合规
安全加固:
1、备份
2、编辑/etc/profile在该文件末尾添加export TMOUT=180或者将原来的值改为180。
三、权限管理
1、检查默认umask的值
基线检查:执行命令
more /etc/profile 查看该文件末尾是否设置umask值
判定条件:
文件末尾存在umask 027则合规
安全加固:
1、备份
2、编辑/etc/profile 在文件末尾添加umask 027。
3、source /etc/profile
2、检查重要目录和文件的权限设置
基线检查:执行命令
ls -l /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/hosts.allow /etc/hosts.allow /etc/services /etc/ssh/sshd_config查看文件权限。
判定条件:符合以下条件
/etc/passwd文件的权限<=644
/etc/shadow文件的权限<=600
/etc/group文件的权限<=644
/etc/gshadow文件的权限<=600
/etc/hosts.deny文件的权限<=644
/etc/hosts.allow文件的权限<=644
/etc/services文件的权限<=644
/etc/ssh/sshd_config文件的权限<=600
以上条件同时满足则合规,否则不合规。
安全加固:
对不符合要求的文件使用chmod命令修改权限。
3、限制可以su为root的用户
基线检查:执行命令
more /etc/pam.d/su 找到auth required pam_wheel.so use_uid查看该行是否存在且是否被注释
判定条件:
auth required pam_wheel.so use_uid存在且没有被注释则合规
安全加固:
1、备份
2、编辑/etc/pam.d/su找到该值,删除前面的#使其生效,如果不存在则添加该值。
3、将需要su为root的用户使用命令:usermod -G wheel username 加入 wheel 组,该用户即可su为root用户。如果需要将某个用户移出wheel组,可使用命令:gpasswd -d username wheel
四、日志管理
1、检查rsyslog服务启用状况以及对登录事件的记录
基线检查:执行命令
more /etc/rsyslog.conf查看authpriv的值
判定条件:
authpriv的值为authpriv.* /var/log/secure则合规
注:/var/log/secure为可变项
安全加固:
1、备份:cp - p /etc/rsyslog.conf /etc/rsyslog.conf. bak
2、执行命令:systemctl enable rsyslog 添加开机自启动
、执行命令:systemctl start rsyslog 启动服务
4、执行命令:vi/etc/rsyslog.conf 查看authpriv值 将其设置为 authpriv.*/var/log/secure
将 authpirv 的任何级别的信息记录到 /var/log/secure 文件中
5、执行命令:systemctl restart rsyslog
2、检查是否启用记录定时任务行为日志功能
基线检查:执行命令
more /etc/rsyslog.conf查看cron的值
判定条件:
corn值为cron.*则合规
安全加固:
1、执行备份:cp -p /etc/rsyslog.conf /etc/rsyslog.conf_bak
2、执行命令:vi /etc/rsyslog.conf 查看 cron 的值,将其设置为
cron.* /var/log/cron
#即将 cron 的任何级别的信息记录到 Nvar/log/cron 文件中
3、执行命令:systemctl restart rsyslog 重启 rsyslog 使配置生效
3、查看SSH LogLevel设置是否为INFO
基线检查:执行命令
more /etc/ssh/sshd_config找到LogLevel
判定条件:
LogLevel的级别是INFO且未被注释则合规
安全加固:
1、执行命令:vi /etc/ssh/sshd_config 找到 LogLevel 将其设置为 INFO,如果
该行被注释,还应删掉该行前方的#
2、执行命令:Systemctl restart sshd 重启ssh服务使其生效
4、是否将/var/log/messages文件设置为只可追加
基线检查:执行命令
lsattr /var/log/messages查看该文件属性第六位是否为a
判定条件:
第六位为a则合规。
安全加固:
执行命令:lsattr /var/log/messages 查看该文件属性第六位是否为a
不为a则执行命令:chattr +a /Nar/log/messages 将该文件的属性修改
为只可追加