我应该在 IIS 中授予哪个用户权限?

我应该在 IIS 中授予哪个用户权限?

我正在运行安装了 IIS 8 的 Windows 2012 服务器,
我有一个 php 脚本,它抱怨没有对特定文件夹的写入权限。
如果我向这个 IUSR 用户授予权限,它工作得很好,
但我不知道这是正确的做法还是安全?
我阅读了有关 IUSR 的信息,其中有大量关于此用户用于匿名身份验证的描述,我只是不明白授予它完全权限是否存在风险。
所以我停止了工作,认为先从专家那里获得一些建议是明智的。
我应该授予哪个用户权限?
谢谢!

答案1

基于 Windows NT 的操作系统中的所有对象访问都是在用户帐户的上下文中执行的。当匿名用户访问您的网站时,IIS 会访问IUSR_计算机名称用户帐户。此用户帐户的权限非常有限,用于划分匿名访问。

IIS 中的身份验证功能允许远程用户进行身份验证,以便 IIS“模拟”他们的 Windows 用户帐户并访问他们的用户帐户的上下文而不是匿名用户帐户的上下文。

如果您的远程用户没有 Windows 用户帐户,那么他们只是匿名用户,无法向 IIS 进行身份验证。在这种情况下(这是典型情况),您只需要授予匿名用户帐户权限,以便执行使应用程序正常运行所需的一切操作。有些应用程序就是这样的——您无法让用户进行身份验证,因此您必须使用匿名访问并向匿名用户帐户授予权限。

这是否“危险”?这取决于您的应用程序。例如,如果匿名用户能够将任意文件上传到目录并执行它们,那么您实际上是在服务器计算机上开放公共 shell 访问权限。应用程序的架构将决定这一点。

在我看来,允许匿名用户将任意类型、数量和大小的文件上传到远程服务器计算机的应用程序表面上看起来非常危险。如果存储上传文件的目录可以通过网络服务器访问以供下载,那么这将是一个彻底的灾难,因为实际上,您只是将服务器变成了一个公共文件共享网站。如果用户可以让他们上传的任何内容(包括 EXE 文件和/或脚本文件)由 Windows 或 PHP 解释器执行,那么这也是一个彻底的灾难。

写入越“远离”用户控制(即如果脚本只是将文件保存在那里以跟踪状态,而不是允许用户上传任意内容),看起来就越“危险”。我希望脚本能够很好地清理用户输入并限制用户可以使脚本写入的数据量(以防止 DoS 攻击)。

最终,您真正需要的是应用程序安全架构审查,或许还有渗透测试。如果这是一个受支持且公开可用的常用脚本,那么希望简单的安全漏洞应该已经被解决。如果这是更精致或定制的东西,那么我会谨慎地信任应用程序的安全架构,而无需对其进行审查。

相关内容