Authentication

為什麼即使以 root 身份執行,su 也會給出“su:身份驗證失敗”?

  • April 21, 2020

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

引用自:https://unix.stackexchange.com/questions/581445