ファイルにいくつかの文字列を作成する必要があるかもしれませんが、これだけを行うことができますroot
。私はこれに基づいていくつかの解決策を試しています。郵便はがきしかし、それらのどれも動作しません。
ケース:
ユーザーが正常に完了すると、writefile.php
アクセス専用権限()で書き込むことができるファイルを含むスクリプトに自動的にアクセスできます。tes.txt
root
私はvisudo
これを使用し、私のsudoers
ファイルに追加します。
username ALL=(root) NOPASSWD: /var/www/html/myprogram/writefile.php
いいえ!
username ALL=(ALL) NOPASSWD: /var/www/html/myprogram/writefile.php
いいえ!
私の簡単なコード存在するwritefile.php
<?php
echo file_put_contents("tes.txt","Hello World. Testing!");
?>
結果:
Warning: file_put_contents(tes.txt): failed to open stream: Permission denied
答え1
多くの試みの末に関連記事も読んでみました。最後に、私は問題が私の合意にあることに気づきました。これがsudo
nを初めて使用する他のユーザーに役立つことを願っていますvisudo
。
質問:
1. ユーザー名
に関しては、username
私が追加したユーザーは、端末を介したログイン権限を持つユーザーです。ウェブサイトを介してアプリケーションにアクセスしても同様です。したがって、ユーザーはwww-data
次のようになります。
www-data ALL=(root) NOPASSWD: /usr/bin/php /var/www/html/myprogram/writefile.php
2. execやshell_execを使用しないでください
writefile.php
ブラウザから直接アクセスしてはいけないという事実を忘れてしまいました。コマンドは別のファイル()を介して渡されindex.php
、その後そのファイル内でshell_exec
またはを使用してコマンドをexec
実行する必要があります。構造は次のとおりです。writefile.php
sudo
index.php
<?php
exec("sudo /usr/bin/php /var/www/html/myprogram/writefile.php");
?>
file.phpを書く
<?php
echo file_put_contents("tes.txt","tes write file");
?>
いよいよ開封tes.txt
してうまく動作します!みんなありがとうございます。
答え2
これはsudoの仕組みについての誤解のようです。 sudoersファイルに何かを入れるだけでは、ファイルの権限は実際には変更されません。ファイルは次のように実行する必要があります: "ユーザー名"でsudo php /var/www/html/myprogram/writefile.php.. また、次のこともできます。設定によっては、その場所でファイルを実行することができない可能性があるため、SELinuxに問題が発生します。