Получить групповые разрешения от LDAP с C # (READ ACL) - PullRequest
0 голосов
/ 21 ноября 2018

Мне нравится получать разрешения от группы.например, пользователь в этой группе может читать или писать ...

Я работаю с Microsoft ActiveDirectory.

С помощью DirectorySearcher я ищу так:

DirectorySearcher searcher = new DirectorySearcher(rootDSE)
{
    Filter = searchString,
    //SecurityMasks = SecurityMasks.Dacl | SecurityMasks.Owner | SecurityMasks.Group | SecurityMasks.Sacl
    SecurityMasks = SecurityMasks.Dacl | SecurityMasks.Group
    //SecurityMasks = SecurityMasks.Dacl
    //SecurityMasks = SecurityMasks.Group
            };

ntSecurityDescriptorэто байтовый массив в моем коде

group["ntSecurityDescriptor"][0] as byte[]

пока все хорошо

и сейчас я попытаюсь перечислить разрешения:

static void ReadAccess(byte[] sec)
{
    System.DirectoryServices.ActiveDirectorySecurity retVal = new System.DirectoryServices.ActiveDirectorySecurity();
    retVal.SetSecurityDescriptorBinaryForm(sec);

    //AuthorizationRuleCollection arc = retVal.GetAccessRules(true, false, typeof(System.Security.Principal.NTAccount));
    AuthorizationRuleCollection arc = retVal.GetAccessRules(true, false, typeof(System.Security.Principal.SecurityIdentifier));

    Console.WriteLine("\n\n");
    //AuthorizationRule || ActiveDirectoryAccessRule
    foreach (ActiveDirectoryAccessRule acr in arc)
    {
        string sid = null;
        try
        {
            sid = (acr.IdentityReference).Translate(typeof(NTAccount)).Value;
        }
        catch { }

        bool all = acr.ActiveDirectoryRights == ActiveDirectoryRights.GenericAll;
        bool read = acr.ActiveDirectoryRights == ActiveDirectoryRights.GenericRead;
        bool write = acr.ActiveDirectoryRights == ActiveDirectoryRights.GenericWrite;
        bool execute = acr.ActiveDirectoryRights == ActiveDirectoryRights.GenericExecute;
        bool extended = acr.ActiveDirectoryRights == ActiveDirectoryRights.ExtendedRight;

        Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", all, read, write, execute, extended);
        Console.WriteLine("{0}\t{1}\t{2}", acr.ActiveDirectoryRights, acr.AccessControlType, sid);
        Console.WriteLine("\n");
    }
}

не понимаю результат wrong way

Я думаю, что я на неправильном пути => Я надеюсь, что кто-нибудь может мне помочь

1 Ответ

0 голосов
/ 22 ноября 2018

Если я правильно понимаю, вы видите разрешения для "ADM_Group" в своей группе, но вы не видите этого разрешения, когда просматриваете разрешения в своем коде.

Вы исключаете унаследованные разрешенияпередавая false во втором параметре GetAccessRules():

retVal.GetAccessRules(true, false, typeof(System.Security.Principal.SecurityIdentifier))

Так что, если это унаследованное разрешение, которое дает "ADM_Group" разрешения, то, возможно, именно поэтомувы не видите его.

В AD Users and Computers вы можете нажать «Advanced» (или, в вашем случае, «Erweitert»), чтобы увидеть каждый отдельный ACL в разрешениях.Представление на скриншоте объединяет ACL для упрощенного просмотра разрешений.

...