有点像在如何抑制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
缺少条目的文件。