9

指定されたフォルダーとそのすべてのコンテンツに適切なアクセス権があることを確認するために、C# で小さなユーティリティを作成しています (Authenticated Usersグループに完全なアクセス権を付与したい)。次のコードは、最上位フォルダーの ACL (アクセス制御リスト) を更新するために適切に機能するようです。

SecurityIdentifier allUsers = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
InheritanceFlags iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
FileSystemAccessRule newRule = new FileSystemAccessRule(allUsers,
    FileSystemRights.FullControl, iFlags,
    PropagationFlags.None, AccessControlType.Allow);

DirectoryInfo info = new DirectoryInfo(folderPath);
DirectorySecurity security = info.GetAccessControl();
security.AddAccessRule(newRule);
info.SetAccessControl(security);

ただし、この新しいアクセス ルールは、セキュリティ プロパティで [継承可能なアクセス許可を含める...] オプションがオフになっているサブフォルダーには反映されないことに気付きました。それは理にかなっています。したがって、私がやりたいことは、そのようなサブフォルダーに対してセキュリティ許可の継承をオンに戻すことです。

私の掘り下げは、ObjectSecurity.SetAccessRuleProtection私が必要とするものの半分であるはずの方法を発見しました. ただし、親の DACL を既に継承しているオブジェクトに対して上記の方法をやみくもに使用するのは、ずさんなようです。したがって、権限の継承がオフになっているオブジェクトを特定したいのですが、この情報を返す対応するメソッドまたはプロパティが見つからないようです。ありますか?ここで何か不足していますか?

4

3 に答える 3

5

I remember using something like this:

DirectoryInfo d = new DirectoryInfo(@"e:\test1");
DirectorySecurity acl = d.GetAccessControl();
if (acl.GetAccessRules(false, true, typeof(System.Security.Principal.SecurityIdentifier)).Count >0)
    // -- has inherited permissions
else
    // -- has no inherited permissions

I was also trying to find a method to check for this but I couldn't find any (even in C++). So I ended up using the code above. It worked like a charm.

于 2012-04-19T10:03:53.580 に答える