关于Linux的不同版本操作系统,可能会存在差异(以下使用CentOS7)。
1. 设置系统账户
屏蔽系统账户
为防止通过常规方式登录系统,需要对用于服务或后台的系统账户(这类账户不需要登录功能)的Shell进行设置,以便无法通过SSH或本地终端登录系统。
#设置系统账户的Shell修改为/sbin/nologin
usermod -L -s /sbin/nologin systemaccount #systemaccount为系统账户
#查看当前账户的Shell
cat /etc/passwd | grep “systemaccount” #systemaccount为具体用户名
系统账户的id在0-999之间,root用户id为0。
2.设置口令
设置口令复杂度
通过配置/etc/pam.d/password-auth和/etc/pam.d/system-auth文件中pam_pwquality.so和pam_pwhistory.so模块实现。
pam_pwquality.so配置项说明
配置项 | 说明 |
minlen=x | 口令长度至少包含x个字符 |
minclass=x | 口令至少包含大写字母、小写字母、数字和特殊字符中的任意x种 |
ucredit=x | 口令包含任意x个大写字母 |
lcredit=x | 口令包含任意x个小写字母 |
dcredit=x | 口令包含任意x个数字 |
ocredit=x | 口令包含任意x个特殊字符 |
retry=x | 每次修改最多可以尝试x次 |
enforce_for_root | 本设置对root账户同样有效 |
usercheck=1 | 确保口令中不包含账号字符串 |
try_first_pass | 使用第一次输入的密码尝试认证 |
local_users_only | 仅对本地用户执行检查 |
控制标志说明
控制标志 | 说明 |
required | 该模块认证成功过程继续;若认证失败仍会处理余下模块 |
requisite | 该模块认证成功过程继续;若认证失败会终止处理余下模块 |
sufficient | 该模块的成功结果足以认证过程成功,忽略剩下的模块。如果失败,继续处理剩下的模块,不影响最终结果 |
optional | 成功与否不会影响最终结果 |
设置口令有效期
通过配置/etc/login.defs文件实现。
配置项 | 说明 |
PASS_MAX_DAYS | 口令最大有效期 |
PASS_MIN_DAYS | 两次修改口令最小间隔 |
PASS_WARN_AGE | 口令过期前开始提示天数 |
设置口令加密算法
通过配置改/etc/pam.d/password-auth和/etc/pam.d/system-auth 文件实现。
3.设置su命令
限制su命令
通过配置/etc/pam.d/su文件实现。
仅允许wheel组成员能su命令切换到root用户
加固su命令
防止切换用户将当前用户变量带入其他环境
通过设置/etc/login.defs文件实现。
ALWAYS_SET_PATH=yes/no
4.设置登录
禁止root本地登录
设置/etc/pam.d/system-auth文件,在account模块添加pam_access.so模块,且在sufficient控制行之前加载。
#检查是否设置了对root用户登录tty的限制
grep "^-:root" /etc/security/access.conf
多次登录失败设置
通过设置/etc/pam.d/password-auth和/etc/pam.d/system-auth文件实现
配置项 | 说明 |
authfai | 捕获用户登录失败的事件 |
deny=x | 用户连续登录失败次数超过x次即被锁定 |
unlock_time=x | 普通用户自动解锁时间为x秒 |
even_deny_root | 同样限制 root 账户 |