Linux安全策略
零、 说明
仅在 CentOS7 下测试, 理论上适用RHEL系列
适用于 二级等保, 三级等保, 阿里云安全基线检查
一、 系统用户密码策略相关
Linux对应的密码策略模块有:pam_passwdqc.so
和 pam_pwquality.so
密码复杂度: pam_pwquality.so
模块对应文件的是 /etc/security/pwquality.conf
密码有效期: pam_passwdqc.so
模块对应文件的是 /etc/login.defs
针对密码复杂度, 推荐编辑pam配置文件/etc/pam.d/system-auth-ac
去引用pam_pwquality.so
也可以直接编辑 /etc/security/pwquality.conf
但 “禁止使用最近三次使用过的密码” 就无法在 pwquality.conf
配置
1.1 密码复杂度
示例: 要求所有用户密码复杂度达到
- 至少15个字符
- 至少包含一个大写字符
- 至少包含一个数字
- 至少包含一个小写字母
- 至少包含一个特殊字符
- 拒绝包含连续相同字符超过5个
- 允许与原密码相同的字符不超过3个
- 禁止使用最近24次使用过的密码
方法一: 编辑配置文件: /etc/pam.d/system-auth-ac
注释15行, 并添加如下两行
line16:
password requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root minlen=15 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=5 retry=3 difok=3 |
或
password requisite pam_pwquality.so try_first_pass local_users_only enforce_for_root minlen=15 minclass=4 maxrepeat=5 retry=3 difok=3 |
line17:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=24 |
方法二: 编辑配置文件 /etc/security/pwquality.conf
修改下面参数
retry=3
: 定义登录 / 修改密码失败时,可以重试的次数minlen=8
: 密码最小长度为 8 个字符lcredit=-1
: 密码应包含的小写字母的至少1个ucredit=-1
: 密码应包含的大写字母至少1个dcredit=-1
: 将密码包含的数字至少为1个ocredit=-1
: 设置其他符号的最小数量,例如 @,#、! $%等,至少要有1个minclass=3
: 所需字符类最小数量(大写, 小写, 数字, 其他)enforce_for_root
: 即使是 root 用户设置密码,也应强制执行复杂性策略检查maxrepeat=5
: 拒绝包含超过相同连续字符个数difok=3
: 允许不超过与原密码相同的字符个数remember=24
: 禁止使用最近24次使用过的密码
注意关于上述参数的负数解释, 详见引用
pam_pwquality.so
相关错误日志: /var/log/secure
1.2 密码有效期
修改配置文件: /etc/login.defs
注意: 该配置文件对所有用户生效, 若只想针对某个用户生效, 使用命令 chage
一般设置如下:PASS_MAX_DAYS 90
对应命令为: chage --maxdays 90 root
PASS_MIN_LEN 12
PASS_MIN_DAYS 7
对应命令为: chage --mindays 7 root
PASS_WARN_AGE 30
对应命令为: chage --warndays 7 root
UMASK 077
推荐修改/etc/login.defs
后, 再使用chage
执行相应的命令
参数 | 值 | 含义 |
---|---|---|
MAIL_DIR |
/var/spool/mail |
创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp |
PASS_MAX_DAYS |
99999 |
密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效 |
PASS_MIN_DAYS |
0 |
表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0 |
PASS_MIN_LEN |
5 |
指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效 |
PASS_WARN_AGE |
7 |
指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天 |
UID_MIN |
500 |
指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从551 开始,哪怕 500~549 之间的 UID 没有使用 |
UID_MAX |
60000 |
指定用户最大的 UID 为 60000 |
GID_MIN |
500 |
指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始 |
GID_MAX |
60000 |
用户 GID 最大为 60000 |
CREATE_HOME |
yes |
指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes |
UMASK |
077 |
用户主目录的权限默认设置为 077 |
USERGROUPS_ENAB |
yes |
指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes |
ENCRYPT_METHOD |
SHA512 |
指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密 |
1.3 空密码账户
查找空密码账户: awk -F: '($2 == "") {print $1}' /etc/shadow
锁定该账户: passwd -l 用户名
1.4 UID 为0的账户
查找 UID为0的账户: awk -F: '$3 == 0' /etc/passwd
Linux 系统中 UID为0的账户为root, 如果发现UID为0而不是root账户, 应该立即删除此账户或者修改该账户的UID不为0
删除用户: userdel 用户名
二、 SSH 服务相关策略
编辑配置文件: /etc/ssh/sshd_config
ClientAliveInterval = 600 服务器向客户端发送请求以确认客户端是否仍然活跃的时间间隔(单位:秒) |
三、 安全审计
3.1 开启日志审计
systemctl enable rsyslog --now
systemctl enable auditd --now
四、 权限相关
4.1 敏感文件及目录
chown root:root /etc/hosts.allow |
4.2 系统账户三权分立
普通用户: ordinary
useradd ordinary |
审计用户: auditors
useradd auditors |
安全用户: security
useradd security |
注意: 三个用户的密码应符合1.1和1.2这两条策略
五、 入侵防范
5.1 开启地址空间布局随机化
编辑配置文件/etc/sysctl.conf
添加参数: kernel.randomize_va_space = 2
使其生效: sysctl -p