IIS7权限概述 - ApplicationPoolIdentity

Lia*_*amB 342 permissions iis-7

我们最近升级到IIS7作为核心Web服务器,我需要在权限方面进行概述.以前,当需要写入文件系统时,我会给AppPool用户(网络服务)访问目录或文件.

在IIS7中,我看到,默认情况下,AppPool用户设置为ApplicationPoolIdentity.因此,当我检查任务管理器时,我看到一个名为"WebSite.com"的用户帐户正在运行IIS进程('Website.com'是IIS中网站的名称)

但是,如果我尝试使用该帐户授予权限,则此用户帐户不存在.那么,我如何确定哪个用户也可以授予权限呢?

编辑================================================= =============================

有关屏幕截图中的问题,请参阅下文.我们的网站(www.silverchip.co.uk)使用用户名SilverChip.co.uk运行.但是当我添加提交时,这个用户确实存在!

在此输入图像描述

=================================请参阅AppPool图像

在此输入图像描述

Jon*_*ams 653

ApplicationPoolIdentity实际上是在IIS7中使用的最佳实践.它是一个动态创建的,无特权的帐户.要为特定应用程序池添加文件系统安全性,请参阅IIS.net的"应用程序池标识".快速版:

如果应用程序池名为"DefaultAppPool"(如果命名方式不同,则只需替换下面的文本)

  1. 打开Windows资源管理器
  2. 选择文件或目录.
  3. 右键单击该文件,然后选择"属性"
  4. 选择"安全"选项卡
  5. 单击"编辑",然后单击"添加"按钮
  6. 单击"位置"按钮,确保选择本地计算机.(如果服务器属于一个域,则不是 Windows域.)
  7. 在"输入要选择的对象名称:"文本框中输入" IIS AppPool\DefaultAppPool ".(不要忘记将"DefaultAppPool"更改为您为应用程序池命名的任何内容.)
  8. 单击"检查名称"按钮,然后单击"确定".

  • 请记住检查匿名身份验证的服务器设置是否也使用应用程序池标识.一旦我从IUSR切换回来,这个解决方案就适用于我. (18认同)
  • 注意这里!您无法使用Userinterface查找用户,但您必须键入它.检查名称是您唯一能做的事情. (11认同)
  • @Pino:不,不是网站名称.使用_application pool_ name.每个网站都分配给一个应用程序池.您可以在网站的属性"基本设置"对话框(在IIS7中)中分辨出哪一个. (10认同)
  • 正如你所说,我已按照你的指示行事.但有一个黑客.您必须在应用程序池设置中将属性"enable load user profile"设置为"true".只有在这个设置之后我才能运行应用程序.所以请更新您的说明并添加第9点. (7认同)
  • @Pino:在这种情况下,你应该使用的安全角色是`IIS AppPool\silverchip.co.uk`.我没有尝试过安全名称中的句点 - 您可能希望将其更改为没有标点符号的内容. (2认同)
  • 如果这对WinServ2008R2没有帮助怎么办? (2认同)
  • @JonAdams 谢谢:| 我现在找到了,太神奇了。所以“IIS AppPool\DefaultAppPool”是隐藏的,你必须准确输入:| 因为我选择高级并列出所有用户但没有找到 IIS AppPool。我以为它被禁用了 (2认同)

Jam*_*mey 80

在解析名称时,请记住使用服务器的本地名称,而不是域名

IIS AppPool\DefaultAppPool
Run Code Online (Sandbox Code Playgroud)

(只是一个提醒,因为这让我吵了一下):在此输入图像描述


Zan*_*non 27

使用IIS默认配置时,访问IIS AppPool\YourAppPoolName用户可能还不够.

在我的情况下,我仍然有错误HTTP错误401.3 -添加AppPool用户后未经授权,并且只有在向IUSR用户添加权限后才修复它.

这是必要的,因为默认情况下,使用IUSR完成匿名访问.您可以设置另一个特定用户,应用程序池或继续使用IUSR,但不要忘记设置适当的权限.

身份验证标签

