用 FTP 或主機檔案管理員第一次打開網站空間,畫面通常是一堆看不懂的資料夾,外加每個檔案後面一串 644、755 的數字。多數人選擇直接跳過,反正網站還能跑。問題是,當有一天外掛安裝失敗跳出「請輸入 FTP 帳密」,或資安掃描報告指出 wp-config.php 權限過鬆,這些被忽略的數字就會變成解不開的卡關點。
主機根目錄的結構、wp-config.php 擺在哪、以及檔案權限 644 與 755 各自代表什麼,其實是同一套邏輯下的三個面向。把這套邏輯搞懂一次,往後遇到權限相關的錯誤、搬家、資安加固,都能自己判斷該動哪裡。這篇會先帶你認得根目錄的長相,再拆解權限數字怎麼算,最後給出一份每個路徑該設多少的對照,以及為什麼 wp-config.php 不能放著用預設值。
主機根目錄與 public_html 是什麼
簡單說,public_html 是你的網站對外公開的根目錄,訪客在瀏覽器輸入網域時,伺服器就是從這個資料夾開始找檔案。在 cPanel 類型的虛擬主機上,登入檔案管理員後最常看到的就是它;放進 public_html 的檔案才會被網路看見,放在它外面的檔案外界抓不到。
不同主機環境名稱會有差異。Linux 主機多半叫 public_html,少數叫 www 或 htdocs;Windows 主機則常見 wwwroot。雲端主機或 VPS 上,網站根目錄可能是 /var/www/html 這類路徑。名字不重要,重要的是觀念:這是「網站的家」,瀏覽器存取網域時載入的第一份檔案(通常是 index.php)就放在這裡。
當你把 WordPress 安裝在 public_html 底下,打開這個資料夾會看到三類東西,認得它們就不會亂刪:
- 三個核心資料夾:wp-admin(後台管理介面的程式)、wp-includes(WordPress 核心函式庫)、wp-content(你真正會動到的區域,主題、外掛、上傳的圖片都在這)。
- 設定與規則檔:wp-config.php(資料庫帳密與金鑰)、.htaccess(Apache 的網址重寫與規則,固定網址功能會寫入這裡)、index.php(網站入口)。
- 其他核心檔:一堆 wp- 開頭的 php 檔,例如 wp-login.php、wp-load.php,這些是核心程式,正常情況不該手動改。
理解這層結構後,權限才有討論的意義。因為每一類檔案需要的存取程度不同:核心程式只要能被讀取執行,wp-content/uploads 必須能被寫入(不然上傳不了圖),而 wp-config.php 最好連讀都限制到只剩必要對象。
檔案權限的數字怎麼來的
每一個 644 或 755,本質上是三組權限的加總,分別對應三種身份對這個檔案能做的事。先把這套規則記起來,後面看任何權限數字都能秒拆。
Linux 把存取者分成三種身份,順序固定:
- 擁有者(Owner):檔案的所有人,通常是你的主機帳號。
- 群組(Group):跟擁有者同一群組的使用者,網站環境裡常是網頁伺服器所屬的群組。
- 其他人(Others):既不是擁有者、也不在同群組的所有人,也就是伺服器上的其他帳號或外界。
每一種身份各有三種動作的權限,各自有對應數字:
- 讀取(read,r)= 4:檔案是看內容,目錄是列出裡面有哪些檔案。
- 寫入(write,w)= 2:檔案是修改或刪除內容,目錄是新增、刪除、搬移裡面的檔案。
- 執行(execute,x)= 1:檔案是把它當程式跑,目錄則是「能不能進得去」。
權限數字就是把這三個值相加。三碼數字由左到右,第一碼給擁有者、第二碼給群組、第三碼給其他人。
擁有者
群組
其他人
以 755 為例:擁有者 7 = 4+2+1,讀寫執行全有;群組 5 = 4+0+1,只能讀和執行;其他人 5 也是 4+0+1,同樣只能讀和執行。換成符號就是 rwxr-xr-x。644 則是擁有者 6 = 4+2+0(可讀寫、不可執行),群組與其他人都是 4(只能讀),符號為 rw-r–r–。
為什麼資料夾用 755、檔案用 644
一句話先講結論:目錄需要「執行」權限才能進得去,所以用帶 x 的 755;一般檔案不需要被當程式執行,所以用不含 x 的 644。WordPress 官方建議的基準正是目錄 755、檔案 644。
關鍵在「執行」這個動作對目錄的意義跟對檔案完全不同。對檔案,執行是把它當程式跑;對目錄,執行代表「能不能用 cd 進到這個資料夾、穿過它去抓裡面的檔案」。這就帶出一個容易踩的雷:如果把目錄設成 644,擁有者雖然有讀取權能看到目錄清單,卻因為缺了執行權而進不去,整個資料夾等於癱瘓。所以目錄的擁有者位至少要是 7,不能比照檔案用 6。
對一般網頁檔案來說,644 的設計剛好夠用。擁有者能讀能改(你要更新檔案內容),群組和外界只能讀。網頁伺服器透過「其他人」這個身份把 php 檔讀進來交給 PHP 直譯器執行,這個過程靠的是讀取權,不需要檔案本身帶執行位。所以 php、css、js、圖片這些檔案維持 644 就對了,多給寫入或執行權只是擴大被竄改的風險。
目錄 755 的道理也一樣。其他人需要 5(讀 + 執行)才能進入資料夾並讀取裡面的網頁,這是網站能對外服務的前提;但他們不需要寫入權(那個 2),所以不給。這套「755 配 644」是標準虛擬主機的安全基準,伺服器透過 others 位讀取你的檔案,但誰都不能往裡面寫東西。
值得補充的是更嚴格的現代環境。若你的主機採用 suexec 或 PHP-FPM 獨立 pool,PHP 程序是用「跟檔案擁有者同一個帳號」在跑,這時不需要 others 這個身份來讀檔,可以把方案收緊成目錄 750、檔案 640,直接把「其他人」的權限歸零。一般共享主機做不到這層隔離,755 與 644 仍是務實解。
wp-config.php 為什麼不能停在 644
wp-config.php 是整個 WordPress 安裝裡最敏感的一個檔案,建議權限設成 600、640、440 或 400,而不是檔案預設的 644。原因是它裝著你的資料庫主機、帳號、密碼,以及驗證金鑰與 salt,等於整個網站的鑰匙串。
很多人會反駁:644 也沒在怕,因為網頁伺服器是「執行」php 而不是把原始碼直接吐出來,外界用瀏覽器抓 wp-config.php 只會拿到空白。這個說法在單純的 HTTP 曝險上確實成立,但它沒涵蓋另一個威脅模型。在共享主機上,同一台伺服器的所有網站常常是用同一個網頁伺服器帳號在跑;只要隔壁站被入侵,攻擊者的腳本就能用「其他人」這個身份、靠 644 給的讀取權,直接用程式讀走你的 wp-config.php 內容,拿到資料庫帳密。
另一個漏洞是備份殘檔。如果某個工具在旁邊留下一份 wp-config.php.bak,這種 .bak 副檔名不會被 PHP 直譯,644 又讓全世界可讀,原始碼就真的攤在網路上。把權限收到 600 或 640,這兩道門一次關掉,而且完全不影響網站運作。怎麼選看環境:
- 共享主機、PHP 以共用帳號運行:設 640,檔案擁有者是你的部署帳號、群組設成網頁伺服器的群組。PHP 靠群組位讀檔,外界(others)拿不到任何權限,你自己也還能編輯。
- suexec 或 PHP-FPM 獨立 pool、PHP 以站主帳號運行:設 440 或 400。PHP 程序本身就是擁有者,靠擁有者位讀檔,其他身份一律不給。
要臨時修改 wp-config.php 時,若它是 440,得先放寬擁有者的寫入權(改成 640)改完再轉回 440。聽起來麻煩,但這正是把最敏感檔案鎖緊該付的代價。
777 為什麼是絕對不要碰的數字
遇到外掛裝不起來、上傳失敗,網路上最常見的爛建議就是「改成 777 就好了」。先記住結論:777 在現代主機上幾乎沒有任何正當用途,更不是修錯誤的解法。
777 等於 rwxrwxrwx,把讀、寫、執行三種權限同時開放給擁有者、群組、其他人。在共享主機上,這代表同一台機器上任何其他租戶的程序都能覆寫你的網站檔案;在 VPS 上,代表任何一個被攻陷的程序、不管它用哪個帳號跑,都能改寫你的站。後門程式常常刻意把它植入的檔案 chmod 成 777,就是為了讓這個入侵點在你重設密碼或更新外掛之後依然存活。
那外掛裝不起來到底是什麼問題?多半不是權限數字,而是「擁有權」對不上。這是 644 與 755 之外、很多教學跳過的關鍵概念。
權限對了還是寫不進去,問題出在擁有權
如果你已經把目錄設成 755、檔案設成 644,外掛安裝卻還是失敗、後台跳出「請輸入 FTP 帳密」,問題八成不在權限,而在檔案的擁有權。權限描述「三種身份各能做什麼」,擁有權則決定「跑這支程式的使用者,算是哪一種身份」,兩者是分開的兩件事。
舉個例子:wp-content/plugins 目錄設成 755,看起來完全正確。但如果它的擁有者是你的部署帳號(例如 deploy),而 PHP 是用 www-data 這個帳號在跑,那 PHP 對這個目錄來說只是「其他人」,755 給其他人的是讀 + 執行、沒有寫入。結果就是 PHP 能列出目錄、卻沒辦法在裡面建立新檔案,外掛當然裝不起來。權限照教科書是對的,卡關的是擁有權。
WordPress 後台之所以跳出 FTP 帳密表單,正是這個擁有權落差的表面症狀。當 WordPress 要寫檔時,它會在目標目錄建一個暫存檔,比對這個暫存檔的擁有者跟 WordPress 自身 php 檔的擁有者是否為同一個使用者:相同就判定能安全直接寫入;不同就改走 FTP 或 SSH 管道,若這些管道又沒有預設帳密,就只好彈出表單問你。注意這個判斷比的是擁有者帳號、不是權限數字,所以把目錄改成 777 一點用都沒有,真正的解是讓擁有權對上。
該怎麼處理要看主機類型:
- 共享主機 / 代管主機:你通常沒有權限自己改擁有權。直接聯絡主機商客服,請他們確認 PHP 程序的帳號跟你 WordPress 檔案的擁有者一致。用 cPanel 的主機,後台 WHM 的「Fix File Ownership」工具能自動修正。
- VPS / 有 SSH 權限:用 chown 把檔案擁有權對齊 PHP 實際運行的帳號。單站環境通常是把整個網站目錄 chown 給 www-data;多站環境則建議每站一個獨立系統帳號,讓 PHP pool 與檔案擁有權都用同一帳號。
如果真的要繞過 WordPress 的擁有權檢查、強制直接寫入,可以在 wp-config.php 加一行 define( ‘FS_METHOD’, ‘direct’ );。但要清楚它的作用:這只是叫 WordPress 跳過偵測、直接嘗試寫入,並不會真的賦予 PHP 沒有的寫入權。如果 PHP 本來就沒有 wp-content 的寫入權,加了這行只會把原本客氣的 FTP 表單,換成一個赤裸的檔案系統錯誤。它是「我知道我在做什麼,放手去寫」的開關,不是發權限的工具。
怎麼檢視與調整這些權限
最直接的方式是透過主機的檔案管理員。在 cPanel 檔案管理員或 FileZilla 這類 FTP/SFTP 軟體裡,對檔案或資料夾按右鍵,選「檔案權限」「變更權限」或「Get Info」,就會看到目前的數字以及一格格可勾的讀 / 寫 / 執行核取方塊。要把整個資料夾下的目錄統一設 755、檔案統一設 644,FileZilla 與多數面板都有「遞迴套用到子目錄」的選項,記得分兩次做:一次只勾「套用到目錄」設 755,一次只勾「套用到檔案」設 644,不要把目錄也設成 644,否則會進不去。
有 SSH 權限的話,指令更快。chmod 755 是設權限,後面接路徑;想整批處理可加 -R 遞迴。檢視單一檔案用 ls -la,輸出最前面那串符號就是權限:看到 -rw——- 代表 600、-r–r—– 代表 640、-rwxr-xr-x 代表 755。順帶確認一下擁有者欄位,跟 PHP 運行的帳號對不對得上,往往比權限數字本身更能說明問題出在哪。
不論用哪種方式,調整前先記住三個底線:目錄不要低於 755(會進不去)、一般檔案維持 644 即可(不必給寫入或執行)、wp-config.php 一定要收緊到 640 以下。把根目錄的結構、權限數字的算法、以及擁有權與權限的分工這三件事連起來看,下次再遇到上傳失敗、外掛裝不起來、或資安報告點名某個檔案,你就能直接判斷該動權限、該找主機商改擁有權,還是根本不該碰它。