web-dev-qa-db-ja.com

共有ホスティングでnginx + php-fpmを使用して権限を設定する最良の方法は?

Debianでnginxとphp-fpmを使用して共有ホスティングサーバーを実行しています。

すべてが正常に機能します。php-fpmには、個別のユーザーとして実行されているユーザーごとに個別のプールがあり、それぞれに独自のソックスがあります。

ただし、ユーザーごとに個別のnginxプロセスを設定したくないため、Nginxはwww-dataとして実行されています。

これは、nginxがユーザーデータにアクセスできるようにするには、/ homeの権限がdrwx​​r-x--xである必要があることを意味します。問題は、すべてのユーザーが他のユーザーのファイルにアクセスできることです。

他のユーザーにアクセスを許可せずに、ユーザーファイルへのnginxアクセスを許可する最良の方法は何でしょうか。ルートとしてnginxを実行することはオプションではありません。しかし、AppArmorは役に立ちますか?

4
dBi

私はこれにACLを使用することを好みます。例えば:

setfacl -R -m user:www-data:rx,d:user:www-data:rx /home

www-dataユーザーに/homeの下のファイルの読み取りとディレクトリのトラバースへのアクセスを許可し、後で作成される新しいファイルまたはディレクトリに同じACLを適用します。

適用されると、ユーザーのホームディレクトリはワールド実行可能である必要がなくなり(例:chmod o= /home/$USER)、ユーザーはお互いのファイルを読み取ることができなくなりますが、nginxは読み取ることができます。

一部のディレクトリをWebサーバーで書き込み可能にする必要がある場合は、権限rxの両方のインスタンスをrwxに変更することで、ケースバイケースでそれらを設定できることに注意してください。例えば:

setfacl -R -m user:www-data:rwx,d:user:www-data:rwx /home/user/public_html/wp-content/{cache,uploads}
5
Michael Hampton