sudoを必要とする非対話型スクリプトを実行する最も安全な方法

sudoを必要とする非対話型スクリプトを実行する最も安全な方法

パスワードが必要なコマンドを実行したいのですが、非sudo対話式でパスワードを入力することはオプションではありません。私の特別なケースでは、SSHログインを介して私のサーバーでこのスクリプトを実行するために電話にボット/ショートカットを作成したいと思います。

私の場合は、ブート仮想マシンを使用したいと思いますvirsh start。ルート以外のユーザーがマシンを起動できるように設定できることを知っていますが、一般的にこのソリューションは不思議です。特に、root以外のオプションが利用できない場合は、さらにそうです。 -rootユーザーが使用します。

また、権限のないユーザーは、任意のコマンドではなく、私が定義した単一のスクリプトだけを実行できると思います。つまり、ユーザーは実行するスクリプトをトリガーできるだけです。パラメータを提供せず、そうする方法を見つけても、パラメータは無視されます。

また、私の場合は、サーバーが私だけを使用するためのものであり、ファイアウォールの背後にあります。インターネットに接続されていますが(資料をダウンロードできるため)、インターネットからアクセスできません。アクセスするにはLANにいるかVPNを介して接続している必要があり、自宅でのみこのスクリプトを使用したいと思います。それでも - ここで「良い習慣」を学ぶことができるか心配になります。

サーバー自体が Debian テストを実行しています。私の興味は、パスワードのないsudoを許可するのが危険に見えることです。理論的には、権限のないアカウントが特権スクリプトまたはコマンドを実行するより良い方法はありますか?root毎分生成される特定のファイルを監視し、そのスクリプトがそのタスクを実行するように実行するスクリプトが必要ですかtouchsudoこのスクリプトのみを実行できるユーザーを作成できますか?

答え1

編集用に特定sudoのユーザー(またはグループ)が名前付きコマンドを実行できるように設定できます。/etc/sudoersvisudo

user ALL = NOPASSWD: /path/to/command

ユーザーはパスワードを入力しなくてもuser実行できます。sudo /path/to/command

答え2

この場合、sudoがどのように機能するかを具体的に知ることはできませんが、ユーザーの対話に依存する多くのプログラムは、呼び出し時にttyに接続しないと失敗します。 「NOPASSWD」なしでsudoを作成し、cronまたはatで実行してテストするのは簡単です。

echo "sudo touch /tmp/writtenAsRoot" | at now

(入力を待っているかどうかを確認するには、「ps -ef | grep sudo」の出力を確認してください。)

ユーザーがsudo権限を持っていない場合は、潜在的なシナリオをテストすることもできます。

関連情報