Получить ACL от общего сетевого ресурса и других объектов безопасности в python - PullRequest
0 голосов
/ 06 марта 2020

Я работаю с очень популярной библиотекой pywin32 в python, чтобы получить ACL сетевого ресурса (и других защищаемых объектов с дескриптором безопасности, пользователи, группы и т. Д. c ...).

У меня проблемы с получением всех ACE в DACL. В основном хотят, чтобы все пользователи и группы и доступ, который они имеют ... аналогичны выводу команды PowerShell Get-ACL.

Пример:

У меня есть общий файловый ресурс, созданный на C:\test_share и позволили Domain Users и test_user полный контроль над акцией. Вот как выглядит вывод PowerShells Get-Acl:

FileSystemRights  : FullControl, Synchronize
AccessControlType : Allow
IdentityReference : mydomain\test_user
IsInherited       : False
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : mydomain\Domain Users
IsInherited       : True
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : True
InheritanceFlags  : ContainerInherit, ObjectInherit
PropagationFlags  : None

Но ... когда я запускаю свой код, приведенный ниже, он не отображает test_user или Domain Users в ACL. Так что я очень запутался.

Вывод, когда я запускаю свой код (ниже) ... обратите внимание, что я не могу получить test_user или пользователей домена в ACL, единственное, что появляется, это Everyone

Share: test_share
Owner: ('Administrators', 'BUILTIN', 4)
Group: ('Domain Users', 'mydomain', 2)
User: /Everyone (0, 0) Modify
('Everyone', '', 5)

Вот что я пробовал:

import win32net,win32security
perms = {
    20321127: "Full Control",
    1245631: "Modify",
    1179817: "Read & Execute",
    1179785: "Read",
    1179926: "Write",
    1179808: "Execute"
}
api_share,total,resume = win32net.NetShareEnum("localhost",502,0)
for share in api_share:
    sd = share["security_descriptor"]
    share_name = share["netname"]
    if sd and share_name == "test_share":
        print("Share: {}".format(share_name))        

        owner = win32security.LookupAccountSid('',sd.GetSecurityDescriptorOwner())
        group = win32security.LookupAccountSid('',sd.GetSecurityDescriptorGroup())
        control = sd.GetSecurityDescriptorControl()
        print("Owner: {}".format(owner))
        print("Group: {}".format(group))

        dacl = sd.GetSecurityDescriptorDacl()

        '''Get ACE"s'''
        for i in range(0,dacl.GetAceCount()):
            rev,access,usersid = dacl.GetAce(i)
            user,group,type = win32security.LookupAccountSid('',usersid)
            print("User: {}/{}".format(group,user),rev,perms.get(access,access))            

        '''Get entries from acl'''
        for i in dacl.GetExplicitEntriesFromAcl():
            obj_sid = i["Trustee"]["Identifier"]
            print(win32security.LookupAccountSid("",obj_sid))

Спасибо за любые советы или помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...