为什么即使以 root 身份运行,`su` 也会给出“su:身份验证失败”?

为什么即使以 root 身份运行,`su` 也会给出“su:身份验证失败”?

有点像在如何抑制su身份验证失败警告?,但它实际上根本不运行该命令。

# su limited
su: Authentication failure
# su -s /bin/bash limited
su: Authentication failure
# su -s /bin/bash - limited
su: Authentication failure

为什么从 root 运行时需要检查身份验证?


对于大多数用户来说su确实可以正常工作。

# grep limited /etc/passwd
limited:x:1001:1001::/home/limited:/bin/bash
# grep limited /etc/shadow
#

失踪并/etc/shadow不能阻止大多数其他用户被su加入。

当我尝试时,我看到日志条目:

Apr 21 10:43:18 thehostname su: FAILED SU (to limited) root on pts/110
# egrep -v '^#|^$' /etc/pam.d/su
auth       sufficient pam_rootok.so
session       required   pam_env.so readenv=1
session       required   pam_env.so readenv=1 envfile=/etc/default/locale
session    optional   pam_mail.so nopen
session    required   pam_limits.so
@include common-auth
@include common-account
@include common-session

答案1

x在 的(大部分已过时)密码字段中有一个/etc/passwd。根据man 5 passwd(在我的 Debian/Raspbian 机器上以及在线的)这意味着有必须是 中的相应条目/etc/shadow

如果密码字段是小写的“x”,那么加密密码实际上存储在 shadow(5) 文件中;中必须有相应的行/etc/shadow file,否则用户帐户无效。

我怀疑你符合最后一个条款,“用户帐户无效”,并且su过于谨慎。

示例 (Raspbian),所有命令均以 root 身份运行

grep test.: /etc/passwd
test1:x:1005:1005:Test 1:/home/test1:/bin/bash
test2:x:1006:1006:Test 2:/home/test2:/bin/bash

grep test.: /etc/shadow
test1:!:18373:0:99999:7:::

su test1 -c id
uid=1005(test1) gid=1005(test1) groups=1005(test1)

su test2 -c id
su: Authentication failure

解决方案似乎是不在密码字段x中使用passwd或在 中添加相应的条目/etc/shadow。 (请注意,将密码字段设置为/etc/passwd空可能会允许用户无需密码即可登录。相反,请使用!,这会将帐户标记为锁定。)

您应该能够使用该pwconv命令来修复/etc/shadow缺少条目的文件。

相关内容