問題描述

我看過 here,但沒有找到任何有關最佳檔案許可權的詳細資訊。我也看過一些關於 here too 的 WordPress’s form’s 問題,但任何建議 777 的人顯然需要一點安全的教訓。

總之我的問題是這個。我應該有以下許可權:

  1. 根資料夾儲存所有 WordPress 內容

  2. wp-admin

  3. wp-content

  4. wp-includes

然後在這些資料夾中的所有檔案?

最佳解決方案

當您設定 WP 時 (Web 伺服器) 可能需要對檔案進行寫入訪問。所以訪問許可權可能需要鬆動。

chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} ;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} ;  # Change file permissions rw-r--r--

安裝完成後,您應該收緊訪問許可權,根據 Hardening WordPress,除了 wp-content 之外的所有檔案都只能由您的使用者帳戶寫入。 wp-content 也可以由 www-data 寫入。

chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content

也許你想更改 wp-content 中的內容。在這種情況下你可以

  • 暫時使用者使用 su 改為 www-data,

  • 給 wp-content 組寫訪問 775 並加入組 www-data 或

  • 給您的使用者使用 ACLs 的資料夾的訪問許可權。

無論您做什麼,請確保檔案具有 www-data 的 rw 許可權。

次佳解決方案

www-data 使用者 (在這種情況下是 Web 伺服器使用者) 的所有 wp 檔案的完全訪問可能是危險的。所以不要這樣做:

chown www-data:www-data -R *

當您安裝或升級 WordPress 及其 plug-ins 時,可能會很有用。但是當你完成它不再是保持由 web 伺服器擁有的 wp 檔案的好主意。

它基本上允許 Web 伺服器放置或覆蓋您的網站中的任何檔案。這意味著如果有人設法使用 Web 伺服器 (或某些.php 指令碼中的安全漏洞) 將一些檔案放在您的網站中,則可能會接管您的站點。

為了保護您的網站免受此類攻擊,您應該遵守以下規定:

All files should be owned by your user account, and should be writable by you. Any file that needs write access from WordPress should be writable by the web server, if your hosting set up requires it, that may mean those files need to be group-owned by the user account used by the web server process.

/

The root WordPress directory: all files should be writable only by your user account, except .htaccess if you want WordPress to automatically generate rewrite rules for you.

/wp-admin/

The WordPress administration area: all files should be writable only by your user account.

/wp-includes/

The bulk of WordPress application logic: all files should be writable only by your user account.

/wp-content/

User-supplied content: intended to be writable by your user account and the web server process.

Within /wp-content/ you will find:

/wp-content/themes/

Theme files. If you want to use the built-in theme editor, all files need to be writable by the web server process. If you do not want to use the built-in theme editor, all files can be writable only by your user account.

/wp-content/plugins/

Plugin files: all files should be writable only by your user account.

Other directories that may be present with /wp-content/ should be documented by whichever plugin or theme requires them. Permissions may vary.

來源和附加資訊:http://codex.wordpress.org/Hardening_WordPress

第三種解決方案

對於那些在他們的主資料夾下有他們的 wordpress 根資料夾的人:

** Ubuntu /apache

  1. 將您的使用者新增到 www-data 組:

信用 Granting write permissions to www-data group

你想在你的使用者上呼叫 usermod 。那就是:

sudo usermod -aG www-data yourUserName

**假設存在 www-data

  1. 檢查您的使用者是否在 www-data 組中:groups yourUserName

你應該得到如下的東西:

youUserName : youUserGroupName www-data

