Wordpressに対応するためにファイル権限を変更するにはどうすればいいですか?

Wordpressに対応するためにファイル権限を変更するにはどうすればいいですか?

私はここで説明されている方法をうまく使ってきました:単一のユーザーによって管理されるそして、それは私にとってはうまく機能しています。これは私のすべてのウェブサイト用のスクリプトです:

sudo chown -R WebAdmin /var/www/example.com/
sudo chgrp -R www-data /var/www/example.com/
sudo chmod -R 750 /var/www/example.com/
sudo chmod g+s /var/www/example.com/
sudo chown www-data:www-data /var/www/example.com/Uploads/
sudo chmod -R 755 /var/www/example.com/Uploads/

私はそのサーバー上のすべてのサイトを管理しており、WebAdmin は FTP と SSH に使用する一般ユーザーです。

しかし、最近、ホスティング会社から自分のサーバーにいくつかのWordPressサイトを移動したところ、上記の方法は機能しません。WordPressまたはそのテーマ/プラグインを更新すると、次のエラーが発生しました。

要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります。続行するには、FTP 資格情報を入力してください。資格情報を忘れた場合は、Web ホストに問い合わせてください。

いくつかの「修正」があります。これですこれらは回避策のようなもので、おそらく安全ではありません。そこで私は最も安全な方法(私の知る限り)を使い、非WordPressサイトは以前と同じようにしたまま、www-dataをWordPressサイトの所有者にしました。つまり、私は単に

sudo chown -R www-data /var/www/wp_example.com/

WordPress サイトで。もちろんこれはうまくいきましたが、手動で Web サイトを管理するとなると面倒になります。そのためには root としてログインする必要があるからです。また、将来的に Web サイトを他の誰かに管理させることもできなくなります。私のサイトの中にはハイブリッド (一部は WordPress、一部はカスタム ページ) のものもあります。

そこで、よりエレガントでより一般的な、つまり WordPress サイトと非 WordPress サイトの両方で機能する、より良いソリューションがあるかどうか疑問に思っています。

1 つの可能性は、ユーザー WebAdmin を www-data グループに追加することです。あるいは、www-data を WebAdmin ユーザー グループに追加しますか? どちらがより合理的で、どちらがより安全ですか?

答え1

ユーザーがWebAdmin直接、またはwww-dataグループ経由でwww-dataこれらのディレクトリに書き込む必要がある場合、 だけ750では不十分です。現在の設計を修正するには、次の操作を実行します。

sudo chmod -R 770 /var/www/example.com/

セキュリティに関する考慮事項

ただし、一般的には、すべての PHP サイトが同じユーザーで実行され、この変更後はすべてのサイトが他のサイトのファイルを読み書きできるようになります。つまり、いずれかのサイトでセキュリティ侵害が発生すると、すべてのサイトがセキュリティ侵害を受けることになります。

サイトごとに別のユーザーと PHP-FPM プールを使用すると、サイトが分離された区画に分割され、このリスクが軽減されます。サイトを実行しているのと同じユーザーでサイトを管理できます。

/var/www$ ls -l
drwxr-x--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxr-x--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxr-x--- 2 example-org www-data 4096 Aug 30 7:00 example.org

ユーザーがWebAdminこれらすべてを管理することが絶対に必要な場合は、ユーザーをグループに追加しwww-data、グループへの書き込み権限を付与しますが、これはお勧めしません。

/var/www$ ls -l
drwxrwx--- 2 example-com www-data 4096 Aug 30 7:00 example.com
drwxrwx--- 2 example-net www-data 4096 Aug 30 7:00 example.net
drwxrwx--- 2 example-org www-data 4096 Aug 30 7:00 example.org

PHP-FPM プール

PHP FPM プールについて言及したので、ここでは簡単な構成例を示します。これらの手順を詳しく説明したチュートリアルがいくつかあります。

  1. PHP-FPMをインストールします。

  2. /etc/php/8.2/fpm/pool.d/example-com.conf:

    [example-com]
    user = example-com
    group = example-com
    
    listen = /run/php/example-com.sock
    chdir = /var/www/example.com
    
    listen.owner = www-data
    listen.group = www-data
    
    pm = dynamic
    pm.max_children = 5
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 3
    
    php_admin_value[disable_functions] = exec,passthru,shell_exec
    php_admin_flag[allow_url_fopen] = off
    php_admin_value[cgi.fix_pathinfo] = 1
    
    security.limit_extensions =
    

    最後の行は、WordPress が SEO URL を処理できるようにセキュリティを低下させるもので、他の行はセキュリティを強化するものです。pmパラメータは必要に応じて調整する必要があります。

  3. Apache モジュールmpm_eventproxy&を有効にしますproxy_fcgi

  4. <VirtualHost>サイトのApache2 ブロックにハンドラーを追加します。

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/example-com.sock|fcgi://localhost"
    </FilesMatch>
    <Proxy "fcgi://localhost/">
    </Proxy>
    
  5. Apache2 および PHP-FPM サービスを再読み込みまたは再起動します。

関連情報