C# DirectorySecurity未正确设置权限
我有一个C代码,可以创建一个文件夹并设置一些权限。以下是代码示例:C# DirectorySecurity未正确设置权限,c#,C#,我有一个C代码,可以创建一个文件夹并设置一些权限。以下是代码示例: static void Main(string[] args){ Directory.CreateDirectory("C:\\vk07"); DirectorySecurity dirSec = Directory.GetAccessControl("C:\\vk07"); dirSec.AddAccessRule(new FileSystemAccessRule("INTR
static void Main(string[] args){
Directory.CreateDirectory("C:\\vk07");
DirectorySecurity dirSec = Directory.GetAccessControl("C:\\vk07");
dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers", FileSystemRights.ReadAndExecute, AccessControlType.Allow));
Directory.SetAccessControl("C:\\vk07", dirSec);
}
当我检查上面创建的文件夹上设置的权限时,它只显示选中的“特殊权限”,而不是读取和修改(这是我在代码中设置的)
有人能帮我吗?我是ACL新手,所以不太了解它。
文件系统权限。ReadAndExecute
不允许您修改。这是只读的。
您需要FileSystemRights.Modify
获取完整范围。
您可能需要检查可用的选项
以下是上述情况的一个示例:
String dir = @"C:\vk07";
Directory.CreateDirectory(dir);
DirectoryInfo dirInfo = new DirectoryInfo(dir);
DirectorySecurity dirSec = dirInfo.GetAccessControl();
dirSec.AddAccessRule(new FileSystemAccessRule("INTRANET\\fGLBChorusUsers",FileSystemRights.Modify,AccessControlType.Allow));
dirInfo.SetAccessControl(dirSec);
我也有这个问题。执行以下代码后:
var security = Directory.GetAccessControl(folderPath);
security.AddAccessRule(
new FileSystemAccessRule(
new SecurityIdentifier(WellKnownSidType.NetworkServiceSid, null),
FileSystemRights.Modify,
InheritanceFlags.ObjectInherit,
PropagationFlags.InheritOnly,
AccessControlType.Allow
)
);
Directory.SetAccessControl(folderPath, security);
…然后folderPath的属性对话框将显示如下:
如您所述,仅选中“特殊权限”,但如果单击“高级”,则会看到:
请注意,在此对话框中,网络服务具有修改权限
似乎当您以编程方式设置权限时,Windows不会在“文件夹属性”对话框中显示这些权限,但它们仍然存在于“高级安全设置”下。我还确认了我的窗口服务(作为网络服务运行)能够访问folderPath中的文件。我也遇到了同样的问题,实际原因是如果您查看另一篇文章中的网络服务图片,它仅适用于文件。基本权限仅在第一张图片上显示,如果它们显示“此文件夹、子文件夹和文件”,则要执行此操作,需要设置两个标志-InheritanceFlags.ContainerInherit+InheritanceFlags.ObjectInherit
Try
'If destination directory does not exist, create it first.
If Not Directory.Exists(path) Then Directory.CreateDirectory(path)
Dim dir As New DirectoryInfo(path)
Dim dirsec As DirectorySecurity = dir.GetAccessControl()
'Remove inherited permissions
dirsec.SetAccessRuleProtection(True, False)
'create rights, include subfolder and files to be inherited by this
Dim Modify As New FileSystemAccessRule(username, FileSystemRights.Modify, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)
Dim Full As New FileSystemAccessRule(admingroup, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)
dirsec.AddAccessRule(Modify)
dirsec.AddAccessRule(Full)
'Set
dir.SetAccessControl(dirsec)
Catch ex As Exception
MsgBox(ex.Message)
End Try
此代码适用于我:
security.AddAccessRule(
new FileSystemAccessRule(
"domain\\login",
FileSystemRights.Modify,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow
));
我在VB中使用了相同的代码,设置FileSystemRights.FullControl
Dim fsRule As FileSystemAccessRule = New FileSystemAccessRule(sid, FileSystemRights.FullControl, (InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit), PropagationFlags.None, AccessControlType.Allow)
嗨,我也试过修改。无论我做什么,我只能看到该文件夹上设置的“特殊权限”。因此,我想我在这里遗漏了一些东西。请尝试以下代码
String dir=@“C:\vk07”;CreateDirectory(dir);DirectoryInfo dirInfo=新的DirectoryInfo(dir);DirectorySecurity dirSec=dirInfo.GetAccessControl();dirSec.AddAccessRule(新的FileSystemAccessRule(“INTRANET\\fglbChrousers”,FileSystemRights.Modify,AccessControlType.Allow));dirInfo.SetAccessControl(dirSec)代码>添加和删除的一个很好的例子可以找到,我有完全相同的问题,我发现遵循Alexander V.的建议并使用PropagationFlags。没有一个固定的问题被问到c#?