解决IIS7上WordPress的权限问题

Mis*_*mes 1 wordpress iis-7

我在通过WPI安装的Win2k8/IIS7上运行WordPress(使用httpcache,fastCgi和UrlRewriter 2.0).一切似乎都运行正常(上传,通过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'); 
Run Code Online (Sandbox Code Playgroud)

我错过了配置选项或设置吗?WordPress需要牺牲一只小猫和/或阿尔及利亚人吗?

Bar*_*jen 8

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. 禁用模拟php.ini中fastcgi.impersonate = 0,所以PHP下运行的应用程序池标识为在IIS设置.
  4. 使用自动生成的应用程序池用户帐户(例如"IIS AppPool\MyAppPoolName")设置文件夹的读/写权限.

这样一来,所有的PHP脚本以确保在系统帐户下运行,依赖于网站的应用程序池(从其他网站隔离的话),并不能意外获取通过模拟太大众的访问.