web-dev-qa-db-ja.com

rootとして実行している場合でも、 `su`が「su:Authentication failure」を返すのはなぜですか?

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- 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
3
Vi.

/etc/passwdの(ほとんど使用されなくなった)パスワードフィールドにxがあります。 man 5 passwd(私のDebian/Raspbianマシンと online )によると、これはmustが必要であることを意味します/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ファイルを修正できます。

3
roaima