本篇介紹關於 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.php:http 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.
- do_activate_header()
上面所列的都是 Bitnami 系統 和 WordPress 網站的主要檔案目錄,多數情況除非你想要自行開發、修改網站系統,否則只會修改 wp-content 的內容,此目錄主要包含網站外觀介面 (themes) 及套件 (pulgins)。
關於詳細的檔案結構內容可以參考 WordPress Files and Directory Structure、 WordPress Website Architecture Explained in Great Detail,或是 Site Architecture 1.5、WordPress Codex、WordPress 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/
Copyright announcement:
the featured image: Photo by Matt Briney on Unsplash