【问题标题】:Set folder permission for a IIS application pool with C# Console application使用 C# 控制台应用程序为 IIS 应用程序池设置文件夹权限
【发布时间】:2016-11-14 11:13:40
【问题描述】:

我希望以编程方式为用户(即 IIS 应用程序池)设置文件夹权限,例如:

string websiteDict = @"C:\inetpub\wwwroot\mywebsite";
DirectoryInfo di = new DirectoryInfo( websiteDict );
DirectorySecurity ds = di.GetAccessControl();

ds.SetAccessRule( new FileSystemAccessRule( @"IIS AppPool\myAppPool", FileSystemRights.FullControl,
AccessControlType.Allow ) );

di.SetAccessControl( ds );

上述规则添加的用户(myAppPool)没有权限的问题,允许列没有勾选(参见Properties中的Security标签strong> 对话框)即使我设置了完全访问控制。

我以管理员身份运行可执行程序,但同样的事情。

为什么?

【问题讨论】:

  • 如果您尝试手动执行此操作,您的机器是否接受“IIS AppPool\myAppPool”的组/用户名?

标签: c#


【解决方案1】:

我遇到了同样的问题 - 我成功地为 IIS APPPOOL 设置了权限(在我的情况下 - 修改,我强烈建议您使用它而不是完全控制,除非您的应用程序池确实需要更改这些文件夹中文件的所有权)。但是,当我在文件系统中检查它时,我注意到应用程序池没有显示任何复选框。

仔细查看后,我注意到有一个特殊权限复选框(您必须向下滚动权限列表中的一项)。然后我点击了高级按钮,打开了我的apppool的权限,发现它确实有修改权限,但是没有配置权限继承。如果我手动将“应用于”字段设置为“此文件夹、子文件夹和文件”,所有预期的复选框都会出现在它们应该出现的位置。

要将“应用于”设置为“此文件夹、子文件夹和文件”,您必须添加三个 ACL 规则,而不是一个,如下所示:

var pathToGrantRights = fs.Path.Combine(Folder, "App_Data");
fs.Directory.CreateDirectory(pathToGrantRights);
var acl = fs.Directory.GetAccessControl(pathToGrantRights);

string acc = $"IIS APPPOOL\\{webapp.ApplicationPoolName}";
acl.AddAccessRule(new FileSystemAccessRule(acc, FileSystemRights.Modify, AccessControlType.Allow));
acl.AddAccessRule(new FileSystemAccessRule(acc, FileSystemRights.Modify, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
acl.AddAccessRule(new FileSystemAccessRule(acc, FileSystemRights.Modify, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow));
fs.Directory.SetAccessControl(pathToGrantRights, acl);

当您在对象本身之外添加文件夹和文件的继承时,它开始正常工作。

【讨论】:

    【解决方案2】:

    我检查了我的服务器,但池没有直接显示为我可以在 Windows 下使用的组来分配。

    在您的情况下,“IIS AppPool\myAppPool”可能无法作为安全组用于 Windows。如果没有,则无法将其应用于权限。

    【讨论】:

    • 我尝试了生产,用户存在,但仍然没有完成允许复选框...怎么了?
    • 我手动尝试过,有效。如果我通过 C# 做,不工作,甚至以管理员身份启动控制台
    • 好的,这是一个好的开始 - 让我挖掘一些代码,我一天中大部分时间都在打电话,谈论一些完全不相关的事情,可能不会做太多事情......但是......我看看我能挖出什么。我确实记得一些事情......
    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2011-02-15
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多