ssh:对于一个非 root 用户而不是另一个用户,“PAM 帐户配置拒绝访问”

zwo*_*wol 28 remote-access ssh pam

在我正在初始化的 VM 上,我能够以一个非 root 用户 ( admin) 的身份登录,但不能以另一个 ( tbbscraper) 身份通过 SSH 使用公钥身份验证登录。我可以在任何日志文件中找到的唯一错误消息是

Sep 18 17:21:04 [REDACTED] sshd[18942]: fatal: Access denied for user tbbscraper by PAM account configuration [preauth]
Run Code Online (Sandbox Code Playgroud)

在客户端,该综合症是

$ ssh -v -i [REDACTED] tbbscraper@[REDACTED]
...
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: [REDACTED]
debug1: Authentications that can continue: publickey
debug1: Trying private key: [REDACTED]
debug1: read PEM private key done: type RSA
Connection closed by [REDACTED]
Run Code Online (Sandbox Code Playgroud)

将 'tbbscraper' 更改为 'admin' 允许成功登录:debug1: Authentication succeeded (publickey).出现而不是“连接关闭”消息。

这似乎不是权限问题...

# for x in admin tbbscraper
> do ls -adl /home/$x /home/$x/.ssh /home/$x/.ssh/authorized_keys
> done
drwxr-xr-x 3 admin admin 4096 Sep 18 17:19 /home/admin
drwx------ 2 admin admin 4096 Sep 18 16:53 /home/admin/.ssh
-rw------- 1 admin admin  398 Sep 18 17:19 /home/admin/.ssh/authorized_keys
drwxr-xr-x 3 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper
drwx------ 2 tbbscraper tbbscraper 4096 Sep 18 17:18 /home/tbbscraper/.ssh
-rw------- 1 tbbscraper tbbscraper  398 Sep 18 17:18 /home/tbbscraper/.ssh/authorized_keys

# cmp /home/{admin,tbbscraper}/.ssh/authorized_keys ; echo $?
0
Run Code Online (Sandbox Code Playgroud)

... 也不是 PAM 级别的访问控制问题 ...

# egrep -v '^(#|$)' /etc/security/*.conf
#
Run Code Online (Sandbox Code Playgroud)

......所以对类似问题的现有答案似乎都不适用。我得到的唯一其他证据是:

root@[REDACTED] # su - admin
admin@[REDACTED] $
Run Code Online (Sandbox Code Playgroud)

root@[REDACTED] # su - tbbscraper
su: Authentication failure
(Ignored)
tbbscraper@[REDACTED] $
Run Code Online (Sandbox Code Playgroud)

这表明存在一些更大规模的 PAM 问题,但我找不到/etc/pam.d. 有任何想法吗?

VM 是一个 EC2 实例,操作系统是 Debian 7.1(亚马逊的现成 AMI)。

zwo*_*wol 35

毕竟,结果是/etc/shadow. 指出不同:

admin:!:15891:0:99999:7:::
tbbscraper:!::15966:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)

没错,就tbbscraper行上感叹号后有两个冒号。这会将所有字段推到一个之上,并使 PAM 认为该帐户已于 1970 年 1 月 8 日到期。

  • 感谢发布。这对我很有用:我在 /etc/passwd 中手动创建了一个用户条目,但忘记添加相应的 /etc/shadow 条目。 (10认同)
  • @spazm 感谢您的评论。这对我很有用:我从另一台机器上手动复制了用户,但忘记复制一个没有密码的用户的 /etc/shadow 条目。 (6认同)

小智 9

感谢您发布您的问题。我遇到了同样的错误,但我的问题与影子文件无关。我找到了我的修复程序,并希望为其他任何在谷歌上搜索此错误的人发布答案。这个服务器故障问题首先出现。

尝试检查/etc/security/access.conf

我们使用 Active Directory 进行身份验证,但我需要以本地非 AD 用户 (jenkins) 身份登录。我的老板最初在以下内容中设置了带有以下行的框/etc/security/access.conf

+:root:ALL
-:ALL:ALL
Run Code Online (Sandbox Code Playgroud)

我将其更改为以下内容,现在可以登录了;我什至不需要重新启动任何服务。

+:jenkins:ALL
+:root:ALL
-:ALL:ALL
Run Code Online (Sandbox Code Playgroud)


kuz*_*uz8 5

就我而言,我正在重命名本地 CentOS 6 用户,并且忘记在 /etc/shadow 中重命名它们(他们是无密码密钥验证的,没有在我的脑海中弹出),因此新用户名的记录只是/etc/shadow 中不存在。在 /var/log/secure 中,它给了我 unix_chkpwd 错误并且 PAM 拒绝访问:

    unix_chkpwd[12345]: could not obtain user info (user2)
    sshd[12354]: fatal: Access denied for user user2 by PAM account configuration
Run Code Online (Sandbox Code Playgroud)


小智 5

有相同的错误消息。关闭 sshd 并以调试模式重新启动它

    /usr/sbin/sshd -ddd
Run Code Online (Sandbox Code Playgroud)

这表明了原因:

    debug3: User autossh not allowed because account is locked
            ...
    input_userauth_request: invalid user <username> [preauth]
Run Code Online (Sandbox Code Playgroud)

已查账户:

    passwd -S <username>
Run Code Online (Sandbox Code Playgroud)

这表明该帐户已被锁定(标志“L”)通过设置新密码解锁帐户:

    passwd <username>
Run Code Online (Sandbox Code Playgroud)

完毕。