web-dev-qa-db-ja.com

ファイルをアップロードするための正しい権限を設定する

「uploads」というディレクトリにファイルをアップロードするphpスクリプトがあります。アップロードを機能させる唯一の方法は、次の場合です。

chmod 777 uploads

私はこれが正しくないことを知っていますが、それを機能させるために何をすべきかはわかりません。

サーバー情報:Amazon EC2上のT1-Micro Amazon Linux AMI 2013.03

質問:

  • どのようなユーザーがアクセスする必要があるかを知るにはどうすればよいですか。たとえば、ApacheまたはWebサーバーのユーザー名は何ですか。

  • どのレベルのアクセス権を与える必要があるか、またそれを行うためにどのコマンドを使用するか。

ありがとう!

編集:私はスタックオーバーフローで多くの答えを見つけました。例えば

https://stackoverflow.com/questions/3642241/php-file-upload-permissions

https://stackoverflow.com/questions/10842880/setting-permissions-in-php-on-server

https://stackoverflow.com/questions/8948537/permission-denied-when-attempting-to-upload-file-with-php

ありがとう

12
fun_programming

実行してみてください:

ps -ef | grep Apache

そして、Apacheサーバーに対応する左端の列を見てください。これはApacheを実行しているユーザーであり、継承によりPHPも実行します。

アップロードディレクトリの所有権をこのユーザーに変更し、権限を少し制限します。 Webサーバーユーザーがwww-dataであり、同じ名前のグループに属している場合(/var/www/uploadsのサンプルパスを使用):

Sudo chown www-data:www-data /var/www/uploads
Sudo chmod 755 /var/www/uploads

(またはこのインスタンスで必要なすべての権限)。私はコマンド例でSudoを使用しています—この点に関して、スーパーユーザー権限を取得するためにEC2システムがどのように設定されているのか正確にはわかりません。

すでにファイル/ディレクトリをアップロードしている場合は、それらの所有権とアクセス権も変更することをお勧めします。これを行うには、777からより適切な権限に変更して、次のコマンドを実行します。

Sudo chown -R www-data:www-data /var/www/uploads
Sudo chmod -R 755 /var/www/uploads
Sudo find /var/www/uploads -type f -exec chmod -x {} \;

コマンドの各部分を理解していない場合は、コマンドを「盲目的に」実行しないでください。何か不明な点がある場合は、manページを確認してください(非常に簡単なはずです)。

20