gpt4 book ai didi

python - 如何获得有效的文件权限?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:41 30 4
gpt4 key购买 nike

我正在尝试获取文件有效权限。最好的方法是什么?

我正在尝试使用 win32securityGetEffectiveRightsFromAcl(trustee) 函数需要 PyTRUSTEE 参数。而且我不知道如何正确设置它。

因此,我需要获得与在 PowerShell 中调用 Get-EffectiveAccess 时相同的权限。

我们尝试使用 Authz.h,但在那种情况下,我们在 Windows 事件查看器中遇到了审核失败。

我们还尝试使用 Aclapi.h 中的 GetEffectiveRightsFromAcl,但如果我们有很多文件,它可能会成为服务器挂起的原因。

python :

dacl = win32security.GetNamedSecurityInfo( FILENAME,
win32security.SE_FILE_OBJECT,
win32security.DACL_SECURITY_INFORMATION).GetSecurityDescriptorDacl()
mask = dacl.GetEffectiveRightsFromAcl( ??? )

Authz.h:

AuthzInitializeResourceManager(AUTHZ_RM_FLAG_NO_AUDIT, NULL, NULL, NULL, NULL, &hManager);
AuthzInitializeContextFromSid(0, psid, hManager, NULL, unusedId, NULL, &hAuthzClientContext);
AuthzFreeResourceManager(hManager);

accessRequest->DesiredAccess = MAXIMUM_ALLOWED;
accessRequest->PrincipalSelfSid = NULL;
accessRequest->ObjectTypeList = NULL;
accessRequest->ObjectTypeListLength = 0;
accessRequest->OptionalArguments = NULL;
RtlZeroMemory(Buffer, sizeof(Buffer));
accessReply->ResultListLength = 1;

accessReply->GrantedAccessMask = (PACCESS_MASK)LocalAlloc(LPTR, sizeof(ACCESS_MASK));
accessReply->Error = (PDWORD)(Buffer + sizeof(ACCESS_MASK));

AuthzAccessCheck(0, hAuthzClient, accessRequest, NULL, psd, NULL, 0, accessReply, NULL)

Aclapi.h

ACCESS_MASK accessRights;
TRUSTEE trustee;

BuildTrusteeWithName(&trustee, trav->user);
retcode = GetEffectiveRightsFromAcl( acl,&trustee,&accessRights);

我需要得到这样的东西:

FILE_READ_DATA
FILE_WRITE_DATA
FILE_APPEND_DATA
FILE_READ_EA
FILE_WRITE_EA
文件执行
FILE_DELETE_CHILD
FILE_READ_ATTRIBUTE
FILE_WRITE_ATTRIBUTE
删除
读控制
写_DAC
写所有者
同步

最佳答案

我使用@eryksun 帮助得到了一些结果。谢谢。我还发现了 this useful example .

def print_permissions(mask):
print("PERMISSION:",
1 if bool(mask & 0x00000001) else 0,
1 if bool(mask & 0x00000002) else 0,
1 if bool(mask & 0x00000004) else 0,
1 if bool(mask & 0x00000008) else 0,
1 if bool(mask & 0x00000010) else 0,
1 if bool(mask & 0x00000020) else 0,
1 if bool(mask & 0x00000040) else 0,
1 if bool(mask & 0x00000080) else 0,
1 if bool(mask & 0x00000100) else 0,
1 if bool(mask & 0x00010000) else 0,
1 if bool(mask & 0x00020000) else 0,
1 if bool(mask & 0x00040000) else 0,
1 if bool(mask & 0x00080000) else 0,
1 if bool(mask & 0x00100000) else 0)

def get_permissions(dacl):
for n_ace in range(dacl.GetAceCount()):
ace = dacl.GetAce(n_ace)
(ace_type, ace_flags) = ace[0]
if ace_type in CONVENTIONAL_ACES:
mask, sid = ace[1:]
else:
mask, object_type, inherited_object_type, sid = ace[1:]
name, domain, type = win32security.LookupAccountSid(None, sid)
print("\nUSER:", name)
print_permissions(mask)

for f in files:
try:
dacl = win32security.GetNamedSecurityInfo(
f,
win32security.SE_FILE_OBJECT,
win32security.DACL_SECURITY_INFORMATION).GetSecurityDescriptorDacl()
except BaseException as ex:
winerror, funcname, strerror = ex.args
print("Error: ", winerror,"\n")
else:
get_permissions(dacl)

我不使用 GetEffectiveRightsFromAcl,因为它包含在 ace 中。

当我尝试使用特权常量创建 token 时,我也遇到了相同的Audit Failure(在系统帐户的情况下)。因此,在这两种情况下(系统帐户和管理员)(PowerShell 除外),我都没有发现任何在没有 Audit Failire 的情况下都可以工作的结果。

关于python - 如何获得有效的文件权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428874/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com