web-dev-qa-db-ja.com

アップロードされたファイルへの書き込み権限-Linux、Apache、PHP

FTP関数を使用してファイルを転送するPHPスクリプトに取り組んでいます。これは、常に本番サーバー(ホスティングサービス)で機能します。セットアップしたばかりの開発サーバー(私はサーバーの初心者)は、Apache2、PHP5、およびMySQL5を備えたDebianLennyです。

ファイル転送は正しく機能しますが、ファイルがサーバーに書き込まれると、600のアクセス許可が付与されます。これにより、アクセス許可が拒否されたため、Webブラウザーでファイル(JPEG)を表示できなくなります。私はインターネットを精査し、サーバーのインストールを壊して、これを理解しようとして再インストールしました(それでも、それは楽しかったです!)。

パブリックアクセス可能なファイルに777権限を設定するのは賢明ではないことは知っていますが、それでも問題は解決しません。動作する唯一のことは、私がchmod 777 thefile.jpgの場合です。  転送されましたが、これは実用的なソリューションではありません。

サイトファイルの所有者をwww-data per この投稿 に変更しようとしましたが、それも機能しません。

私のユーザーはmikeですが、ファイルの所有者がmikeであるかrootであるかに関係なく機能しません。

誰かが私を正しい方向に向けてくれるでしょうか?ありがとう!そしてもちろん、何か明確にできるかどうか教えてください。

1
Mike Moore

これは、Apacheではなく、ftpサーバーの構成に関連しています。 ftpにどのサーバーを使用していますか? vsftpdはDebianLennyのデフォルトのftpサーバーだと思います。vsftpd.confファイルで確認する必要があるオプションは、chown_upload_modefile_open_modeです。

chown_upload_modeのデフォルトは0600です。これにより、設定する必要があると思われるので、FTPdを再起動して再試行してください。

1
cpbills

Apacheは、ファイルの保存先のディレクトリからファイルを提供するように構成されていないようです。ファイルが存在するディレクトリへのアクセスを許可するApache構成に Directory ディレクティブがあることを確認する必要があります。例:

<Directory "/home/mike/uploads">
  Order allow,deny
  Allow from all
</Directory>

また、www-dataユーザーには、ディレクトリにつながるディレクトリツリーをトラバースする権限が必要です。例えば。ファイルが/home/mike/uploadsにある場合、homemike、およびuploadsは、他のユーザーに許可された実行許可を持っている必要があります。

1
Wes

私は問題を解決したようです。これが大丈夫な解決策であるかどうかはまだ知りたいです。

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ブラウザーから表示できます。何か考えはありますか?

0
Mike Moore