sudoに切り替え先のユーザーのパスワードを尋ねさせる

sudoに切り替え先のユーザーのパスワードを尋ねさせる
sudo -u user1 command ...

現在のユーザーのパスワードではなく、sudoのパスワードを尋ねるようにするにはどうすればよいですか?user1


背景: これをユーザーが実行するGitフックで使用したいのですがgit、次のような感じになります。

echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"

使ってみたsu www -c "command ..."けど、

remote: su: must be run from a terminal

リポジトリにプッシュするとき。

答え1

できれば、暗号化されていないユーザーのパスワードをファイルシステムに保存するのは避けた方がよいでしょう。これは、git にあるコードの移植性にどの程度依存しているか、およびローカル ファイルシステムに保存できるものに依存しているかによって多少異なります。できるだけ制限されたコマンドで、NOPASSWD を指定した sudo を使用することをお勧めします。/etc/sudoers エントリを次のように作成します。

git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite

Where には、deploySiteユーザーが正しいディレクトリに移動していること、およびdeploy.shスクリプトに不審な点がないことを確認するためのさまざまなチェックが含まれています。

ユーザー git がユーザー www のアカウントを責任を持って使用すると信頼できる場合は、NOPASSWD:ALL を使用できます。ただし、基本的には、git にアップロードするアクセス権を持つすべてのユーザーが、ユーザー www として任意のコマンドを実行できるようにすることになります。

しかし、元の質問に答えると

sudo に、呼び出し元のユーザーではなく、ターゲット ユーザーのパスワードを尋ねさせることができます。次のような sudoers エントリを追加します。

Defaults:git targetpw

そうすると、ユーザー git は実行時にユーザー www のパスワードを入力する必要がありますsudo -u www ...

関連情報