2

环境是Windows 2008 R2,ASP.NET 4,IIS 7。我有一个场景,用户向服务器提交一些设置,服务器根据设置生成文件(位图或SVG文件)并保存文件到一个文件夹中。通过写入位图生成图像,使用 File.WriteAllText 生成 SVG 文件。然后将用户重定向到该文件。

我没想到的是,服务器能够在我不授予文件夹写权限的情况下创建文件。我检查的事情:

  • w3wp.exe 在 IIS AppPool/MyUser 下运行,正确的应用程序池标识
  • IIS AppPool/MyUser 具有对该文件夹的读取权限——如果我转到 Security/Advanced/Effective Persmissions 并检查 MyUser 对该文件夹的权限,我将获得 List Folder/Read Data、Read attributes、Read extended attributes 和 Read permissions
  • 如果我在写入文件之前抓取 System.Security.Principal.WindowsIdentity.GetCurrent().Name,它会正确设置为应用程序池标识。
  • 创建的文件的所有者是 MyUser

我不明白的是为什么 ASP.NET 可以在应用程序池具有只读访问权限的文件夹中创建文件?

4

1 回答 1

0

原来用户组对文件夹具有创建文件的特殊权限。不知道为什么在 Windows 2008 中默认添加它——在我所有的服务器盒子上,新文件夹都是由具有创建文件和其他一些特殊权限的用户创建的。Windows 7 上的行为有所不同——没有向用户组添加特殊权限。

无论如何,删除该权限解决了这个问题。

谢谢。

于 2012-11-25T13:10:41.320 回答