首页 > Sysadmin > 正文

Linux 新建用户无法登录排查全指南

huyuanwen 2026-11-02 Sysadmin

草稿待审: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.conf systemd=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 相关限制不适用。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。