PHP/Linux ファイルの権限

PHP/Linux ファイルの権限

ファイル権限について質問させてください。Apache が稼働している Ubuntu サーバーをセットアップしました。シンプルな PHP アップロード フォームがあり、次のように /var/www/site/uploads にファイルをアップロードできます。

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 1736
drwxrwxrwx 2 www-data www-data    4096 Oct 18 02:53 ./
drwxrwxrwx 3 sandbox  sandbox     4096 Oct 18 00:42 ../
-rw-r--r-- 1 www-data www-data  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 www-data www-data  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 www-data www-data 1451489 Oct 18 02:53  
 6453_3d_landscape_hd_wallpapers_green.jpg

ファイルをアップロードして、次のように表示する方法はありますか?

-rw-r--r-- 1 sandbox sandbox  145998 Oct 18 02:53 3d wallpaper pic.jpg
-rw-r--r-- 1 sandbox sandbox  166947 Oct 18 02:53 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox sandbox 1451489 Oct 18 02:53     
 6453_3d_landscape_hd_wallpapers_green.jpg

そうすれば、すぐに待機中/実行中のシェルスクリプトにそれらを渡すことができます。現在、待機中のスクリプト(移動、チェックサム、名前の変更、サイズ変更など)は、www-dataの属性を持つアップロードされたファイルに対して何もできません。ローカルアカウントとして次のように実行すれば、

sandbox@sandbox-virtual-machine:/var/www/site/uploads$touch testfile

そうすれば、スクリプトは希望どおりに実行できるようになります。 ご提案があれば、ぜひお聞かせください。よろしくお願いします。

私が前進できたのは、皆さんの助けがあったからこそです。

今、私は解決に近づいており、出力を追加します

sandbox@sandbox-virtual-machine:/var/www/site/uploads$ ll
total 388
drwxrwxrwx 2 www-data www-data   4096 Oct 18 04:22 ./
drwxrwxrwx 3 sandbox  sandbox    4096 Oct 18 04:17 ../
-rw-r--r-- 1 sandbox  sandbox  166947 Oct 18 04:21 3D Wallpapers 9.jpg
-rw-r--r-- 1 sandbox  sandbox  219808 Oct 18 04:20 adafruit_pi.png
-rw-rw-r-- 1 sandbox  sandbox       0 Oct 18 04:22 test

中間のグループに違いがある「test」などのアップロードされたファイルへの権限を設定するにはどうすればよいでしょうか。たとえば、adafruit_pi.png と test などです。どのステートメントを PHP コードに挿入すればよいでしょうか。

答え1

PHP は Apache の下で Web アプリケーションとして実行されており、それがwww-data表示されているユーザーです。

アップロード後、次の方法でファイルの所有者とグループを変更できます。

exec( 'chgrp sandbox 3*.jpg' );
exec( 'chown sandbox 3*.jpg' );

権限を変更すると、Web サーバーはファイルに書き込んだり、ファイルを削除したり移動したりできなくなることに注意してください。

答え2

ユーザーwww-dataをサンドボックスグループに追加してみてください

答え3

Apache サービスのユーザーとグループを変更してみてください。Apache 構成ファイル (Ubuntu では /etc/apache2/apache2.ini にあると思います) を検索し、次の行を検索します。

User www-data
Group www-data

www-dataに変更しますsandbox

sandboxユーザーには、Webroot フォルダーに対する読み取り/書き込み権限が必要であることに注意してください。

それが役に立てば幸い。

注意: これはテスト目的で実装する必要があり、実稼働環境には推奨されません。

関連情報