ユーザーのホームディレクトリでいくつかのコマンドを実行するスクリプトがあります。ファイルはユーザーによって所有され、Apache(_www-data
_グループ)はそれらに対する読み取り特権のみを持っています。スクリプトは、PHP via exec()
)によってオンデマンドで実行する必要があり、Apacheにはディレクトリへの書き込み権限がないため失敗するファイルの削除/展開を実行します。
私はsudoers
ファイルを次のように編集してみました:
_www-data ALL=(user) NOPASSWD: /bin/su user -c /home/user/bin/script.sh
_
ユーザーのパスワードを要求する
私も試しました
_www-data ALL=(root) NOPASSWD: /usr/bin/Sudo su user -c /home/user/bin/script.sh
_
しかし、それは_www-data
_のSudo
パスワードを要求します
パスワードなしでこれを機能させるにはどうすればよいですか?
最後にそれをこの行で動作させました:
www-data ALL=(ALL) NOPASSWD: /usr/bin/Sudo -u user /home/user/bin/script.sh
スクリプトに引数が必要なため、行の最後に「シェルスタイルのワイルドカード」を追加する必要がありました。
www-data ALL=(ALL) NOPASSWD: /usr/bin/Sudo -u user /home/user/bin/script.sh [[\:alpha\:]]*
それは正確に私が探していたものではありませんが、それは機能します(つまり、私の引数がアルファベット文字で始まる場合がありますが、実際には式が英数字、ダッシュ、ピリオドのみに一致するようにしたいと思います)。
私はシェルのワイルドカードとPOSIX文字クラスにまったく詳しくありません。私が使用するものは、基本的にsudoersのマニュアルからコピーして貼り付けたものです。これらがこの種の問題にどのように適用されるかを知っている人は、コメントを残してください!
なぜsudo内でsuを実行しているのですか? (さらに悪いことに、Sudo内のSudo)
www-data ALL=(user) NOPASSWD: /bin/bash /home/user/bin/script.sh
これはうまくいくはずです。
Apacheユーザーが指定したユーザーにSudoを実行してすべてのコマンドを実行できるようにするために、これとは異なるアプローチをとっています(または、1つまたはいくつかしか必要ない場合はリストを指定できます)。
APACHEUSER ALL=(USERNAME) ALL
Defaults:APACHEUSER targetpw
Defaults:APACHEUSER !requiretty
これにより、次のコードを使用してパスワードをコードから送信できます(データベースから読み取るなど)。
echo password | Sudo -u username -S bash -c command_here arguments_here
このために専用のユーザーを使用していることを確認し、そのユーザーをwheelグループに含めないでください。
参照 ここ
geer