WordPress / 架站教學六:檔案及目錄的結構簡介與預設檔案權限

WordPress / 架站教學六:檔案及目錄的結構簡介與預設檔案權限

本篇介紹關於 WordPress Bitnami 的基本檔案及目錄的結構簡介,還有預設的檔案權限設定。檔案權限對於伺服器是一個非常重要的設定,它攸關了網站是否能正常運行與檔案能否存取的設定,如果在架設網站的過程當中遇到存取權限錯誤等問題,或是工具程式無法正確執行等等,很有可能就會是權限設定出錯造成的。

WordPress 檔案結構

Bitnami 系統檔案結構

使用 Bitnami 部署的 WordPress 網站,所有的檔案、應用程式、資料庫及 Apache 伺服器都會建立在 /opt/bitnami 這個目錄之下:

  • WordPress 根目錄:apps/wordpress/
  • Apache 伺服器、 MySQL 資料庫及相關工具程式:
    apache2/, mysql/, postgresql/, apache-tomcat/
  • 憑證及相關檔案:licenses/
  • 關於程式語言和套件:php/, python/, ruby/, tcl/
  • 指令集 (common library):common/
WordPress 根目錄檔案結構

根目錄名稱預設是 wordpress (上方紅字),而 WordPress 根目錄的主要檔案結構是:

  • 網站根目錄及內容:apps/wordpress/htdocs/
  • 參數設定:apps/wordpress/conf/
  • 工具程式:apps/wordpress/bnconfig
  • 移除整個應用程式 (網站):apps/wordpress/uninstall
網站根目錄 (htdocs) 的檔案結構
  • wp-admin
    關於 admin 的工具與程式,主程式是 admin.php。例如與資料庫的連線、後台介面、前端呈現及主要核心程式等。
  • wp-content佈景主題 (網站樣式)、Plug-in 套件等
    • themes所有佈景主題以各別資料夾呈現
    • plugins所有 plug-in 套件以各別資料夾呈現
  • wp-includes
    網站中其中一個較龐大的資料夾,底下儲存了所有網站運行必須的應用程式、套件及元件等,例如字型、widgets、.js 檔等。
  • index.php:網站首頁
  • wp-blog-header.phphttp header
  • wp-config.php:核心程式之一,內容包含資料庫連線相關資訊,如資料庫名稱、帳號、密碼等
  • wp-activate.php:核心程式之一,主要內容如下:
    • do_activate_header()
      Function: Adds an action hook specific to this page that fires on wp_head.
    • activate_wp_head
      Fires before the Site Activation page is loaded but on the wp_head action.
    • wpmu_activate_stylesheet()
      Function: Loads styles specific to this page.
    • activate_header
      Action Hook: Fires before the Site Activation page is loaded.

上面所列的都是 Bitnami 系統 和 WordPress 網站的主要檔案目錄,多數情況除非你想要自行開發、修改網站系統,否則只會修改 wp-content 的內容,此目錄主要包含網站外觀介面 (themes)套件 (pulgins)

關於詳細的檔案結構內容可以參考 WordPress Files and Directory StructureWordPress Website Architecture Explained in Great Detail,或是 Site Architecture 1.5WordPress CodexWordPress Documentation

WordPress 檔案權限設定

WordPress Bitnami 的檔案存取權限設定攸關網站是否能正常運作,因為這攸關使用者訪問過來能否存取頁面、伺服器能否存取檔案、工具程式能否修改網站內容等。

※ WordPress的檔案權限設定分為兩個部分, 以下針對這兩的部分分別說明 :

  • 網站根目錄 htdocs
  • htdocs 以外的其他 WordPress 檔案
網站根目錄 htdocs 的預設權限設定

htdocs 這個資料夾底下的權限設定比較單純,預設權限設定如下:

  • 所有的檔案及資料夾都被 bitnami 這個使用者所擁有,且都隸屬於 daemon 這個群組。
  • 所有資料夾存取權限都是 775
  • 所有檔案的存取權限都是 664
  • wp-config.php 這個檔案的存取權限是 640

▍如果要重設 htdocs 目錄底下的權限,步驟如下:

1. 首先先移到 htdocs 的目錄當中

cd /opt/bitnami/apps/wordpress/htdocs

2. 更改所有檔案的擁有者及存取權限

sudo chown bitnami:daemon -R * 
sudo find . -type d -exec chmod 775 {} \; 
sudo find . -type f -exec chmod 664 {} \;

3. 更改 wp-config.php 的存取權限

sudo chmod 640 htdocs/wp-config.php
WordPress 根目錄預設權限設定 (htdocs 除外)

在 htdocs 以外的檔案權限設定比較複雜,其中牽涉到有些程式必須 root user 才能存取等,在此就不多做解說,直接附上所有檔案的預設權限:

