簡體   English   中英

解決IIS7上WordPress的權限問題

[英]Resolving Permissions Problems for WordPress on IIS7

我在通過WPI安裝的Win2k8 / IIS7(使用httpcache,fastCgi和UrlRewriter 2.0)上運行WordPress。 一切似乎都工作正常(上傳,通過Live Writer發布,注釋,插件,漂亮的URL)。

我正在嘗試將WordPress更新到最新版本,但出現如下錯誤:

下載失敗。 文件流的目標目錄不存在或不可寫

這與嘗試下載主題或更新插件時遇到的錯誤相同。

事件日志中沒有錯誤,並且WordPress並沒有真正告訴我它要查找的目錄,它認為正在使用的用戶或缺少的權限。

我已經進行了兩次(三次)檢查,以確定是否已設置IIS App Pool用戶,並且該目錄具有對該用戶的修改權限,最后,這些權限已傳播到子文件夾中。

在Google博士的建議下,我還向配置文件添加了以下設置:

/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');

define('WP_TEMP_DIR', ABSPATH . 'wp-content/');
define('FS_METHOD', 'direct'); 

我是否缺少配置選項或設置? WordPress是否需要犧牲一只小貓和/或阿爾及利亞degu?

有關IIS7安裝PHP手冊 (重點是我的):

模擬和文件系統訪問

建議使用IIS時在PHP中啟用FastCGI模擬。 這由php.ini文件中的fastcgi.impersonate指令控制。 啟用模擬功能后,PHP將代表由IIS身份驗證確定的用戶帳戶執行所有文件系統操作。 這樣可以確保即使在不同的IIS網站上共享相同的PHP進程,只要每個網站上的IIS身份驗證使用不同的用戶帳戶,這些網站中的PHP腳本也將無法訪問彼此的文件。

例如,IIS 7在其默認配置中啟用了匿名身份驗證,並將內置用戶帳戶IUSR用作默認身份。 這意味着,為了使IIS執行PHP腳本,必須向IUSR帳戶授予對這些腳本的讀取權限。 如果PHP應用程序需要對某些文件執行寫操作或將文件寫到某些文件夾中,則IUSR帳戶應對此具有寫權限。

“我應該通過FastCGI模擬PHP嗎?”中討論的那樣。 關於ServerFault的問題,是否要授予匿名用戶對服務器的寫訪問權,存在安全性問題。 例如,如果您還啟用了WebDAV模塊,則任何人都可以使用此協議寫入目錄!

因此,我的建議是:

  1. 確保所有站點都分配了自己唯一的應用程序池
  2. 在應用程序池的 處理模型 下的“ 高級設置”中 ,將內置帳戶設置為ApplicationPoolIdentity
  3. 使用fastcgi.impersonate = 0禁用php.ini中的模擬,因此PHP在IIS中設置的“ 應用程序池標識”下運行。
  4. 使用自動生成的應用程序池用戶帳戶 (例如“ IIS AppPool \\ MyAppPoolName”)設置文件夾的讀/寫權限。

這樣,可以確保所有PHP腳本都在系統帳戶下運行,並與站點的應用程序池關聯(將其與其他站點隔離),並且不會通過模擬意外地獲得過多的公共訪問權限。

如果我錯了,請指正我,但我相信以下配置可提供相同的好處,並且也尊重PHP所需的fastcgi.impersonate = 1設置。

步驟1,2和4相同-步驟3不同。

  1. 確保每個站點都有自己的應用程序池(與上面相同)
  2. 在“高級設置”>“處理模型”>“應用程序池標識”下(與上面相同)
  3. IIS>身份驗證>匿名身份驗證>應用程序池標識(不是IUSR)
  4. 使用IIS AppPool \\ MyAppPoolName設置讀取/寫入權限(與上面相同)

我們不授予IUSR或IIS_IUSRS訪問Webroot的權限。 所有權限都分配給IIS AppPool \\ MyAppPoolName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM