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