** youUserGroupName 通常類似於您的使用者名稱

  1. 遞迴更改 wp-content 資料夾的組所有權,保留使用者所有權 chown yourUserName:www-data -R youWebSiteFolder/wp-content/*

  2. 將目錄更改為 YouWebSiteFolder /wp-content /cd youWebSiteFolder/wp-content

  3. 遞迴更改資料夾和 sub-folders 的組許可權以啟用寫許可權:find . -type d -exec chmod -R 775 {} ;

`/home /yourUserName /youWebSiteFolder /wp-content /’ 的模式從 0755(rwxr-xr-x) 更改為 0775(rwxrwxr-x)

  1. 遞迴更改檔案和 sub-files 的組許可權以啟用寫許可權:find . -type f -exec chmod -R 664 {} ;

結果應該如下所示:

WAS:
-rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
CHANGED TO:
-rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html

相當於:

chmod -R ug + rw 資料夾名稱

許可權將如 664 檔案或 775 目錄。

附:如果任何人在更新外掛時遇到錯誤'could not create directory',請在您的域的根目錄中執行:server@user:~/domainame.com$ sudo chown username:www-data -R wp-content 。假設:wp-config.php 具有 FTP credentials on LocalHost define('FS_METHOD','direct');

第四種方案

我設定許可權為:

    # Set all files and directories user and group to wp-user
    chown wp-user:wp-user -R *

    # Set uploads folder user and group to www-data
    chown www-data:www-data -R wp-content/uploads/

    # Set all directories permissions to 755
    find . -type d -exec chmod 755 {} ;

    # Set all files permissions to 644
    find . -type f -exec chmod 644 {} ;

在我的情況下,我建立了一個特定的 WordPress 使用者,它與 apache 預設使用者不同,阻止從 Web 訪問該使用者所擁有的那些檔案。

然後它允許 apache 使用者處理上傳資料夾,最後設定足夠安全的檔案和資料夾許可權。

EDITED

如果您使用的是 W3C Total Cache,那麼您還應該執行下列操作:

chmod 777 wp-content/w3tc-config
chmod 777 wp-content/cache

rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced

然後它會工作!

EDITED

經過一段時間的開發 WordPress 網站,我建議每個環境不同的檔案許可權:

在生產中,我不會訪問使用者來修改檔案系統,我只允許他們上傳資源,並訪問某些外掛特定的資料夾進行備份等。但是,在 Git 下管理專案並使用部署金鑰伺服器,升級外掛不是很好,也不是生產。我在這裡離開生產檔案設定:

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/

www-data:www-data = apache 或 nginx 使用者和組

分段將共享相同的生產許可權,因為它應該是它的克隆。

最後,開發環境將可以訪問更新外掛,翻譯,一切…

# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes

# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin

www-data:www-data = apache 或 nginx 使用者和組 your-user:root-group =您當前的使用者和根組

這些許可權將允許您訪問在 themesyour-plugin 資料夾下開發,而無需許可。其餘內容將由 Apache 或 Nginx 使用者擁有,以允許 WP 管理檔案系統。

在建立 git repo 之前,先執行以下命令:

# Set all directories permissions to 755
find . -type d -exec chmod 755 {} ;

# Set all files permissions to 644
find . -type f -exec chmod 644 {} ;

第五種方案

該檔案的正確許可權為 644 該資料夾的正確許可權為 755

要更改許可權,請使用終端和以下命令。

find foldername -type d -exec chmod 755 {} ;
find foldername -type f -exec chmod 644 {} ;

資料夾為 755,檔案為 644 。

第六種方案

我認為以下規則建議使用預設 wordpress 網站:

  • 對於 wp-content 中的資料夾,設定 0755 許可權:chmod -R 0755 外掛 chmod -R 0755 上傳 chmod -R 0755 升級

  • 讓 apache 使用者成為 wp-content 的上述目錄的所有者:chown apache uploads chown apache upgrade chown apache plugins

第七種方案

它實際上取決於您計劃使用的外掛,因為某些外掛會更改 wordpress 的根檔案。但是通常我會推薦一下這樣的 wordpress 目錄。

這將分配”root”(或任何您正在使用的使用者) 作為使用者在每個單個檔案/資料夾,R 表示遞迴,所以它不會停止在”html” 資料夾。如果您沒有使用 R,那麼它僅適用於”html” 目錄。

sudo chown -R root:www-data /var/www/html

這將”wp-content” 的所有者/組設定為”www-data”,從而允許 Web 伺服器透過管理面板安裝外掛。

chown -R www-data:www-data /var/www/html/wp-content

這將將”html” 資料夾 (包括子目錄中的檔案) 中的每個檔案的許可權設定為 644,因此外部人員無法執行任何檔案,修改任何檔案,組不能執行任何檔案,修改任何檔案,只有使用者允許修改/讀取檔案,但是甚至使用者也不能執行任何檔案。這很重要,因為它阻止了”html” 資料夾中的任何型別的執行,由於 html 資料夾的所有者以及除了 wp-content 資料夾以外的所有其他資料夾都是”root”(或您的使用者),www-data 無法修改 wp-content 之外的任何檔案資料夾,因此即使 Web 伺服器中存在任何漏洞,如果有人未經授權訪問該站點,則除了外掛外,它們不能刪除主站點。

sudo find /var/www/html -type f -exec chmod 644 {} +

這將限制使用 rw-r —– 這些許可權訪問”wp-config.php” 到使用者/組的許可權。

chmod 640 /var/www/html/wp-config.php

如果一個外掛或更新被抱怨,它無法更新,那麼訪問 SSH 並使用此命令,並透過管理面板向”www-data”(Web 伺服器) 授予臨時許可權以進行更新/安裝,然後還原回”root” 或您的使用者一旦完成。

chown -R www-data /var/www/html

並且在 Nginx(與 apache 相同的過程) 來保護 wp-admin 資料夾免遭未經授權的訪問和探測。即使您已安裝 nginx,也需要使用 apache2-utils 來加密密碼,如果您打算將更多使用者新增到同一個檔案中,則不需要 c 。

sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName

現在訪問這個位置

/etc/nginx/sites-available/

使用此程式碼來保護”wp-admin” 資料夾的密碼,如果您嘗試訪問”wp-admin”,則會詢問密碼/使用者名稱。通知,這裡您使用包含加密密碼的”.htpasswd” 檔案。

location ^~ /wp-admin {
    auth_basic "Restricted";
    auth_basic_user_file /etc/nginx/.htpasswd;
    index  index.php index.html index.htm;
}

現在重新啟動 nginx 。

sudo /etc/init.d/nginx restart

第八種方案

命令:

chown www-data:www-data -R *
find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;

哪裡 ftp-user 是您用來上傳檔案的使用者

chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。