Я работаю с очень популярной библиотекой 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))
Спасибо за любые советы или помощь!