web-dev-qa-db-ja.com

特定のパスからSudoを使用してコマンドを実行するにはどうすればよいですか?

リモート制御のボットを使用して自動化を設定しています。これらのボットには、特定のコマンドを実行するための正確な権限しか持たないことが不可欠です(sudoersで権限を開きすぎて、任意のコマンドを許可することはできません)。

それはうまく機能し、必要ないくつかのコマンドを設定し、SudoingのときにNOPASSWDディレクティブを使用してパスワードの制限を回避できます(sudoersingのときにパスワードを入力する機会がないため)。 _ファイル。しかし問題がある。一部のスクリプト、特に一部で記述されたスクリプト... er、PHPフレームワーク...は、プロジェクトのルートと見なされる特定のディレクトリから実行されることを想定しています。

このディレクトリは、ほとんどの場合、別のユーザーwww-dataまたはApacheによって所有されています。わかりました。ボットにこのユーザーとしてスクリプトを実行することを許可できますが、cdを次のように含めることができないため、非対話型セッションで正しいパスにcdすることはできません。 sudoersファイル内のコマンド。

通常はcd /var/www/path/to/app && php whatever.php --some argsのようなものですが、sudoersファイルでこのパターンを設定する方法が見つからないため、不可能なようです。

これを回避する方法を知っていますか?

1

私が知っている唯一の回避策は、コードを含む小さなシェルスクリプトを作成し、ユーザー/ボットがスクリプトを実行できるようにすることです。

Sudo cd /var/www/path/to/app && php whatever.php --some args

2つのコマンドであるため、機能しません。Sudoでは1つのコマンドを実行できます。しかし、これを小さなスクリプト(/var/www/scripts/something/script.shとしましょう)に入れると:

#!/bin/bash
cd /var/www/path/to/app && php whatever.php --some args

あなたはそれを使用して実行することができます

Sudo /var/www/scripts/something/script.sh
1
nStensen