Authentication為什麼即使以 root 身份執行,
為什麼即使以 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 #
缺少 from
/etc/shadow
並不會阻止大多數其他使用者被su
-ed 到。我在嘗試時看到日誌條目:
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
您有一個
x
(大部分已過時的)密碼欄位/etc/passwd
。根據man 5 passwd
(在我的 Debian/Raspbian 機器以及線上)這意味著必須有一個相應的條目/etc/shadow
:如果密碼欄位是小寫的“x”,則加密密碼實際上儲存在 shadow(5) 文件中;中必須有對應的行
/etc/shadow file
,否則使用者帳號無效。我懷疑你打的是最後一個條款,“使用者帳戶無效”,並且
su
在謹慎方面犯了錯誤。範例(Raspbian)
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
缺少條目的文件。