`su`가 루트로 실행될 때에도 "su: 인증 실패" 메시지를 표시하는 이유는 무엇입니까?

`su`가 루트로 실행될 때에도 "su: 인증 실패" 메시지를 표시하는 이유는 무엇입니까?

약간 안에 있는 것 같은su 인증 실패 경고를 억제하는 방법은 무엇입니까?, 그러나 실제로는 명령을 전혀 실행하지 않습니다.

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

루트에서 실행할 때 인증을 확인해야 하는 이유는 무엇입니까?


대부분의 사용자에게는 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), 모든 명령은 루트로 실행됩니다.

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.

관련 정보