我需要从 IIS 访问另一台计算机上的文件夹。两台服务器都是 Windows 2008 SP2,它们位于 Amazon EC2 上的虚拟私有云中。它们通过私有 IP 相互访问 - 它们位于 WORKGROUP 中,而不是域中。
以管理员身份登录客户端时,我可以手动访问共享文件夹。但 IIS 出现“拒绝访问”提示。以下是我所做的:
- 设置文件共享 = ON
- 设置密码保护共享 = OFF
- 设置公共文件夹共享 = ON
- 共享文件夹
- 为共享添加了权限:所有人,完全控制
- 添加了共享的权限:网络服务、完全控制
- 验证 Windows 防火墙中是否已选中文件和打印机共享
- 开放 445 端口以接收来自本地来源的入站流量
我尝试将 <remote-machine-name>\NETWORK SERVICE 添加到共享,但它说无法识别该机器,我想这是有道理的。
正如我所说,从另一台计算机,我可以轻松通过我的用户帐户访问共享文件夹,但 IIS 被关闭了。文件服务器怎么知道区别呢?我认为,在每个人都拥有完全控制权并关闭密码保护共享的情况下,客户端用户帐户是什么就无关紧要了。
无论如何,如何解决?
更新:澄清一下,我并没有尝试直接通过 IIS 提供共享上的文件。而是从我的代码 (System.IO) 将文件写入共享。
答案1
IIS 的默认操作模式非常严格。IIS 不使用<computername>\NETWORK SERVICE
。它使用<computername>\IUSR_<computername>
,它是组的成员<computername>\Guests
。如果您尝试在 IIS 服务器上访问的网页要求身份验证,它将尝试使用这些凭据进行身份验证。如果它访问的文件是可执行脚本,那么它将使用IWAM_<computername>
。我不记得它的组成员身份了。
您在这里要做的事情在工作组中配置起来并不容易。您必须在远程计算机上设置一个帐户,其用户名和密码与 IIS 系统使用的用户名和密码相同。您可以使用脚本来确定 IIS 用户帐户的密码,但我不知道 IIS 是否会定期更改该密码,或者该脚本在较新版本中是否不起作用。