Почему свойство ObjectSecurity в экземпляре DirectoryEntry GroupPrincipal всегда равно нулю?

Я пытаюсь узнать, как создать новую группу Windows (используя C#) и назначить ей AccessRule, используя локальные службы каталогов пользователей / групп.

Я написал следующий код, который пытается сначала создать группу, получить для нее DirectoryEntry, а затем создать и назначить новый пользовательский AccessRule:

using System;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.Security.AccessControl;

...
...

var principalContext = new PrincipalContext(ContextType.Machine);
var group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
if (group == null)
{
    group = new GroupPrincipal(principalContext)
    {
        Name = "groupName",
        GroupScope = GroupScope.Local,
        Description = "groupName description",
        SamAccountName = "groupName",
    };

    group.Save();
}

var path = $"WinNT://{Environment.MachineName}/groupName,group";
var directoryEntry = new DirectoryEntry(path);

var accessRule = new ActiveDirectoryAccessRule(
    group.Sid,
    ActiveDirectoryRights.WriteProperty,
    AccessControlType.Allow,
    PermissionsDataSource.CanOverrideExpiredKeysPermissionId,
    ActiveDirectorySecurityInheritance.None);

directoryEntry.ObjectSecurity.AddAccessRule(accessRule);
directoryEntry.Options.SecurityMasks = SecurityMasks.Dacl;

directoryEntry.CommitChanges();

В настоящий момент у меня возникают проблемы с попытками добавить вновь созданное правило доступа к объектам безопасности:

 directoryEntry.ObjectSecurity.AddAccessRule (accessRule); 

Свойство ObjectSecurity имеет значение null. Аналогично, свойство Options имеет значение null. Поэтому я не уверен, что правильно создаю GroupPrincipal.

Было бы удивительно, если бы кто-то с некоторым опытом или знаниями в этой области мог помочь мне понять, что мне нужно сделать, чтобы иметь возможность добавлять правила доступа к объекту группы, как я пытаюсь сделать выше.

Заранее спасибо!

PS Значение

 PermissionsDataSource.CanOverrideExpiredKeysPermissionId 
это просто произвольный Guid, который относится к определенному уникальному сопоставлению разрешений, которое приложение, которое я пишу, использует при проверке, есть ли у групп, к которым принадлежит пользователь, правило доступа с этим значением.

1 ответ

Вы работаете с местной группой. Локальные группы Windows не имеют разрешений.

Это можно увидеть, открыв Управление компьютером (compmgmt.msc) -> Локальные пользователи и группы -> Группы. Щелкните правой кнопкой мыши группу и выберите "Свойства". Вы увидите, что там нет вкладки "Безопасность".

Другие вопросы по тегам