/wordpress
755 drwxr-xr-x 2 bitnami root      4096 Aug  4 15:21 bin
544 -r-xr--r-- 1 root    root   8505548 Jul 25 15:00 bnconfig
755 drwxr-xr-x 4 bitnami root      4096 Aug  4 15:32 conf
775 drwxrwxr-x 5 bitnami daemon    4096 Aug  4 15:31 htdocs
755 drwxr-xr-x 2 root    root      4096 Aug  4 15:21 licenses
775 drwxrwxr-x 2 bitnami daemon    4096 Aug  4 15:40 tmp
700 -rwx------ 1 root    root   8764279 Aug  4 15:22 uninstall
600 -rw------- 1 root    root    167635 Aug  4 15:23 uninstall.dat
777 lrwxrwxrwx 1 root    root        34 Aug  4 15:22 updateip -> /opt/bitnami/apps/gallery/bnconfig

/wordpress/bin
755 -rwxr-xr-x 1 bitnami root     250 Aug  4 15:21 wp
644 -rw-r--r-- 1 bitnami root 5506663 Apr 25 18:58 wp-cli.phar
644 -rw-r--r-- 1 bitnami root      71 Aug  4 15:21 wp-cli.yml

/wordpress/conf
644 -rw-r--r-- 1 bitnami root  256 Aug  4 15:21 banner.conf
755 drwxr-xr-x 2 bitnami root 4096 Aug  4 15:21 certs
644 -rw-r--r-- 1 bitnami root  717 Aug  4 15:21 htaccess.conf
644 -rw-r--r-- 1 bitnami root  948 Aug  4 15:34 httpd-app.conf
644 -rw-r--r-- 1 bitnami root  237 Aug  4 15:34 httpd-prefix.conf
644 -rw-r--r-- 1 bitnami root  590 Aug  4 15:34 httpd-vhosts.conf
755 drwxr-xr-x 2 bitnami root 4096 Aug  4 15:21 php-fpm

/wordpress/conf/certs
/--- empty ---/

/wordpress/conf/php-fpm
644 -rw-r--r-- 1 bitnami root   0 Aug  4 15:21 php-settings.conf
644 -rw-r--r-- 1 bitnami root 226 Aug  4 15:21 pool.conf

/wordpress/htdocs
/* 
all files and directories owned by: bitnami:daemon
all files: 664
all directories: 775
wp-config.php 640
*/

/wordpress/licenses
644 -rw-r--r-- 1 root root 19935 Jan  1  2019 license.txt

/wordpress/tmp
/--- empty ---/

▍如果需要重設整個 WordPress 目錄的檔案權限,步驟及指令如下:

1. 首先先移到 WordPress 的目錄當中

cd /opt/bitnami/apps/wordpress

2. 更改所有檔案的擁有者及存取權限,直接執行下列指令:

chmod 755 bin; chmod 544 bnconfig; chmod 755 conf; chmod 775 htdocs; chmod 755 licenses; chmod 775 tmp; chmod 700 uninstall; chmod 600 uninstall.dat; chmod 777 updateip; chmod 755 ./bin/wp; chmod 644 ./bin/wp-cli.phar; chmod 644 ./bin/wp-cli.yml; chmod 644 ./conf/banner.conf; chmod 755 ./conf/certs; chmod 644 ./conf/htaccess.conf; chmod 644 ./conf/httpd-app.conf; chmod 644 ./conf/httpd-prefix.conf; chmod 644 ./conf/httpd-vhosts.conf; chmod 755 ./conf/php-fpm; chmod 644 ./conf/php-fpm/php-settings.conf; chmod 644 ./conf/php-fpm/pool.conf; chmod 644 ./licenses/license.txt; chown bitnami:root bin; chown root:root bnconfig; chown bitnami:root conf; chown bitnami:daemon htdocs; chown root:root licenses; chown bitnami:daemon tmp; chown root:root uninstall; chown root:root uninstall.dat; chown root:root updateip; chown bitnami:root ./bin/wp; chown bitnami:root ./bin/wp-cli.phar; chown bitnami:root ./bin/wp-cli.yml; chown bitnami:root ./conf/banner.conf; chown bitnami:root ./conf/certs; chown bitnami:root ./conf/htaccess.conf; chown bitnami:root ./conf/httpd-app.conf; chown bitnami:root ./conf/httpd-prefix.conf; chown bitnami:root ./conf/httpd-vhosts.conf; chown bitnami:root ./conf/php-fpm; chown bitnami:root ./conf/php-fpm/php-settings.conf; chown bitnami:root ./conf/php-fpm/pool.conf; chown root:root ./licenses/license.txt; 
權限設定指令解說

chown 指令將檔案及資料夾變更擁有者為 bitnami、群組為 daemon,且 -R 參數表示應用到所有子目錄當中, * 表示應用到所有檔案及目錄。

find 則是搜尋指令, . 表示搜尋當下的目錄位置,且指定 -type d 參數為目錄。並且 -exec 表示對符合條件的目錄執行後面的指令。 -type f 則是指檔案。

chmod 是更改檔案或目錄的存取權限。

