1. ホーム
  2. シーピー

ディレクトリセキュリティとFileSystemAccessRule

2022-03-20 18:35:32

フォルダのパーミッション設定に問題がある。

1. フォルダの読み書きが拒否されるが、ファイルの読み書きができる:InheritanceFlagsの使用、リンク参照

2.denyの方がallowより優先順位が高いので、前のパーミッションを削除する、そうしないと、deny-> allowはその後もアクセスできない

3. パーミッションが拒否された後、フォルダは存在するが、存在するかどうかを判断する*コメントアウト*の部分が論理的に正しくない

public void SetDirSystemRight(DirectoryInfo dInfo, bool isAllow)
        {
            // if (!dInfo.Exists)
            // return;
 
            DirectorySecurity ds = dInfo.GetAccessControl();
            string acctName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
            NTAccount acct = new NTAccount(acctName);
            FileSystemAccessRule allowRule = new FileSystemAccessRule(acct,
                FileSystemRights.FullControl,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None, AccessControlType.Allow);
 
 
            FileSystemAccessRule denyRule = new FileSystemAccessRule(acct,
                FileSystemRights.FullControl,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None, AccessControlType.Deny);
 
            if (isAllow)
            {
                ds.RemoveAccessRuleAll(denyRule);
                ds.AddAccessRule(allowRule);
            }
            else
            {
                ds.RemoveAccessRuleAll(allowRule);
                ds.AddAccessRule(denyRule);
            }
 
            dInfo.SetAccessControl(ds);
 
        }