#等保三级 - Linux 合规基线检查整改项

1、检查项目 : 设置密码复杂度及长度

加固建议:长度不少于8位, 复杂度包括:大小写字母、数字、特殊字符4选3

Centos7 修改/etc/security/pwquality.conf

Ubuntu 修改/etc/pam.d/common-password

# retry= N:定义登录/修改密码失败时,可以重试的次数;
# difok= N:定义新密码中必须有几个字符要与旧密码不同。但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;
# minlen = N:定义用户密码的最小长度;
# dcredit = N:定义用户密码中必须包含多少个数字;
# ucredit = N:定义用户密码中必须包含多少个大写字母;
# lcredit = N:定义用户密码中必须包含多少个小些字母;
# ocredit = N:定义用户密码中必须包含多少个特殊字符(除数字、字母之外);
# minclass = N:定义用户密码所需的最少字符类数
其中 =-1表示,至少有一个

sed -i 's/# minlen = 9/minlen = 8/' /etc/security/pwquality.conf
sed -i 's/# dcredit = 1/dcredit = -1/' /etc/security/pwquality.conf
sed -i 's/# ucredit = 1/ucredit = -1/' /etc/security/pwquality.conf
sed -i 's/# lcredit = 1/lcredit = -1/' /etc/security/pwquality.conf
sed -i 's/# ocredit = 1/ocredit = -1/' /etc/security/pwquality.conf

Centos6 修改/etc/pam.d/system-auth文件, 在password行之上增加下面这行

password    requisite     pam_cracklib.so try_first_pass retry=2 type=A+b+5+! difok=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1

2、检查项目 : 禁止ROOT直接SSH登录

加固建议:编辑配置文件/etc/ssh/sshd_config, 将PermitRootLogin yes改为PermitRootLogin no

(注意:禁止root账户登陆前确保有其他账户可以正常使用)

sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config

3、检查项目 : 登录失败处理功能(SSH连续N次登录失败,自动锁定X秒)

加固建议:编辑/etc/pam.d/sshd文件, 在非注释行的第一行(即#%PAM-1.0下面)添加以下行

(deny为连续失败次数,配置为3-8次,unlock_time为解锁时间,配置为600-1800秒)

auth required pam_tally2.so deny=5 even_deny_root unlock_time=900 root_unlock_time=900

4、检查项目 : 设置SSH空闲超时退出时间

加固建议: 编辑/etc/ssh/sshd_config

ClientAliveInterval 设置为300到900,即5-15分钟,

ClientAliveCountMax设置为0

ClientAliveInterval 900
ClientAliveCountMax 0

5、检查项目 : 禁止SSH空密码用户登录

加固建议: 在/etc/ssh/sshd_config中取消PermitEmptyPasswords no注释符号#

6、检查项目 : 确保SSH MaxAuthTries设置为3到6之间

加固建议: 在/etc/ssh/sshd_config

取消MaxAuthTries注释符号#,设置最大密码尝试失败次数3-6,建议为5:MaxAuthTries 5

7、检查项目 : SSHD强制使用V2安全协议

加固建议: 编辑/etc/ssh/sshd_config

文件以按如下方式设置参数:Protocol 2

8、检查项目 : 确保SSH LogLevel设置为INFO

加固建议: 编辑/etc/ssh/sshd_config 文件以按如下方式设置参数(取消注释): LogLevel INFO

9、检查项目 : 设置密码失效时间

加固建议: 在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间, 建议为90PASS_MAX_DAYS 90

需同时执行命令设置root密码失效时间: $ chage --maxdays 90 root

chage -l root # 查询用户的密码到期时间等信息

10、检查项目 : 设置密码修改最小间隔时间

加固建议: 在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为5-14之间, 建议为7PASS_MIN_DAYS 7

需同时执行命令为 root用户设置:$ chage --mindays 7 root

11、检查项目 : 设置用户权限配置文件的权限

加固建议: 执行以下5条命令

chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow

chmod 0644 /etc/group

chmod 0644 /etc/passwd

chmod 0400 /etc/shadow

chmod 0400 /etc/gshadow

12、检查项目 : 确保root是唯一的UID为0的帐户

加固建议: 除root以外其他UID为0的用户都应该删除,或者为其分配新的UID

cat /etc/passwd | awk -F: '($3 == 0) { print $1 }'|grep -v '^root$'

13、检查项目 : 确保三权分立账户存在

加固建议: 系统需要存在三个独立账户:运维管理员(op)、审计管理员(audit)、安全管理员(security), 并有不同的权限

useradd audit
usermod -G audit audit
useradd op
usermod -G op op
useradd security
usermod -G security security

14、检查项目 : 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计

加固建议:

  • 启用 auditd 服务
  • 启用 rsyslogsyslog-ng 服务
  • 确保收集用户的文件删除事件
  • 确保收集对系统管理范围(sudoers)的更改
  • 确保收集修改用户/组信息的事件 如使用了第三方日志收集服务,可自行举证并忽略此项。

安装audit服务

yum -y install audit
chkconfig --level 35 auditd on | systemctl enable auditd

将以下行添加到/etc/audit/rules.d/audit.rules/etc/audit/audit.rules 文件中

-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
-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
-w /etc/sudoers -p wa -k scope
-w /etc/sudoers.d/ -p wa -k scope

启动audit服务

systemctl restart auditd

(在通过rsyslog或者filebeat等收集工具将/var/log/audit/audit.log统一收集存储)