3

クライアントマシンでアクセスできる必要があるいくつかの重要な情報を使用してレジストリキーをロックダウンしようとしています。管理者以外のユーザーがこのキーにアクセスできるようにしたくありません。あなたが管理者であれば、私がキーに保存しているものよりも多くのダメージを与えることができます。

私が現在やろうとしていることはこれです:

//Allow access only to administrators and deny all rights to everyone else.
System.Security.AccessControl.RegistrySecurity acl = 
new System.Security.AccessControl.RegistrySecurity();
acl.AddAccessRule(
    new System.Security.AccessControl.RegistryAccessRule(
        "Administrators", 
        System.Security.AccessControl.RegistryRights.FullControl, 
        System.Security.AccessControl.AccessControlType.Allow));

acl.AddAccessRule(
    new System.Security.AccessControl.RegistryAccessRule(
        "Everyone",
        System.Security.AccessControl.RegistryRights.FullControl,
        System.Security.AccessControl.AccessControlType.Deny));

//Prevent inherited read access from the software or company key allowing access.
acl.SetAccessRuleProtection(true, false);

MyKey.SetAccessControl(acl);

私がそれを正しく持っている場合、これはすべての人へのアクセスを拒否し、管理者グループのすべての人へのアクセスを明示的に許可し、継承されたすべてのアクセス許可が私のキーに適用されるのを防ぎますか?キーのACLを台無しにして削除できないようにする前に、それが機能するかどうかを確認したいのですが、キーの所有者も管理者グループに設定する必要がありますか?

PS:キーは、変更されただけでなく、管理者以外の人としても読み取れないことが非常に重要です。

4

1 に答える 1

4

拒否ルールには十分注意してください。必要になることはめったにありません。

ACL内の唯一のACEが管理者に必要なアクセス権を与えるためのものである場合、アクセスを許可するACEがないため、他の誰もキーにアクセスできません。

AddAccessRule()新しいルール(またはACE)がACLの最後に追加されることが保証されるかどうかについては、ドキュメントからはわかりません。これは事実である可能性が高いですが、それがそのように機能せず、ACEが管理者にアクセスを許可する前に拒否ACEが終了した場合、拒否ACEはアクセスを許可するACEを「オーバーライド」します(最初のシステムは監視を停止します) ACLは、許可を付与または拒否する最初のACEに到達すると)。これが、拒否ACEの使用が難しい場合がある理由です。また、アクセス許可を明示的に付与しないACLはアクセスチェックに失敗するため、通常、アクセスを許可するユーザーを指定するだけで済みます。

所有者が管理者グループに設定されていることを確認することをお勧めします-所有者はキー(または任意のオブジェクト)にアクセスできませんが、所有者は常にACLを変更する権利を持っています(考えれば意味があります)ちょっとの間)。

于 2010-01-25T04:33:02.437 に答える