每個主機和主機的情況可能有所差異,如下只是概括性地描述,並不一定適用於所有情況。它只適用於進行“常規設置”的情況(注:比如通過“suexec”方式來進行共享主機的,詳情見下方)
通常,所有文件是由您的賬戶(或者說是 FTP 賬戶)所有的,同時您的賬戶也具有寫權限。在共享主機上,文件不應該由網頁服務器本身的進程所有(有時候是www、apache或nobody用戶)。
所有 WordPress 需要寫的文件,都應由 WordPress 使用的用戶賬戶所有,或由該賬戶所在的組所有。比如說,您有一個用於 FTP 文件傳輸的用戶帳戶,但您的服務器使用另一個單獨的用戶,該用戶又在單獨的用戶組中(比如 dhapache or nobody)。 如果 WordPress 以您的 FTP 賬戶運行,那個賬戶則需要擁有寫權限 —— 也就是說,成為該文件的所有者,或處於擁有寫權限的組中。在后面的例子中,則需要設置比默認值更高的權限(比如,應在目錄上應用 775 權限,而不是 755;應在文件上應用 664 權限,而不是 644)。
對於 WordPress 來說,文件和目錄的設置在大多數情況下對於所有用戶都應一樣,這取決於您的安裝類型,以及您系統安裝時的 umask 設置。
通常,所有 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
之前最好閱讀一下相關教程,以確認你自己完全了解該方法。如果權限設定不正確的話,你的網站就有可能會離線。
完成2個步驟你就可以讓wp-content
目錄下的所有文件可寫,但在讓每個文件及文件夾可寫之前,你應當采取較安全的手段來修改目錄。請嘗試各命令,如果沒用的話,請依次進行嘗試,有的甚至可以讓外觀主題圖片文件變成可寫。將DIR替換為你希望進行寫入操作的文件夾
chmod 746 -v DIR chmod 747 -v DIR chmod 756 -v DIR chmod 757 -v DIR chmod 764 -v DIR chmod 765 -v DIR chmod 766 -v DIR chmod 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.php 644 -rw-r--r-- /home/user/cgi-bin/.htaccess 644 -rw-r--r-- /home/user/cgi-bin/php.ini 755 -rwxr-xr-x /home/user/cgi-bin/php.cgi 755 -rwxr-xr-x /home/user/cgi-bin/php5.cgi
Secured Permissions
600 -rw-r--r-- /home/user/wp-config.php 604 -rw----r-- /home/user/cgi-bin/.htaccess 600 -rw------- /home/user/cgi-bin/php.ini 711 -rwx--x--x /home/user/cgi-bin/php.cgi 100 ---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
引用至:http://codex.wordpress.org/zh-cn:%E6%9B%B4%E6%94%B9%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90