FTP関数を使用してファイルを転送するPHPスクリプトに取り組んでいます。これは、常に本番サーバー(ホスティングサービス)で機能します。セットアップしたばかりの開発サーバー(私はサーバーの初心者)は、Apache2、PHP5、およびMySQL5を備えたDebianLennyです。
ファイル転送は正しく機能しますが、ファイルがサーバーに書き込まれると、600のアクセス許可が付与されます。これにより、アクセス許可が拒否されたため、Webブラウザーでファイル(JPEG)を表示できなくなります。私はインターネットを精査し、サーバーのインストールを壊して、これを理解しようとして再インストールしました(それでも、それは楽しかったです!)。
パブリックアクセス可能なファイルに777
権限を設定するのは賢明ではないことは知っていますが、それでも問題は解決しません。動作する唯一のことは、私がchmod 777 thefile.jpg
の場合です。 後 転送されましたが、これは実用的なソリューションではありません。
サイトファイルの所有者をwww-data
per この投稿 に変更しようとしましたが、それも機能しません。
私のユーザーはmike
ですが、ファイルの所有者がmike
であるかroot
であるかに関係なく機能しません。
誰かが私を正しい方向に向けてくれるでしょうか?ありがとう!そしてもちろん、何か明確にできるかどうか教えてください。
これは、Apacheではなく、ftpサーバーの構成に関連しています。 ftpにどのサーバーを使用していますか? vsftpdはDebianLennyのデフォルトのftpサーバーだと思います。vsftpd.conf
ファイルで確認する必要があるオプションは、chown_upload_mode
とfile_open_mode
です。
chown_upload_mode
のデフォルトは0600
です。これにより、設定する必要があると思われるので、FTPdを再起動して再試行してください。
Apacheは、ファイルの保存先のディレクトリからファイルを提供するように構成されていないようです。ファイルが存在するディレクトリへのアクセスを許可するApache構成に Directory ディレクティブがあることを確認する必要があります。例:
<Directory "/home/mike/uploads">
Order allow,deny
Allow from all
</Directory>
また、www-dataユーザーには、ディレクトリにつながるディレクトリツリーをトラバースする権限が必要です。例えば。ファイルが/home/mike/uploads
にある場合、home
、mike
、およびuploads
は、他のユーザーに許可された実行許可を持っている必要があります。
私は問題を解決したようです。これが大丈夫な解決策であるかどうかはまだ知りたいです。
Apacheユーザーとグループ
User ${Apache_RUN_USER}
をUser mike
に、Group ${Apache_RUN_GROUP}
をGroup www-data
に変更してから、/etc/init.d/Apache2 restart
でApacheを再起動しました。
PHP5所有者
次に、/var/lib/php5
で所有者をroot
からmike
に変更しました。
chown -R mike /var/lib/php5
パブリックフォルダーの所有者、グループ、およびアクセス許可
次の この記事 、私は次のことをしました:
Www-dataグループに所有者「mike」を追加しました。
Sudo usermod -a -G www-data mike
/var/www
のグループをwww-data
に変更しました。
Sudo chgrp -R www-data /var/www
次に、/var/www
の権限を変更しました。
Sudo chmod -R 2750 /var/www
そして、アップロードディレクトリに次のことをしました
Sudo chmod -R 2770 /var/www/test/images
これを試してみました...
私はもともと@Wesの提案(以下)をApache2.conf
に追加しましたが、上記を実行した後に削除しました。これは機能します。 (これを追加または削除しても、何の影響も見られませんでした):
<Directory "/var/www">
Order allow,deny
Allow from all
</Directory>
だが...
JPEG画像ファイルは、PHPスクリプトを介してサーバーに転送された後も、-rw-------
の権限を持っていますが、Webブラウザーから表示できます。何か考えはありますか?