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");