我可以更改通过IIS保存的文件的所有者(使用ASP.NET)

时间:2009-01-28 16:27:35

标签: asp.net security iis permissions windows-server-2003

有没有办法在Windows Server上使用IIS更改已保存文件的所有者。越容易越好。在文件已保存到光盘后,在保存或更改文件所有者期间必须完成此操作并不重要。 ASP.NET中的一个例子非常受欢迎。

3 个答案:

答案 0 :(得分:1)

理论上它应该是相当直接的。您能够执行此类操作以更改现有文件的所有权:

string domain = "domain";
string user = "username";

FileInfo info = new FileInfo(@"c:\test.txt");

FileSecurity security = info.GetAccessControl();

System.Security.Principal.NTAccount newOwner =
    new System.Security.Principal.NTAccount(domain, user);

security.AddAccessRule(
        new FileSystemAccessRule(newOwner, FileSystemRights.FullControl,
            AccessControlType.Allow));
security.SetAccessRuleProtection(true, false);
security.SetOwner(newOwner);

info.SetAccessControl(security);

在实践中,由于Windows强加的限制,这实际上并不起作用。 Windows不允许您将文件的所有者更改为除当前用户或管理员组之外的任何其他内容。

当它到达最后一行时,您将获得异常“安全标识符不允许是该对象的所有者”。

谷歌搜索表明有可能解决这个问题,但是当我过去尝试过时,我未能完成工作。我很想知道是否有人成功完成了这项工作。

答案 1 :(得分:1)

如果用户具有“还原文件和目录”权限,则可以将所有权分配给其他用户。默认情况下禁用此功能,因此您需要在尝试设置所有者之前启用它。 .Net没有内置支持,所以你需要PInvoke AdjustTokenPrivileges并使用其他非托管函数来获取输入。

我已经详细描述了它的使用on my blog

答案 2 :(得分:0)

虽然这不是一个定制的例子,但我相信你的答案在于 System.Security.AccessControl命名空间。

查看FileSecurity类,它可以让您识别规则和权限。 FileSecurity类由File.Create()等方法使用。