草稿待审:shell/密码/SSH/PAM 四条已在 WSL Ubuntu-24.04 实际执行验证;cloud-init 部分基于官方文档核查,尚未实际执行。
刚执行 useradd 新建用户,su 或 SSH 被拒,本文梳理 6 个高频原因与对应修复。
TL;DR:先查三件事:shell 是否合法、密码是否设置、是否被锁定;再向下排查 SSH 限制、家目录权限、PAM 配置、cloud-init 限制。
—
1. 登录 shell 不合法
/etc/default/useradd 的 SHELL 指定新建用户的默认 shell [1],Ubuntu 24.04 为 /bin/sh。若后续通过 usermod -s /bin/false 修改,该用户将无法登录:
grep testuser /etc/passwd # 末尾字段即登录 shell
usermod -s /bin/bash testuser # 恢复为合法 shell
/bin/false 和 /usr/sbin/nologin 是系统预留的非登录 shell。/sbin/nologin 还会输出提示语,/bin/false 直接静默退出。
可用合法 shell 列表见 /etc/shells,修改 shell 前确认目标 shell 在该文件中。
—
2. 密码未设置或已过期
useradd 新建用户时密码字段为 !,表示无密码 [1],登录验证必然失败:
passwd testuser # 交互式设置密码
passwd -S testuser # P=可用, L=锁定, NP=无密码
chage -l testuser # 查看过期信息
chage -l 可查看过期信息 [2],passwd -S 用于查看密码锁定状态 [3]。
—
3. 账户被锁定
usermod -L 在密码前追加 ! [3],等效于”密码锁定”;usermod -U 移除前缀解锁:
passwd -S testuser # L=已锁定
usermod -U testuser # 解锁
grep testuser /etc/shadow # 确认无 ! 前缀
锁定与”无密码”不同:锁定用户知道密码,但系统拒绝验证;无密码则是密码字段为 ! 且账户从未设置密码。
—
4. SSH 服务限制
sshd_config 中的 AllowUsers、DenyUsers [4]、AllowGroups、DenyGroups 可显式放行或屏蔽账户。若服务器存在这些指令,新用户不在白名单内则无法通过 SSH 登录:
grep -E "^(AllowUsers|DenyUsers|AllowGroups|DenyGroups)" /etc/ssh/sshd_config
# 若有结果,确认目标用户是否在对应列表
systemctl reload sshd # 修改后重载,无需重启
Ubuntu 默认不启用上述指令;若此前管理员启用了 AllowUsers,新用户必须显式加入。
此外,/etc/pam.d/login 默认加载 pam_nologin.so:若 /etc/nologin 文件存在且非空,所有非 root 用户被拒绝本地登录。执行 ls /etc/nologin 检查,存在则 rm /etc/nologin 即可解除限制。
/etc/pam.d/sshd 和 /etc/pam.d/common-auth 也包含认证链模块。若管理员额外配置了 pam_access.so,需检查 /etc/security/access.conf。
—
5. 家目录权限错误
useradd -m 会创建 /home/<user> 并归属新用户,若手动修改后权限异常,PAM 模块可能拒绝登录:
ls -ld /home/testuser # 确认属主正确
若归属错误,执行 chown testuser:testuser /home/testuser 修复。实测 useradd -m 创建的家目录权限为 drwxr-x---,属主正确。
—
6. 云服务器 cloud-init 限制
AWS、阿里云等平台的 cloud-init 默认禁止 root SSH 登录,并在首次启动时将新用户标记为”需首次登录改密”:
执行 passwd -S ubuntu 查看用户状态(NP=无密码),chage -d 0 ubuntu 设置下次登录强制改密。
Debian/Ubuntu 官方 cloud-init 文档 [5] 指出:新实例启动后创建的用户密码状态为”locked”,首次 SSH 登录时 cloud-init 会提示改密并解锁。若跳过此步骤直接尝试无密码登录,会被拒绝。
—
排错速查表
| 现象 | 最可能原因 | 处理 |
|---|---|---|
su: user ... does not exist |
用户名拼写错误 | 核对 cat /etc/passwd |
This account is currently not available. |
shell 为 /bin/false 或 /sbin/nologin | usermod -s /bin/bash <user> |
Authentication failure |
密码未设置或锁定 | passwd <user>,usermod -U <user> |
Permission denied (publickey,password). |
SSH AllowUsers 限制 | 检查 sshd_config |
| 本地登录被拒但 su root 成功 | /etc/nologin 存在或家目录权限 |
ls /etc/nologin,chown 家目录 |
| 首次登录提示改密后再次被拒 | 密码过期规则 | chage -l <user>,chage -M 99999 <user> |
—
实测记录
- 测试机:WSL2 Ubuntu-24.04,systemd 启用(
/etc/wsl.confsystemd=true) - 测试日期:2026-11-02
- shell 修改验证:
usermod -s /bin/false→su静默退出,usermod -s /bin/sh→ 恢复正常 - 密码锁定验证:
usermod -L在 /etc/shadow 中追加!,passwd -S显示L;usermod -U恢复 - 家目录权限验证:
useradd -m创建目录权限为drwxr-x---,属主正确 - SSH 配置验证:
grep AllowUsers返回空(默认无限制) - PAM 验证:
/etc/pam.d/login含pam_nologin.so;/etc/nologin不存在时不影响登录
—
局限性
- WSL2 中 systemd 为轻量模式,PAM 行为可能与物理机略有差异。
- cloud-init 首次登录改密流程未在本地 WSL 完整复现,相关描述基于官方文档。
- 容器环境(Docker 无 systemd)下部分 systemd 相关限制不适用。
参考资料
- [1] useradd(8) – Linux manual page – man7.org(man7-useradd)
- [2] chage(1) – Linux manual page – man7.org(man7-chage)
- [3] passwd(1) – Linux manual page – man7.org(man7-passwd)
- [4] sshd_config(5) – Linux manual page – man7.org(man7-sshd)
- [5] Autoinstall quick start – Ubuntu installation documentation(ubuntu-cloudinit)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。