首页/系统/Linux 运维命令速查//etc/login.defs 全局账号策略

/etc/login.defs 全局账号策略

login.defs 控制 useradd/passwd 的全局默认:UID/GID 范围、密码最大天数、umask、家目录创建策略;密码策略与等保的落点。

Linux 运维命令速查系统更新于 2026-10-13

login.defs 是什么

/etc/login.defs 是 shadow-utils 的全局配置文件,被 useradd、usermod、userdel、passwd、chage 等工具读取,用来决定 UID 与 GID 的分配区间、是否创建家目录、默认 umask、密码有效期等默认值。它属于「账号工具的默认参数」,不是认证机制:真正校验密码复杂度与登录规则的是 PAM。

基本信息

适用平台Linux(shadow-utils,Debian 系为 passwd 包,路径相同)
配置文件/etc/login.defs
影响工具useradd、usermod、passwd、chage、su 等
典型条目UID_MIN 与 UID_MAX、SYS_UID_MAX、GID_MIN、CREATE_HOME、UMASK、PASS_MAX_DAYS
生效方式立即对后续工具调用生效,无需重启;不影响已有账号

典型使用场景

  • 合规落地:设定密码有效期与最小修改间隔、过期前警告天数
  • 统一新建账号行为:强制创建家目录、固定 umask,避免各机器不一致
  • 账号区间规划:把业务账号固定在高位 UID 段,便于审计与批量管理
  • 排查「改了策略却不生效」:先确认是 login.defs 还是 PAM 在起作用
  • 迁移对齐:新老机器保持同一套默认值,减少账号属性差异

关键参数示例

关键参数示例
PASS_MAX_DAYS 90        # 密码最长有效期(天)
PASS_MIN_DAYS 7         # 两次修改的最小间隔,防止立刻改回去
PASS_WARN_AGE 14        # 过期前提前警告天数
CREATE_HOME yes         # useradd 默认创建家目录
UMASK 027               # 新建文件与目录的默认权限掩码
UID_MIN 1000            # 普通用户 UID 起始值
UID_MAX 60000           # 普通用户 UID 上限
SYS_UID_MAX 999         # 系统账号 UID 上限

查看与验证

查看与验证
grep -E '^(PASS_|UMASK|CREATE_HOME|UID_MIN|UID_MAX|SYS_UID_MAX)' /etc/login.defs
grep -v '^#' /etc/login.defs | grep -v '^$'    # 只看有效行
getent shadow alice | cut -d: -f1,3,4,5        # 核对账号实际落地的策略
chage -l alice                                 # 查看账号有效期现状

关键项与影响范围

配置项作用影响范围
PASS_MAX_DAYS密码最长有效期passwd 与 chage 计算过期时间;已有账号需单独 chage
PASS_WARN_AGE过期前警告天数登录时给出提示
CREATE_HOMEuseradd 是否默认创建家目录仅影响未显式指定 -m 或 -M 的创建操作
UMASK新建文件默认权限掩码经 PAM 登录时由 pam_umask 采用
UID_MIN 与 SYS_UID_MAX普通账号与系统账号的 UID 分界影响 useradd 自动分配 UID 的结果
login.defs 只影响创建与检查工具的默认值;密码复杂度、失败锁定、有效期是否真的强制执行,落在 PAM 配置上(常见的是 pam_pwquality 与 pam_unix 的对应参数)。改了这里却「没效果」,多半是没改到 PAM。
UMASK 只在通过 PAM 登录时由 pam_umask 采用;systemd 用户的默认 umask 由 logind.conf 的 DefaultUMask 决定,而服务进程会被单元里的 UMask= 覆盖。三处都可能有值,排查「新建文件权限不对」时都要确认。
验证策略是否真的落地,不要只看配置文件:chage -l 看某个账号的实际有效期,getent shadow 看密码最后修改时间,再新建一个测试账号看生成结果。三步走完才能确认「配置写了」和「账号上生效了」是一回事。

易错点

  • 改了 login.defs 不影响已有账号,存量账号要用脚本批量 chage 调整
  • CREATE_HOME 的默认值随发行版不同,跨发行版脚本显式带 -m 才稳妥
  • 现代系统上密码复杂度主要由 PAM 的 pwquality 决定,只改 login.defs 里相关项达不到要求
  • 调大 UID_MIN 前要确认高 UID 段没有被共享存储、NFS 或旧机器占用,否则会出现同 UID 不同人
  • 该文件是纯文本键值格式,写错行(拼写错误、字段顺序反了)会被静默忽略而不报错

数据来源与参考

  • man 5 login.defs
  • RHEL 安全指南:密码策略

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