在計算機檔案系統中,不同的檔案和目錄具有的許可權會指定哪些人及哪些內容可讀、寫、修改及訪問。這是很重要的,因為 WordPress 可能需要訪問並寫入 wp-content 目錄下的檔案以啟用特定的功能。
許可權模式
7 5 5 使用者 組 任何人 r+w+x r+x r+x 4+2+1 4+0+1 4+0+1 = 755
許可權模式是由使用者,檔案組及其他所有人各組數值分別相加得出的。從上面的圖表中應該能看出個大概。
- Read 4 – 允許讀檔案
- Write 2 – 允許寫/修改檔案
- eXecute1 – 讀/寫/刪除/修改/目錄
7 4 4 使用者 組 任何人 r+w+x r r 4+2+1 4+0+0 4+0+0 = 744
許可權模式例項
| 模式 | 字元表示 | 說明 |
|---|---|---|
| 0477 | -r–rwxrwx | 所有者僅可讀 (4),其他及組可讀寫執行 (7) |
| 0677 | -rw-rwxrwx | 所有者僅可讀寫 (6),其他及組可讀寫執行 (7) |
| 0444 | -r–r–r– | 所有均僅可讀 (4) |
| 0666 | -rw-rw-rw- | 所有均僅可讀寫 (6) |
| 0400 | -r——– | 所有者僅可讀 (4),組及其他無任何許可權 (0) |
| 0600 | -rw——- | 所有者僅可讀寫 (6),組及其他無任何許可權 (0) |
| 0470 | -r–rwx— | 所有者僅可讀,組可讀寫執行,其他則無任何許可權 |
| 0407 | -r—–rwx | 所有者僅可讀,其他可讀寫執行,組則無任何許可權 |
| 0670 | -rw-rwx— | 所有者僅可讀寫,組可讀寫執行,其他則無任何許可權 |
| 0607 | -rw—-rwx | 所有者僅可讀寫,其他可讀寫執行,組則無任何許可權 |
WordPress 許可權方案
每個主機和主機的情況可能有所差異,如下只是概括性地描述,並不一定適用於所有情況。它只適用於進行 「常規設定」 的情況 (注:比如透過 「suexec」 方式來進行共享主機的,詳情見下方)
通常,所有檔案是由您的賬戶 (或者說是 FTP 賬戶) 所有的,同時您的賬戶也具有寫許可權。在共享主機上,檔案不應該由網頁伺服器本身的程式所有 (有時候是 www 、 apache 或 nobody 使用者) 。
所有 WordPress 需要寫的檔案,都應由 WordPress 使用的使用者賬戶所有,或由該賬戶所在的組所有。比如說,您有一個用於 FTP 檔案傳輸的使用者帳戶,但您的伺服器使用另一個單獨的使用者,該使用者又在單獨的使用者組中 (比如 dhapache or nobody) 。如果 WordPress 以您的 FTP 賬戶執行,那個賬戶則需要擁有寫許可權 —— 也就是說,成為該檔案的所有者,或處於擁有寫許可權的組中。在後面的例子中,則需要設定比預設值更高的許可權 (比如,應在目錄上應用 775 許可權,而不是 755;應在檔案上應用 664 許可權,而不是 644) 。
對於 WordPress 來說,檔案和目錄的設定在大多數情況下對於所有使用者都應一樣,這取決於您的安裝型別,以及您系統安裝時的 umask 設定。
Template:Note 2
通常,所有 WordPress 核心檔案都應只能有您的使用者賬戶 (或 httpd 所用的賬戶) 所寫入。 (有時候您可能使用多個 FTP 賬戶來管理 WordPress 檔案,且所有的 FTP 賬戶都十分可信,比如您不在共享的主機上,那麼為組設定寫許可權也可以。請聯絡主機提供商以瞭解詳情。) 然而,若您使用 mod_rewrite 固定連結等 .htaccess 功能,則您需要讓 WordPress 對 /.htaccess 檔案可寫。
若您希望使用內建主題編輯器,所有檔案應對組可寫。在修改之前請先編輯試試,看看能否直接編輯成功。 (如果是多個使用者上傳的 WordPress 包、外掛或主題,則大概需要進行修改。若主題和外掛是透過站點後臺安裝的,就不會有問題。在共享主機中,請確認該組中只有您信任的使用者… apache 不應作為使用者,也不應該擁有檔案。)
有些外掛需要 /wp-content/ 目錄可寫 —— 如果這樣,外掛會在安裝過程中告知您。有時,可能需要您分配 775 許可權。同樣,在某些情況下您也可能需要令 /wp-content/cache/ 和 /wp-content/uploads/ 可寫 (若使用了多站點,則也需要 /wp-content/blogs.dir/ 可寫) 。
關於外掛的其它許可權要求,請見外掛相關檔案。
/ |- index.php|- wp-admin| `- wp-admin.css|- wp-blog-header.php|- wp-comments-post.php|- wp-commentsrss2.php|- wp-config.php|- wp-content| |- cache| |- plugins| |- themes| `- uploads|- wp-cron.php|- wp-includes`- xmlrpc.php
使用 suexec 的共享主機
上方的許可權設定可能不適用於使用了 「suexec」 來執行 PHP 的共享主機。當今很多服務提供商都開始使用這種方式了。在這種情況下,PHP 程式以 PHP 檔案的所有者來執行,使配置變得更加簡單、安全。
注意:suexec 方式不應用於單使用者情況下,因為它們只有在多個使用者存在的時候才更安全。
在這種 suexec 的配置下,正確的許可權方案很好理解:
- 所有檔案應由使用者的賬戶擁有,而不是 httpd 所使用的賬戶。
- 組的許可權設定無關緊要了,除非網頁伺服器程式需要進行許可權檢查。通常不會。
- 所有目錄應設定為 755 或 750 。
- 所有檔案應設為 644 或 640 。例外:wp-config.php 應設為 600,以防其它使用者讀取。
- 不應給任何目錄設定 777 許可權,上傳目錄也不行。由於 PHP 程式是以檔案所有者的身份執行,它甚至可以寫入 755 許可權的目錄。
使用 FTP 客戶端
FTP 程式 (客戶端) 允許你在遠端主機上為檔案及目錄設定許可權。此功能在程式選單中一般顯示為 chmod 或設定許可權。
在 WordPress 安裝中,你可能想要修改的兩個檔案應該是索引頁,以及控制佈局的 CSS 。這裡給出修改 index.php 的方法 – 其他檔案的修改步驟也是如此。
看以下截圖中的最後一欄 – 即顯示許可權的地方。看起來是不是有點讓人迷惑,先不管它,注意字母的次序即可。
![]()
初始許可權
右擊』index.php』 並選擇』 檔案許可權』
然後就會彈出一個視窗。

修改檔案許可權
別管這些核取方塊。只要刪除』Numeric value:』 的內容並輸入所需的數值即可 – 此例中為 666,點選確定 (OK) 即可。
![]()
許可權已被修改
現在你應該能看到許可權已經被修改了。
顯示隱藏檔案
預設情況下,大部分 FTP 客戶端,也包括 FileZilla,都保留有隱藏檔案,這些檔案開頭都帶有一個句點 (.),這樣一來就不會顯示出來了。不過在某些情況下,你可能需要檢視這些隱藏檔案,因此你就需要對這些檔案的許可權進行修改。比如,你可能需要使控制固定連結的.htaccess 檔案可寫。
要在 FileZilla 中顯示隱藏檔案的話,就要選擇頂部選單中的』 檢視 (View)』,然後選擇』 顯示隱藏檔案』 。然後螢幕中顯示的檔案就會重新整理,之前被隱藏的檔案此時就會顯示出來。
讓 FileZilla 總是顯示隱藏檔案 – 編輯 (Edit) 下,設定 (Settings),遠端檔案列表 (Remote File List),選擇總是顯示隱藏檔案 (Always show hidden files) 即可。
使用命令列
如果你可以透過 shell/SSH 訪問主機帳戶的話,就可以使用 chmod 來修改檔案許可權,此方法推薦高階使用者使用。在你開始使用 chmod 之前最好閱讀一下相關教程,以確認你自己完全瞭解該方法。如果許可權設定不正確的話,你的網站就有可能會離線。
- Unix 許可權
- Apple Chmod 相關參考
完成 2 個步驟你就可以讓 wp-content 目錄下的所有檔案可寫,但在讓每個檔案及資料夾可寫之前,你應當採取較安全的手段來修改目錄。請嘗試各命令,如果沒用的話,請依次進行嘗試,有的甚至可以讓外觀主題圖片檔案變成可寫。將 DIR 替換為你希望進行寫入操作的資料夾
chmod 746 -v DIRchmod 747 -v DIRchmod 756 -v DIRchmod 757 -v DIRchmod 764 -v DIRchmod 765 -v DIRchmod 766 -v DIRchmod 767 -v DIR
如果以上這些均不允許你進行寫操作,請按次序重試一次,不過這次請將 -v 替換為 -R,這將遞迴式地修改位於資料夾中的各檔案。如果完成此操作後仍無法寫入的話,就可以嘗試 777 了。
關於 Chmod
chmod 是一個 unix 命令,表示修改檔案的模式 (即」change mode」)-R 標記的意思是將修改應用於 wp-content 中的所有檔案及目錄。 766 是我們所要修改的目錄具有的許可權,它表示目錄可被 WordPress 及系統中其他所有的使用者讀和寫。最後我們有了需要修改的目錄名稱,wp-content 。如果 766 無效的話,你可以嘗試使用 777,這將使得所有的檔案及資料夾對於所有使用者,組合程式可讀,可寫及可執行。
如果你使用了固定連結,就應當修改.htaccess 檔案的許可權以保證 WordPress 能夠在你修改設定時進行更新,如新添頁面,重新導向和分類時,就需要更新.htaccess 檔案。
- 開啟 WordPress 主目錄
- 輸入 chmod -v 666 .htaccess
使用 777 的弊端
有關此許可權的關鍵問題是,你的伺服器是如何設定的。你用 FTP 或 SSH 登入伺服器的使用者名稱很可能不是伺服器程式所使用的用於頁面託管的使用者名稱。
7 7 7 user group world r+w+x r+w+x r+w+x 4+2+1 4+2+1 4+2+1 = 777
Apache 伺服器通常為 dhapache 或 nobody 使用者帳戶擁有。這些帳戶對伺服器檔案的訪問時受限的。透過將你的使用者帳戶擁有的個人檔案及資料夾設定為全域性可寫,那麼這些檔案及資料夾就確實為全域性可寫了。現在 dhapache 及 nobody 使用者對你的使用者帳戶檔案就具有完全的訪問權了。
但同時這就使得某些人可以透過劫持你伺服器上的任何程式來訪問你的檔案了,這還包括了在你機器上的其他使用者。因此修改許可權時應當慎重。至少我從來沒有遇到過需要制定超過 767 許可權的情況,因此在看到 777 時,自然就應當問問為何需要使用它。
最壞的結果
作為將一個目錄甚至於一個檔案的許可權設定為 777 的最壞結果, 惡意攻擊者將可以上傳檔案或者修改已經存在的檔案來執行程式碼,以獲得你的部落格的所有控制權,包括你的資料庫和密碼。
尋找替代方法
通常可以透過 WordPress 外掛得到特性的增強,而無須自己面對潛在的危險。 可以聯絡外掛作者或者你的主機服務商來尋求解決方法。
關於安全檔案許可權
.htaccess 檔案是被當前伺服器程式所有者訪問的一個檔案。所以如果你攝製的許可權過低,那你的伺服器將無法訪問該檔案從而引發錯誤。可以透過逐步增加許可權直到可以正常工作的方式來尋找最佳許可權設定。
許可權配置例項
下面是一個關於自定義編譯 php-cgi 為二進位制和自定義 php.ini 指定 cgi-bin 執行目錄的例子。透過.htaccess 檔案防止使用者瀏覽器直接訪問編譯器和 php.ini 。
預設許可權 (umask 022)
644 -rw-r--r-- /home/user/wp-config.php644 -rw-r--r-- /home/user/cgi-bin/.htaccess644 -rw-r--r-- /home/user/cgi-bin/php.ini755 -rwxr-xr-x /home/user/cgi-bin/php.cgi755 -rwxr-xr-x /home/user/cgi-bin/php5.cgi
Secured Permissions
600 -rw-r--r-- /home/user/wp-config.php604 -rw----r-- /home/user/cgi-bin/.htaccess600 -rw------- /home/user/cgi-bin/php.ini711 -rwx--x--x /home/user/cgi-bin/php.cgi100 ---x------ /home/user/cgi-bin/php5.cgi
.htaccess 許可權
644 > 604 – The bit allowing the group owner of the .htaccess file read permission was removed. 644 is normally required and recommended for .htaccess files.
php.ini 許可權
644 > 600 – 預先允許所有的組和所有的使用者都可以訪問這一伺服器上的 php.ini 檔案,哪怕這樣的請求來自於網站。比較棘手的是 php.ini 只能被 php.cgi 使用,我們只需要確認 php.cgi 程式是否已經在訪問了。 php.cgi 在兩個檔案屬於同一使用者的時候會執行,也就意味著只有一個使用者可以訪問這一檔案。
php.cgi 許可權
755 > 711 這一檔案是一個編譯好的 php-cgi 二進位制用來替換 mod_php 或者主機提供商預設的 php 目錄。 預設的許可權是 755 。
php5.cgi 許可權
755 > 100 – 由於安裝的使用者就是執行 php cgi 程式的所有者,其他的使用者或者組不需要訪問,所以我們禁止了所有的除了執行的訪問。 這非常有趣,你可以嘗試讀取檔案,寫檔案等操作, 不過這都需要執行 php 指令碼。而作為這一檔案的所有者你可以隨時改變它的許可權。
$ cat: php5.cgi: Permission denied./php5.cgi: Welcome