致谢此答案:HTTP错误401.3 - 未经授权

  • 这很关键!!! 为了安全起见,必须将"匿名身份验证"更改为"应用程序池标识"!我确信这是一个很好的理由它设置为IUSR,但我想不出一个.谢谢!!! (3认同)
  • 这是一个重要的步骤,应该添加到已接受的答案中.最简单的方法是将单选框更改为应用程序池标识 (2认同)
  • 这是我的问题!谢谢你!! (2认同)
  • 我喜欢这样,六年后,你仍然解决了我的问题。#遗产 (2认同)

Chr*_*ris 26

在Windows Server 2008(r2)上,您无法通过"属性" - >"安全性"将应用程序池标识分配给文件夹.您可以使用以下命令通过管理命令提示符执行此操作:

icacls "c:\yourdirectory" /t /grant "IIS AppPool\DefaultAppPool":(R)
Run Code Online (Sandbox Code Playgroud)

  • 您实际上可以通过Windows Server 2008 R2中的"属性"中的"证券"选项卡进行分配,因此您不需要此解决方法.确保在对象类型和位置上选择了内置安全主体. (7认同)
  • 嗨Kate,我使用<>来表示"你的apppool名称",但保留了合法的apppool名称.在IIS管理器 - >应用程序池中,您需要匹配名称,包括空格.我做的最后一个是"IIS AppPool\ClientName_CompanyName - Intranet".:(R)在这种情况下授予读访问权限.您还可以使用F(完整),M(修改),RX(读取+执行)和W(只写). (3认同)
  • 另请参阅[link]的选择答案的原始响应http://serverfault.com/questions/81165/how-to-assign-permissions-to-applicationpoolidentity-account对于普通的Windows Server 2008(或数据中心版),你很漂亮必须使用命令行将应用程序池帐户放入安全对话框中.一旦它存在,你可以管理它,更改权限级别,子目录等.还要考虑:"icacls"c:\ yourdirectory"/ t/grant"IIS AppPool\DefaultAppPool":( OI)(CI)(R)"OI - 对象继承,CI容器继承. (3认同)

小智 10

A 部分:配置应用程序池

假设应用程序池名为“MyPool” 从 IIS 管理器转到应用程序池的“高级设置”

  1. 向下滚动到“身份”。尝试编辑该值将弹出一个对话框。选择“内置帐户”,然后在其下选择“ApplicationPoolIdentity”。

  2. 在“身份”下方的几行中,您应该找到“加载用户配置文件”。此值应设置为“真”。

B 部分:配置您的网站

  1. 网站名称:SiteName(只是一个例子)
  2. 物理路径:C:\Whatever(只是一个例子)
  3. Connect as... : Application User (pass-through authentication) (以上设置可以在IIS管理器站点的“基本设置”中找到)
  4. 配置完基本设置后,在站点主控制台的“IIS”下查找“身份验证”配置。打开它。您应该会看到“匿名身份验证”选项。确保它已启用。然后右键单击并“编辑...”它。选择“应用程序池标识”。

C 部分:配置文件夹

有问题的文件夹是 C:\Whatever

  1. 转到属性-共享-高级共享-权限,然后勾选“共享此文件夹”
  2. 在同一个对话框中,您会找到一个“权限”按钮。点击它。
  3. 将打开一个新对话框。点击“添加”。
  4. 将打开一个新对话框“选择用户或组”。在“从此位置”下,确保名称与您的本地主机计算机相同。然后,在“输入对象名称”下,键入“IIS AppPool\MyPool”并单击“检查名称”,然后单击“确定”
  5. 为“MyPool”用户授予完全共享权限。应用它并关闭文件夹属性
  6. 再次打开文件夹属性。这一次,转到安全-高级-权限,然后单击添加。顶部将有一个“选择委托人”选项,或其他一些用于选择用户的选项。点击它。
  7. “选择用户或组”对话框将再次打开。重复步骤 4。
  8. 向“MyPool”用户授予您需要的所有或尽可能多的权限。
  9. 选中“替换所有子对象权限...”并应用并关闭。

您现在应该可以使用浏览网站


Chr*_*lls 7

Top Answer from Jon Adams

Here is how to implement this for the PowerShell folks

$IncommingPath = "F:\WebContent"
$Acl = Get-Acl $IncommingPath
$Ar = New-Object  system.security.accesscontrol.filesystemaccessrule("IIS AppPool\DefaultAppPool","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $IncommingPath $Acl
Run Code Online (Sandbox Code Playgroud)