
ファイル権限について質問させてください。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 フォルダーに対する読み取り/書き込み権限が必要であることに注意してください。
それが役に立てば幸い。
注意: これはテスト目的で実装する必要があり、実稼働環境には推奨されません。