我已成功使用此處描述的方法:由單一用戶維護它對我來說效果很好。這是我所有網站的腳本:
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 池,這裡有一個簡短的範例配置。有幾個教程詳細解釋了這些步驟。
安裝 PHP-FPM。
/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
應根據您的需求調整參數。啟用 Apache 模組
mpm_event
,proxy
&proxy_fcgi
。<VirtualHost>
將處理程序新增至網站的Apache2 區塊:<FilesMatch "\.php$"> SetHandler "proxy:unix:/run/php/example-com.sock|fcgi://localhost" </FilesMatch> <Proxy "fcgi://localhost/"> </Proxy>
重新載入或重新啟動 Apache2 和 PHP-FPM 服務。