▍也可以把上面兩個部分 (htdocs/ 和 wordpress/) 合起來一起使用,直接重設所有檔案權限:

cd /opt/bitnami/apps/wordpress; chmod 755 bin; chmod 544 bnconfig; chmod 755 conf; chmod 775 htdocs; chmod 755 licenses; chmod 775 tmp; chmod 700 uninstall; chmod 600 uninstall.dat; chmod 777 updateip; chmod 755 ./bin/wp; chmod 644 ./bin/wp-cli.phar; chmod 644 ./bin/wp-cli.yml; chmod 644 ./conf/banner.conf; chmod 755 ./conf/certs; chmod 644 ./conf/htaccess.conf; chmod 644 ./conf/httpd-app.conf; chmod 644 ./conf/httpd-prefix.conf; chmod 644 ./conf/httpd-vhosts.conf; chmod 755 ./conf/php-fpm; chmod 644 ./conf/php-fpm/php-settings.conf; chmod 644 ./conf/php-fpm/pool.conf; chmod 644 ./licenses/license.txt; chown bitnami:root bin; chown root:root bnconfig; chown bitnami:root conf; chown bitnami:daemon htdocs; chown root:root licenses; chown bitnami:daemon tmp; chown root:root uninstall; chown root:root uninstall.dat; chown root:root updateip; chown bitnami:root ./bin/wp; chown bitnami:root ./bin/wp-cli.phar; chown bitnami:root ./bin/wp-cli.yml; chown bitnami:root ./conf/banner.conf; chown bitnami:root ./conf/certs; chown bitnami:root ./conf/htaccess.conf; chown bitnami:root ./conf/httpd-app.conf; chown bitnami:root ./conf/httpd-prefix.conf; chown bitnami:root ./conf/httpd-vhosts.conf; chown bitnami:root ./conf/php-fpm; chown bitnami:root ./conf/php-fpm/php-settings.conf; chown bitnami:root ./conf/php-fpm/pool.conf; chown root:root ./licenses/license.txt; chown bitnami:daemon -R ./htdocs/*; find ./htdocs/ -type d -exec chmod 775 {} \;; find ./htdocs/ -type f -exec chmod 664 {} \;; chmod 640 ./htdocs/wp-config.php;

紅字的部分是你的 wordpress 資料夾,上面這是預設的位址。

外部連線存取的預設權限

另外,外部連線存取網站的預設使用者與群組會是 daemon:daemon,若開啟 Apache 參數檔 /opt/bitnami/apache2/conf/httpd.conf 可以看到:

<IfModule>
#
If you wish httpd to run as a different user or group, you must run
httpd as root initially and it will switch.
#
User/Group: The name (or #number) of the user/group to run httpd as.
It is usually good practice to create a dedicated user and group for
running httpd, as with most system services.
#
User daemon
Group daemon
</IfModule>

 

檔案權限與目錄結構影響了網站的正常運作

網站的基本檔案權與目錄結構大致上就介紹到這邊,雖然這篇看似不怎麼影響 WordPress 架站,但它卻是很重要的伺服器設定。首先檔案權限設定錯誤,很可能就會造成網站直接無法訪問,甚至資料有安全上的疑慮。而目錄結構對於一般使用者可能比較接觸不到,不過進階使用者如果想要更進一步的修改網站,甚至製作自己的佈景主題、修改網站程式碼、設定 Apache 伺服器等,就必須了解整個網站架構是長什麼樣貌。

 

下一篇:WordPress / 架站教學七:修改網站外觀樣式,如何建立子主題 (child theme)

 

WordPress 網站架設與搬家教學系列

WordPress 快速架站教學 (濃縮版):
在 Google Cloud (GCP) 台灣主機上免費架設 WordPress Bitnami

WP 架站教學一:使用 Google 台灣主機免費架設自己的網站 (Mac/Win版)
WP 架站教學二:透過 SSH 連線遠端控制 GCP 並設定 FTP 伺服器 (使用 WordPress Bitnami)
WP 架站教學三:更改 MySQL Administrator 密碼、設定外部靜態 IP 位址
WP 架站教學四:設定 Domain Name 及 Apache 參數
WP 架站教學五:設定 SSL 加密連線,讓網站連線更安全 (以Apache為例)
WP 架站教學六:WordPress 檔案及目錄的結構簡介與預設檔案權限
WP 架站教學七:修改網站外觀樣式,如何建立子主題 (child theme)
WP 多重架站一:如何在同一個伺服器架設第二個 WordPress (Multiple WordPress)
WP 多重架站二:設定 Domain Name,指定多個 WordPress 的網址 (使用subdomain)
WP 多重架站三:設定 SSL 加密連線 (以 Apache 為例)
WP 搬家教學:一個按鍵幫網站搬家,使用 All-in-One Migration

WordPress / 網站架設與搬家教學系列簡介及目錄
https://note.charlestw.com/wordpress-tutorial-category/