shell_execがファイルを生成できません

shell_execがファイルを生成できません

nginx Webサーバーを使用してファイル生成を含むスクリプトを作成していますが、sudoersリストから権限を付与してもwww-dataからファイルを生成することはできません。

私のsudoersファイルから:

www-data ALL=(ALL) NOPASSWD: /usr/bin/php, /usr/bin/python

すべての権限を付与しようとしましたが、ブラウザでファイルを作成することはできません。

www-dataALL=(ALL) NOPASSWD: ALL

私の単純なスクリプトはファイルを生成しようとしており、端末を介して機能しますが、ブラウザでは機能しません。

<?php
$data = "test";
shell_exec("sudo /bin/echo $data > /var/www/api/v3/monitoring/iam/temp");

答え1

入力すると、sudo echo $data >fileシェルは最初に通常のユーザーとして出力ファイルを開き、sudo echo開いたファイルに関連付けられた出力として実行されます。したがって、echoコマンドはrootとして実行されますが、通常のfileユーザーとして開きます。

次のものが必要ですsudo sh -c 'echo $data >file'

.NETを使用してユーザーに特定のディレクトリへの書き込み権限を付与する方が簡単な場合がありますchmod

答え2

Webサーバープロセスをrootとして実行することに関する警告は次のとおりです。悪いアイデアを考慮する必要があります。ちなみに、OPに答えるための重要なことは、ファイルを構築するsudoersファイルにディレクトリを追加することでした。たとえば、ディレクトリにファイルを書き込む場合/var/www/api/v3/monitoring/iam/temp、sudoers ファイルに次の項目を含めることができます。

www-data ALL=ALL NOPASSWD:/var/www/api/v3/monitoring/iam/temp

この場合、少なくとも1つのディレクトリにあるWebサーバーにroot権限を付与するリスクがあります。また、execコマンドの前にsudoを追加する必要はありません。たとえば、php execは次のようになります。

<?php
$data = "test";
shell_exec("echo $data > /var/www/api/v3/monitoring/iam/temp");

関連情報