useradd 默认值从哪来
新建账号的默认家目录、登录 shell、骨架目录与过期策略,由 /etc/default/useradd(RHEL 系)、/etc/adduser.conf(Debian 系)以及 /etc/login.defs 共同控制。修改默认值比每次建号都带一堆参数省事,但这些改动只对之后创建的账号生效。
基本信息
| 用途 | 统一新账号的默认属性 |
|---|---|
| 查看方式 | useradd -D 打印当前默认值 |
| 配置文件 | /etc/default/useradd、/etc/adduser.conf、/etc/login.defs |
| 生效范围 | 仅影响之后创建的账号 |
典型使用场景
- 批量建号前统一默认 shell 与家目录位置
- 统一新账号的密码有效期与最小长度策略
- 调整骨架目录路径以配合自定义模板
- 排查新建账号属性与预期不一致的原因
- 在不同发行版之间迁移默认策略
- 审计默认策略是否符合安全基线
常用查看命令
| 命令 | 输出内容 | 用途 |
|---|---|---|
| useradd -D | RHEL 系默认参数 | 核对家目录、shell 与骨架路径 |
| chage -l 用户 | 单个账号的密码策略 | 验证默认值是否落实 |
| grep 项名 /etc/login.defs | 密码长度与有效期 | 审计密码策略基线 |
| grep 项名 /etc/adduser.conf | Debian 系默认值 | 跨发行版对照 |
查看与修改
查看与修改
useradd -D # 打印当前默认值
grep -E 'HOME|SHELL|SKEL|INACTIVE|EXPIRE' /etc/default/useradd
sudo useradd -D -s /bin/bash -b /home # 修改默认值
grep -E 'PASS_MAX_DAYS|PASS_MIN_LEN|PASS_WARN_AGE' /etc/login.defs
grep -E 'DHOME|DSHELL' /etc/adduser.conf # Debian 系的对应项
sudo useradd -m testuser && sudo chage -l testuser | head # 验证实际效果默认项与位置
| 项 | 作用 | 所在文件 |
|---|---|---|
| HOME | 默认家目录前缀 | /etc/default/useradd |
| SHELL | 默认登录 shell | /etc/default/useradd |
| SKEL | 骨架目录路径 | /etc/default/useradd |
| INACTIVE | 密码过期后禁用天数 | /etc/default/useradd |
| PASS_MAX_DAYS | 密码最长有效期 | /etc/login.defs |
改 /etc/login.defs 不会追溯已有账号:存量账号需要逐个用 chage 调整,或写脚本批量处理。
骨架目录里如果存在 .ssh 这类敏感配置,新账号会一并继承;交付前核对一遍,避免凭据随账号扩散。
Debian 系应优先看 adduser 的 /etc/adduser.conf(useradd 是更底层的命令):两个系统的默认文件不同,跨发行版脚本要分别处理。
改完默认值最踏实的验证方式是新建一个测试账号,再用 chage -l 与 ls -la 家目录逐项核对;只改文件不验证,很容易漏掉某个生效优先级更高的配置。
企业环境中这些默认文件往往由配置管理工具统一下发:手工修改后要同步到模板,否则下次推送会把改动覆盖回去。