まず第一に、通常どちらかが盲目的に(悪い以下の通りですこれを実行する必要性を感じて777人にフォルダやファイルのアクセス権を設定する決して良い理由があります)オンラインチュートリアルで解決できない基本的なセキュリティ/権限の問題がある。通常、アップロード/書き込みの問題は、フォルダ(通常はwww-dataまたはapacheユーザー)に適切な所有者/グループを設定することで解決できます。あなたは基本的にバックドアを開いたままにしておき、悪い近所でロックを解除しています。詳細については、How will a server become vulnerable with chmod 777?も参照してください。
これまでにmkdir()
でこのような問題が発生しました。これは通常、システム上のある特定のumaskが新しく作成されたフォルダに755の権限を持つように設定されているためです。
mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
chmod(getcwd() . '/public/profile/usr'.$user->getId(), 777);
// And so on...
しかし、よりよい解決策:特定chmod()
呼び出しを行うといえトリックを行いますあなたの権限/セキュリティ問題を修正します。適切な所有者(PHPが実行されているプロセス)を設定するだけで、777の権限を設定する必要はなくなりますが、適切なアップロード処理が可能になります。これは、すでにデフォルトにする必要がありますが、あなたがそれを強制することができます
// This will get the user the PHP process is running under on Linux machines:
$user = `whoami`;
mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0755, true);
chown(getcwd() . '/public/profile/usr'.$user->getId(), $user);
// And so on
これは、フォルダに755回のアクセス権を設定し、PHPプロセスに所有権を設定し、PHPは、フォルダの完全な権限を有することを意味するが、他ますユーザーはしません。これはより安全ですが、あまり便利ではありません。
SELinuxによってもこの問題が発生する可能性があります。この場合、chmod 777はあまり助けになりません。アップロードフォルダには通常httpd_public_content_rw_t
というコンテキストが必要です。ここで