這是我第一次碰到的問題,就是當我要安裝、更新或者刪除 WordPress 的外掛或佈景主題時,WordPress 會出現要我提供 FTP 或者 FTPS 的連線資訊。在以往,以自己的 Windows 主機架設 WordPress,或者使用免費的 PHP 空間時,完全不需要類似的設定,而這個畫面,則是我另外架設了 Linux 主機時所碰到的。
因為打算學習一下 Linux,用了 Ubuntu Server 當做我的學習機。因為是採用 LAMP,所以安裝一些服務時,倒也沒碰到什麼大問題,設定的東西也算不上什麼難事。
Apache、PHP、MySQL 初期跑起來,都沒有什麼大問題,都能正常執行,WordPress 安裝過程也通通沒遇到大問題。
不過當我試著刪除或者更新外掛時,卻發現老是要我提供我的 FTP 或者 FTPS 的連線資訊,問題是我的機器根本就沒有 FTP 或 FTPS 服務,暫時我也不需要相關服務。
這時我開始想著一些可能原因,我整體的網路環境及相關設定、WordPress 檔案的權限……等。
網路因素初步排除,因為初步來看對外連線是完全沒有問題。
WordPress 檔案及資料夾權限,用 SSH 連進機器看,初步看起來也沒有什麼問題
突然看到 xmlrpc.php,心想會不會是因為我沒有安裝 php5-xmlrpc,所以造成 WordPress 老是要向我要連線資訊。所以我再安裝了 php5-xmlrpc 組件,再重試一次,真是 shit~,狀況還是一樣。
總覺得,應該和權限有關係,曾經試著把上層資料夾開了很大權限,天真地以為可以解決,但仍然要我提供連線資訊。還特地上 WordPress 官網,找到關於權限的相關設定,再做一次檢查,大致來看好像沒什麼問題。
突然間,我發現一個很奇怪的地方,為什麼 wp-config.php 的群組是 www-data 而不是 john。
這時我開始猜測,或許我一開始所想的權限問題的方向是對的。我開始思考並細想 Linux 的一些權限問題。突然間似乎有了靈感:
我的 Apache 是以 www-data 這個身份來執行,它屬於 www-data 這個群組。以我圖中來講,除了 wp-config.php,其他的檔案或資料夾,只有擁有者擁有最大的權限,其他的使用者及群組,都只有讀取功能。
試想,WordPress 不管是安裝、刪除或者更新,都需要變更檔案或刪除檔案,在權限不足的情況下,啥事都不能幹,想通了這點,索性把檔案的擁有者和群組都設為 www-data。
果然,真的是因為權限的問題!
想一想,因為我是用 SSH 進到 Linux 下載 WordPress 並且解壓縮,所以擁有者和群組,都是 john,也就難怪 www-data 這身份或群組的人,啥事都不能幹。
通常情況,在 Windows 上架設 WordPress 或者在共享主機上架設 WordPress,都不會碰到類似情況,權限也不需要特別做調整,但可能我的環境比較特別,或者我對 Linux 有些細節還不很瞭解,才讓我碰到吧。
雖然目前都能運作了,但或許我的權限、擁有者、群組的相關設定仍然有誤,或者觀念上仍需做一些調整,如果大家對於這部份有一些其他想法和建議,非常歡迎讓我知道 ^_^
附帶一提,根據官方資料指出,如果是在共享主機上架設,權限的設定大致如下:
- 資料夾的權限應該要是 755 或是 750
- 所有檔案的權限應該是 644 或是 640,唯一例外的是 wp-config.php,它應該要是 440 或是 400
- 不論如何,請不要把資料的權限設為 777
參考資料:
https://codex.wordpress.org/Changing_File_Permissions#Shared_Hosting_with_suexec