我應該如何修改檔案權限以適應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 憑證以繼續。如果您不記得自己的憑證,則應聯絡您的網站寄存服務提供者。

有幾個“修復”,例如這個這更像是解決方法,並且可能不安全。所以我使用了最安全的(據我所知)方法,讓 www-data 成為 WordPress 網站的所有者,同時像以前一樣保留非 WordPress 網站。換句話說,我只是跑了

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

在 WordPress 網站上。這當然有效,但就手動維護網站而言,它變得很痛苦,因為我必須以 root 身份登入才能做到這一點。我將來也無法將網站分配給其他人來維護。請注意,我的一些網站是混合的(部分是 WordPress 和部分自訂頁面)。

所以我想知道是否有更好的解決方案,更優雅,更通用,即它適用於 WordPress 和非 WordPress 網站。

一種可能性是我將使用者 WebAdmin 新增到 www-data 群組。或者可能是 WebAdmin 使用者群組的 www-data?哪個更有意義,哪個更安全?

答案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_event, proxy& 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 服務。

相關內容