我有一个C#代码,可以创建一个文件夹并为其设置一些权限。这是代码示例:
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新手,所以不太了解它。
答案 0 :(得分:9)
我遇到了同样的问题,实际的原因是,如果你从另一篇文章中查看该网络服务图片,它只适用于文件。如果他们说“此文件夹,子文件夹和文件”,则基本权限将仅显示在第一张图片上。为此,您需要设置两个标志-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
答案 1 :(得分:4)
此代码适用于我:
security.AddAccessRule(
new FileSystemAccessRule(
"domain\\login",
FileSystemRights.Modify,
InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow
));
答案 2 :(得分:3)
我也有这个问题。执行以下代码后:
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 的属性对话框将显示如下:
如您所述,仅选中“特殊权限”,但如果您点击“高级”,则会看到:
请注意,在此对话框中,NETWORK SERVICE具有修改权限。
似乎当您以编程方式设置权限时,Windows不会在文件夹属性对话框中显示这些权限,但它们仍然存在于高级安全设置下。我还确认我的Window服务(作为NETWORK SERVICE运行)可以访问 folderPath 中的文件。
答案 3 :(得分:2)
FileSystemRights.ReadAndExecute
不允许您修改。这是只读的。
您需要FileSystemRights.Modify
才能获得全部范围。
您可以查看out以了解可用选项。
以下是上述示例:
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);
答案 4 :(得分:0)
我在VB中使用相同的代码,设置了FileSystemRights.FullControl。
Dim fsRule As FileSystemAccessRule = New FileSystemAccessRule(sid, FileSystemRights.FullControl, (InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit), PropagationFlags.None, AccessControlType.Allow)