在計算機文件系統中,不同的文件和目錄具有的權限會指定哪些人及哪些內容可讀、寫、修改及訪問。這是很重要的,因為 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 設置。

NOTE: 若您是自己安裝 WordPress,您大概不需要修改 WordPress 主題文件權限。除非您遇到了權限方面的問題,或您希望進行更改。

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 或設定權限。

本文已被標記為需要加工。歡迎您踴躍編輯它,來幫助 Codex 。

在 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 文件。

  1. 打開 WordPress 主目錄
  2. 輸入 chmod -v 666 .htaccess
NOTE: 就安全性方面來看,對全局可寫目錄進行最低限度的保護也是很好的。使用 744 這一具有較低許可範圍的設定做為開始,直到符合要求即止。如有必要的話才使用 777,且時間不宜過久。

使用 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