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

Я пытаюсь узнать, как создать новую группу 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.

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

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

P.S. The value

PermissionsDataSource.CanOverrideExpiredKeysPermissionId
is simply an arbitrary Guid which relates to the specific unique permission mapping that the application I am writing uses when checking if the groups a user belongs to has an access rule with this value.


person SolidRegardless    schedule 27.07.2018    source источник


Ответы (1)


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

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

person Gabriel Luci    schedule 17.10.2018