stdinがリダイレクトされるとsuがパスワードを要求するのはなぜですか?これをどのように避けることができますか?

stdinがリダイレクトされるとsuがパスワードを要求するのはなぜですか?これをどのように避けることができますか?

私は(この質問の目的にsu興味がない)次の動作を観察しています。sudo

$ su USER -s /bin/bash -c "echo hi"
hi
$ printf "" | su USER -s /bin/bash -c "echo hi"
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/null
Password: su: Authentication failure
$ su USER -s /bin/bash -c "echo hi" < /dev/tty
Password:
$ su USER -s /bin/bash -c "echo hi" < /dev/tty1
hi

標準入力をリダイレクトすると、パスワードプロンプトが表示される理由を生涯理解できません。私はsustdinがリダイレクトされたコンテキストでそれを使用しているので、これを避けることはできません。

その理由は何ですか、sustdinがリダイレクトされたときにプロンプ​​トを回避する方法は?

ベストアンサー1

明確にするために、OPはUSERアカウントにパスワードが設定されていないと述べました。

~からman pam_unixpam_unix下記のモジュールです):

だれ

このモジュールの基本的な作業は、公式のパスワードが空の場合、ユーザーがサービスにアクセスすることを許可しないことです。 nullokパラメーターはこのデフォルト値を無視し、空のパスワードを持つすべてのユーザーがサービスにアクセスできるようにします。

nullok_secure

このモジュールの基本的な作業は、公式のパスワードが空の場合、ユーザーがサービスにアクセスすることを許可しないことです。 nullok_secureパラメーターは、このデフォルト設定を無視して、PAM_TTY値が/ etc / securettyの値の1つに設定されている限り、nullパスワードを持つすべてのユーザーがサービスにアクセスできるようにします。

あなたnullok_secureのPAM設定が。

動作させるには、nullok_secure次のように置き換えます。nullokDebian では、/etc/pam.d/common-auth他の Unix や Linux ディストリビューションによって異なる場所(特定のファイルなどsu)に置くことができます。

追加の注:コマンドを使用するときにパスワードなしで成功するには、次のnullok_secure場所にあるTTYで実行する必要があります。/etc/securetty または欠落している/etc/securetty(これにより、「PAM_TTYが/ etc / securettyの値の1つに設定されている」は常にtrueになります)。 TTYがなければ、これは重要ではなく、常に失敗します。

おすすめ記事