有点像如何抑制 su 身份验证失败警告?,但它实际上根本不运行该命令。
# su limited
su: Authentication failure
# su -s /bin/bash limited
su: Authentication failure
# su -s /bin/bash - limited
su: Authentication failure
Run Code Online (Sandbox Code Playgroud)
为什么从 root 运行时需要检查身份验证?
对于大多数用户来说su
确实可以正常工作。
# grep limited /etc/passwd
limited:x:1001:1001::/home/limited:/bin/bash
# grep limited /etc/shadow
#
Run Code Online (Sandbox Code Playgroud)
失踪并/etc/shadow
不能阻止大多数其他用户被su
加入。
当我尝试时,我看到日志条目:
Apr 21 10:43:18 thehostname su: FAILED SU (to limited) root on pts/110
Run Code Online (Sandbox Code Playgroud)
# 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
Run Code Online (Sandbox Code Playgroud)
您x
在 的(大部分已过时)密码字段中有一个/etc/passwd
。根据man 5 passwd
(在我的 Debian/Raspbian 机器上以及在线),这意味着中必须有相应的条目/etc/shadow
:
\n\n如果密码字段是小写\xe2\x80\x9cx\xe2\x80\x9d,则加密后的密码实际上存储在shadow(5)文件中;中必须有相应行
\n/etc/shadow file
,否则用户帐户无效。
我怀疑您触犯了最后一条“用户帐户无效”,并且su
过于谨慎。
示例 (Raspbian),所有命令均以 root 身份运行
\ngrep test.: /etc/passwd\ntest1:x:1005:1005:Test 1:/home/test1:/bin/bash\ntest2:x:1006:1006:Test 2:/home/test2:/bin/bash\n\ngrep test.: /etc/shadow\ntest1:!:18373:0:99999:7:::\n\nsu test1 -c id\nuid=1005(test1) gid=1005(test1) groups=1005(test1)\n\nsu test2 -c id\nsu: Authentication failure\n
Run Code Online (Sandbox Code Playgroud)\n解决方案似乎是不在密码字段x
中使用passwd
或在 中添加相应的条目/etc/shadow
。(请注意,将密码字段设置为/etc/passwd
空可能会允许用户无需密码即可登录。相反,请使用!
,这会将帐户标记为锁定。)
您应该能够使用该pwconv
命令来修复/etc/shadow
缺少条目的文件。
归档时间: |
|
查看次数: |
27528 次 |
最近记录: |