リモート制御のボットを使用して自動化を設定しています。これらのボットには、特定のコマンドを実行するための正確な権限しか持たないことが不可欠です(sudoers
で権限を開きすぎて、任意のコマンドを許可することはできません)。
それはうまく機能し、必要ないくつかのコマンドを設定し、Sudo
ingのときにNOPASSWD
ディレクティブを使用してパスワードの制限を回避できます(sudoers
ingのときにパスワードを入力する機会がないため)。 _ファイル。しかし問題がある。一部のスクリプト、特に一部で記述されたスクリプト... er、PHPフレームワーク...は、プロジェクトのルートと見なされる特定のディレクトリから実行されることを想定しています。
このディレクトリは、ほとんどの場合、別のユーザーwww-data
またはApache
によって所有されています。わかりました。ボットにこのユーザーとしてスクリプトを実行することを許可できますが、cd
を次のように含めることができないため、非対話型セッションで正しいパスにcd
することはできません。 sudoers
ファイル内のコマンド。
通常はcd /var/www/path/to/app && php whatever.php --some args
のようなものですが、sudoers
ファイルでこのパターンを設定する方法が見つからないため、不可能なようです。
これを回避する方法を知っていますか?
私が知っている唯一の回避策は、コードを含む小さなシェルスクリプトを作成し、ユーザー/ボットがスクリプトを実行できるようにすることです。
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