wordpress 更新失敗就會看到下面的錯誤訊息,只需要修改檔案權限即可.
Installation failed: Unable to locate WordPress content directory (wp-content).
測試環境為 Ubuntu16.04 x86_64(虛擬機)
前言
Wordpress 更新 plugin , theme 時需要輸 Linux 系統的使用者帳號與密碼,但實際在運作的是 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache),下面是透過 ps 指令來觀察.
root@ubuntu:/var/www/html# ps aux | grep apache2 root 1509 0.0 2.8 287188 27992 ? Ss 00:55 0:00 /usr/sbin/apache2 -k start www-data 2832 0.0 3.2 293180 32920 ? S 01:00 0:00 /usr/sbin/apache2 -k start www-data 2833 0.0 3.5 293868 35752 ? S 01:00 0:01 /usr/sbin/apache2 -k start www-data 2834 0.0 3.4 293508 34444 ? S 01:00 0:00 /usr/sbin/apache2 -k start
單一使用者如 root 時 WordPress 檔案權限設定建議如下.
- HTML 檔案/目錄 的擁有者 (User)
我安裝好的 WordPress 檔案,目錄 預設的使用者是 nobody ,wordpress 建議使用一個真的使用者來取代掉 預設的使用者,不建議全部使用 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache).我使用 root 當做使用者.
將 /var/www/html 權限都修改成為 root
root@ubuntu:~# chown -R root:root /var/www/html/
- HTML 檔案/目錄 的群組 (Group)
我安裝好的 WordPress 檔案,目錄 預設的是群組為 nobody 以及 nogroup ,wordpress 沒有任何建議,應該使用同一個使用者當作群組名稱即可.我直接使用 root 當做群組.剛剛指令也修改過了.
- HTML 目錄權限
所有的目錄只能設定為 755 – 使用者擁有 read/write/exec(進入目錄的權限) ,群組與其他使用者擁有 read/exec(進入目錄的權限).利用下面指令將所有目錄權限修改成為 755
root@ubuntu:~# find /var/www/html/ -type d -exec chmod 755 {} \;
- HTML 檔案權限
所有檔案只能設定 644 – 使用者擁有 read/write ,群組與其他使用者擁有 read.利用下面指令將所有檔案權限修改成為 644
root@ubuntu:~# find /var/www/html/ -type f -exec chmod 644 {} \;
- 特殊檔案 wp-config.php
wp-config.php 設定檔需要 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache) 讀取,我們可以這樣設定,擁有者 root ,群組 www-data ,權限 440 – 使用者擁有 read ,群組 read.root@ubuntu:~# rm /var/www/html/wp-config-sample.php root@ubuntu:~# chgrp www-data /var/www/html/wp-config.php root@ubuntu:~# chmod 440 /var/www/html/wp-config.php
- 特殊檔案 .htaccess
.htaccess 設定檔需要 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache) 讀取,我們可以這樣設定,擁有者 root ,群組 www-data ,權限 664 – 使用者擁有 read / write ,群組 read / write , 其他 read .root@ubuntu:~# touch /var/www/html/.htaccess root@ubuntu:~# chgrp www-data /var/www/html/.htaccess root@ubuntu:~# chmod 664 /var/www/html/.htaccess
- 特殊目錄 wp-content
通常安裝完 wordpress 第一個遇到的問題是上傳圖片時系統顯示無法建立目錄: wp-content/uploads,伺服器是否允許寫入上層目錄?
預設是沒有 uploads 這個目錄的,需要自行建立,權限不需設定成為 777 ,只要讓 httpd process 的使用者 (Ubunut 為 www-data , RHEL/CentOS 為 apache) 有寫入權限即可.
root@ubuntu:~# mkdir /var/www/html/wp-content/uploads
我們可以這樣設定
擁有者 root ,群組 www-data
目錄權限 775 – 使用者擁有 read / write / Exec ,群組 read / write / Exec , 其他 read / Exec.
檔案權限 664 – 使用者擁有 read / write ,群組 read / write , 其他 read .root@ubuntu:~# find /var/www/html/wp-content -exec chgrp www-data {} \; root@ubuntu:~# find /var/www/html/wp-content -type d -exec chmod 775 {} \; root@ubuntu:~# find /var/www/html/wp-content -type f -exec chmod 664 {} \;
- 特殊目錄 wp-admin
試過之後需要把這個目錄的擁有者設定成為 www-data.root@ubuntu:~# chown -R www-data:www-data /var/www/html/wp-admin/
這樣就可以更新 plugin , theme … ,或是設定 Apache2 + SSH2 細節請參考 https://benjr.tw/10928
設定完成的 wordprss 權限如下.
root@ubuntu:~# ll -a /var/www/html total 196 drwxr-xr-x 5 root root 4096 Oct 30 23:24 ./ drwxr-xr-x 3 root root 4096 Oct 30 23:23 ../ -rw-rw-r-- 1 root www-data 0 Oct 31 00:11 .htaccess -rw-r--r-- 1 root root 418 Sep 24 2013 index.php -rw-r--r-- 1 root root 19935 Jan 2 2017 license.txt -rw-r--r-- 1 root root 7413 Dec 12 2016 readme.html -rw-r--r-- 1 root root 5447 Sep 27 2016 wp-activate.php drwxr-xr-x 9 www-data www-data 4096 Sep 19 14:21 wp-admin/ -rw-r--r-- 1 root root 364 Dec 19 2015 wp-blog-header.php -rw-r--r-- 1 root root 1627 Aug 29 2016 wp-comments-post.php -r--r----- 1 root www-data 3273 Oct 30 23:23 wp-config.php drwxrwxr-x 5 root www-data 4096 Oct 30 23:40 wp-content/ -rw-r--r-- 1 root root 3286 May 24 2015 wp-cron.php drwxr-xr-x 18 root root 12288 Sep 19 14:21 wp-includes/ -rw-r--r-- 1 root root 2422 Nov 20 2016 wp-links-opml.php -rw-r--r-- 1 root root 3301 Oct 24 2016 wp-load.php -rw-r--r-- 1 root root 34327 May 12 10:12 wp-login.php -rw-r--r-- 1 root root 8048 Jan 10 2017 wp-mail.php -rw-r--r-- 1 root root 16200 Apr 6 2017 wp-settings.php -rw-r--r-- 1 root root 29924 Jan 24 2017 wp-signup.php -rw-r--r-- 1 root root 4513 Oct 14 2016 wp-trackback.php -rw-r--r-- 1 root root 3065 Aug 31 2016 xmlrpc.php root@ubuntu:~# ll /var/www/html/wp-content/ total 24 drwxrwxr-x 5 root www-data 4096 Oct 30 23:40 ./ drwxr-xr-x 5 root root 4096 Oct 30 23:24 ../ -rw-rw-r-- 1 root www-data 28 Jan 8 2012 index.php drwxrwxr-x 3 root www-data 4096 Oct 31 00:07 plugins/ drwxrwxr-x 5 root www-data 4096 Sep 19 14:21 themes/ drwxrwxr-x 2 root www-data 4096 Oct 30 23:25 uploads/
這個設定有一個問題就是無法更新 wordpress 本身,因為 wordpress 在更新時會把舊的 php 程式改成新的版本, 但 httpd process 並沒有寫入這些檔案的權限,修改方式請參考這一篇 https://benjr.tw/10976
2 thoughts on “WordPress – 檔案權限設定(1)”