继承的权限,同时赋予NTFS权限丢失(Inherited permissions lost whil

2019-09-22 07:23发布

我想给特定用户的UNC路径上的NTFS权限,但我看到这取决于UNC路径上的不同的行为。 下面是代码(从MSDN里面我是用授予权限在每个场景中),结果,

static void GiveNTFSPermissions(string folderPath, 
                                string ntAccountName, 
                                FileSystemRights accessRights)
{
    DirectorySecurity dirSecurity = Directory.GetAccessControl(folderPath);

    FileSystemAccessRule newAccessRule =
         new FileSystemAccessRule(
               ntAccountName,
               accessRights,
               AccessControlType.Allow);

    dirSecurity.AddAccessRule(newAccessRule);

    Directory.SetAccessControl(folderPath, dirSecurity);
}

假设我有一个名为我的本地机器“RootShare”份额,和里面的另一个文件夹“InsideRootShare”。

Scenario1:当我打电话,

GiveNTFSPermissions(@"\\sri-devpc\RootShare",
                    @"domain\username",
                    FileSystemRights.Write);

继承的权限丢失了共享的路径上,

Scenario2:当我打电话,

GiveNTFSPermissions(@"\\sri-devpc\RootShare\InsideRootShare", 
                    @"domain\username", 
                    FileSystemRights.Write);

继承的权限完好无损。

我曾尝试用不同的构造FileSystemAccessRule但没有运气。

什么是这种行为背后的原因,这方面的任何解决方法吗?

Answer 1:

我们遇到了与文件系统权限的工作踢反弹球的安全模块上工作,而类似的问题。 我们想出了解决办法如下。 这将成功地设置权限的任何文件夹不改变文件夹上的继承规则。

    public void SetFileSystemRights(string target, string group, FileSystemRights permission)
    {
        if (!IsDirectory(target) && !IsFile(target))
            return;

        var oldSecurity = Directory.GetAccessControl(target);
        var newSecurity = new DirectorySecurity();

        newSecurity.SetSecurityDescriptorBinaryForm(oldSecurity.GetSecurityDescriptorBinaryForm());

        var accessRule = new FileSystemAccessRule(group,
                                                  permission,
                                                  InheritanceFlags.None,
                                                  PropagationFlags.NoPropagateInherit,
                                                  AccessControlType.Allow);
        bool result;
        newSecurity.ModifyAccessRule(AccessControlModification.Set, accessRule, out result);

        if (!result) Log.AddError("Something wrong happened");

        accessRule = new FileSystemAccessRule(group,
                                              permission,
                                              InheritanceFlags.ContainerInherit |
                                              InheritanceFlags.ObjectInherit,
                                              PropagationFlags.InheritOnly,
                                              AccessControlType.Allow);

        result = false;
        newSecurity.ModifyAccessRule(AccessControlModification.Add, accessRule, out result);
        if (!result) Log.AddError("Something wrong happened");

        Directory.SetAccessControl(target, newSecurity);

        if (result) Log.AddGood("Permissions set for '{0}' on folder '{1}'", group, target);

        if (!result) Log.AddError("Something wrong happened");
    }

发现我原本用来算出这个链接 。



文章来源: Inherited permissions lost while giving NTFS permissions