「リバースsudo」はありますか? [コピー]

「リバースsudo」はありますか? [コピー]

ルート権限を持つさまざまなコンピュータで実行されるスクリプトがありますが、ルートなしでスクリプトの特定のコマンドを実行したいとします。

それは可能ですか?

答え1

両方suそしてsudoこれは可能です。デフォルトでは、別のユーザーとしてコマンドを実行します。 「他のユーザー」はルートですが、どのユーザーでも構いません。例えば、

sudo -u www-data ls

lsユーザーとして実行されますwww-data


しかし...

一般的なアプローチは、呼び出すユーザーとしてスクリプトを実行し、sudo必要なコマンドと共に使用することです。sudo資格情報はキャッシュされるため、メッセージは最大1回表示されます。

答え2

sudo環境変数SUDO_COMMANDSUDO_GIDおよび SUDO_UIDをエクスポートしますSUDO_USER

呼び出しユーザーを使用SUDO_USERまたは返すことができます。SUDO_UID

sudo -u "$SUDO_USER" an_unprivileged_command

答え3

sudosuより良いアクセス制御を備えた拡張バージョンです。すでにroot実行している場合は、su手間をかけずにこれを実行できます。

#!/bin/sh -e
echo -n "Script User:          " && id -un
echo -n "Other user:           " && su blrfl -c "id -un"
echo -n "Back to script user:  " && id -un

実行すると、次のようになります。

Script User:          root
Other user:           blrfl
Back to script user:  root

答え4

私は同意するAlex Pの答え通常、rootではなくユーザーとして実行し、必要なコマンドに対してのみsudoを呼び出す必要があります。ホワイトリストはブラックリストよりも常に安全です。

AlexPの答えに加えて:sudoユーザーが実行できないことに気づく前に、多くのことを行わずにsudo破損した状態を生成しないように、スクリプトの一番上でこれを呼び出すことができます。そのためsudo、必要に応じてスクリプトの上部に以下を配置することをお勧めします。

#!/bin/bash

sudo true || exit 1

# … other code …

これにより、すぐにパスワードを要求し(必要な場合)、失敗するとスクリプトの実行が中断されますsudo

関連情報