将应用程序池作为应用程序池标识进行回收

时间:2013-12-24 04:50:38

标签: iis uac isapi-wsgi

我正在创建一个设置,在我的服务器上推送到我的中央git仓库会自动将更改推送到我的站点文件夹,该文件夹在Windows Server 2012上通过IIS 8运行。

这很容易。以下是有效的: 我有一个Bonobo Git Server,一个在IIS上运行的站点。我在Bonobo管理的中央仓库上有一个后接收挂钩。然后,此挂钩运行批处理文件,将更改提取到站点文件夹的存储库中。 这是可能的,因为自然地,后接收挂钩作为分配给Bonobo的应用程序池的身份运行,即“IIS AppPool \ GitServerAppPool”,并且我在该站点的文件夹上赋予该身份修改权限。

因此代码被推送和拉动。问题是项目是用Python编码的,并使用ISAPI_WSGI集成到IIS中,因此我没有任何机制,我知道,重新加载代码而不回收应用程序池。

授予后续接收脚本权限以回收应用程序池是很困难的。

所以,问题是这个。 - 接收后脚本作为“IIS AppPool \ GitServerAppPool”运行,因此无法重新启动其他应用程序池,因为这样做需要管理员帐户。 - 运行appcmd或计划任务时,任何使用RunAs都不起作用,因为它需要输入密码才能通过UAC。 - 在runas上使用/ savecreds不起作用,因为我无法以AppPoolIdentity身份登录,以便首先输入密码。

所以我被困住了。如果以任何形式或形式可能出现以下任何一种情况,它们应该可行,但我找不到办法。

  1. 某种降低回收应用池所需权限的方法。
  2. 在runas命令中包含密码的某种方式(外部世界无法访问该脚本,所以我可以忍受这个)
  3. 以GitServerAppPool手动运行命令的某种方式,以便我可以使用/ savecreds运行一次批处理文件,而不必再次输入密码
  4. 有人知道如何做a,b或c,或者有其他解决方案吗?

    一个可行的解决方案是在作为管理员帐户运行的应用程序池上运行git服务器。这似乎与UAC开始提供完整的管理员访问权限以解决IIS安全性的规则相反。当然,如果必须的话,我会的。

    非常感谢您的任何帮助或建议。

    BTW,这样做的原因是让我的其他开发人员分散在全球各地,能够将他们的更改直接推送到他们的临时服务器,而不会受到干扰,也无法实际访问服务器。因此,手动重新启动应用程序池会失败。

2 个答案:

答案 0 :(得分:0)

编写一个简单的Windows服务,它可以监视某些文件目录以进行更改,也可以侦听另一个要触发的机制。然后它回收有问题的应用程序池。

在具有足够权限的帐户下运行该服务以回收池。

确保来自外部的人无法启动此过程。

答案 1 :(得分:0)

根据彼得的回答,我提出了一个更为苛刻的解决方案,暂时可以做到。更好的解决方案将是彼得的上述,但它需要更多的专业知识来设置。

在收到后的批处理文件中,调用eventcreate在Windows事件日志中创建一个事件,如下所示:

call eventcreate /S MACHINE_NAME /u Administrator /p password /t information /id 500 /d "A git post-receive hook has updated site code"

MACHINE_NAME是您服务器的计算机名称。包含此内容非常重要,因为EVENTCREATE需要管理员权限。它只是通过提供用户名和密码作为参数来远程创建事件。包括机器名称似乎将其置于远程模式,这是提供用户/传递所必需的。

因此,这允许您使用来自任何来源的管理员凭据创建活动。

您可以在Task Scheduler中创建一个侦听此事件的任务。打开它,创建一个任务并使触发器侦听一个事件,其中“EventCreate”作为源和您在上面的命令中提供的事件ID(上例中为500,但您可以使用任何数字)。确保将任务设置为以管理员身份运行,并让它以提升的权限运行。

让任务运行批处理包含:

call %systemroot%\system32\inetsrv\appcmd.exe recycle apppool /apppool.name:APPPOOLNAME

仅将大写的APPPOOLNAME替换为您要回收的池的名称。

像彼得建议的那样,创建真实服务的缺点是:

  1. 您需要在批处理文件中以纯文本形式写入管理员密码,因此请确保没有其他人可以使用此文件。
  2. 理论上,另一个应用程序可能会创建具有相同ID的事件,并导致您的应用程序池回收。 (如果我提供自定义源名称,则eventcreate似乎失败,这将删除此问题)
  3. 它有更多移动部件,使设置复杂化