我们有一台 Web 服务器(带有 ASP.NET 的 IIS),其中部署了一个 Web 应用程序。Web 应用程序的用户可以使用它来上传文件。Web 应用程序需要使用 Windows 共享将文件保存到另一台服务器。然后,病毒扫描引擎访问 Windows 共享以扫描上传的文件是否有病毒。Windows 共享位于病毒扫描机上。
问题:Web 服务器和病毒扫描机器都不在同一个域中。事实上,它们根本不属于任何域。因此,很难设置共享以便 Web 服务器可以写入它。
在 Web 服务器和病毒扫描机器上的共享之间建立信任关系的最佳方法是什么,以便 Web 服务器可以写入病毒扫描机器上的共享?
(PS:Web 应用程序作为网络服务运行 - 这也可能被改变。)
答案1
你可以采用以下方法:
- 在 Web 服务器上创建一个帐户,以便以该帐户身份运行 Web 服务。
- 在病毒扫描机上创建一个具有相同用户名和密码的帐户。
- 在共享文件夹的 NTFS 权限中授予您创建的帐户对该文件夹的写入权限。
- 在共享文件夹的共享权限上设置“Everyone/Full Control”。
- 确保 Web 服务器和托管共享文件夹的计算机之间具有良好的名称解析。
编辑:
我从未使用过 sparks 在其回答中提到的“模拟”功能。我认为这无论如何都不会达到你想要的效果,因为独立机器无法模拟另一台独立机器(或模拟机器不是其成员的域)的帐户。
答案2
如果您希望 Web 服务器能够通过身份验证访问病毒扫描机器,那么您需要在病毒扫描机器上拥有一个对共享以及共享所在的文件系统具有适当权限的帐户。
应用程序在执行写入操作时需要使用正确的凭据连接到共享。
鉴于 Web 服务器无法使用来自病毒扫描机器的凭据运行 IIS 进程,您可能需要对应用程序进行修改以支持您所描述的经过身份验证的访问。不过,我建议对于 .NET 应用程序使用除普通旧 SMB 之外的其他东西,因为 API 对明确指定凭据的支持有些不足。FTP 或 SSH 可能很合适。
或者,根据您的安全要求,您可能能够只允许匿名对病毒扫描共享进行只写访问,并让 Web 服务器在未经身份验证的情况下与其通信。您可以使用防火墙规则或其他机制来限制此处的暴露,以防止允许匿名访问。