gpt4 book ai didi

c# - 使用 C# 控制台应用程序为 IIS 应用程序池设置文件夹权限

转载 作者:行者123 更新时间:2023-12-04 16:11:13 26 4
gpt4 key购买 nike

我想以编程方式为用户(即 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)没有权限的问题,Allow栏没有勾选(见PropertiesSecurity标签strong> 对话框)甚至我设置了完全访问控制。

我以管理员身份运行可执行程序,但同样如此。

为什么?

最佳答案

我遇到了同样的问题 - 我成功地为 IIS 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);

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

关于c# - 使用 C# 控制台应用程序为 IIS 应用程序池设置文件夹权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40587421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com