Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得有效的文件权限?_Python_C_Windows_File Permissions - Fatal编程技术网

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

Python 如何获得有效的文件权限?,python,c,windows,file-permissions,Python,C,Windows,File Permissions,我正在尝试获取文件的有效权限。最好的方法是什么 我正在尝试使用win32security但是GetEffectiveRightsFromAcl(受信者)函数需要pyTruste参数。我不知道如何正确设置 因此,我需要获得与在PowerShell中调用get-EffectiveAccess相同的权限 我们尝试使用Authz.h,但在这种情况下,我们在Windows事件查看器中得到了审核失败 我们还尝试使用Aclapi.h中的GetEffectiveRightsFromAcl,但当我们有很多文件时,

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

我正在尝试使用
win32security
但是
GetEffectiveRightsFromAcl(受信者)
函数需要
pyTruste
参数。我不知道如何正确设置

因此,我需要获得与在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);
我需要得到这样的东西:

文件读取数据
文件写入数据
文件\附加\数据
文件\u读取\u EA
文件\u写入\u EA
文件\u执行
文件\删除\子文件
文件读取属性
文件\写入\属性
删除
读控制
写入数据采集卡
写入所有者

同步

我使用@eryksun help获得了一些结果。谢谢 我也发现了

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


当我尝试使用特权常量创建令牌时,我也得到了相同的
审核失败
(在系统帐户案例中)。因此,在这两种情况下(系统帐户和管理员)(PowerShell除外),我都没有发现任何在没有审核Faulire的情况下有效的结果。

显示您的代码您是在尝试向用户显示此信息,还是在尝试了解您是否确实可以对文件执行某些操作?在后一种情况下,不要麻烦;只要尝试实际操作,看看它是否失败。作为一个不同的用户,您将如何做一些事情,看看它是否失败。如果没有他们的密码,我当然不能假装我是另一个用户。我想不出任何一个我想检查我自己帐户有效权限的例子,因为正如你所说,我只是想做我想知道的任何事情,如果我有权限做。我需要获得所有文件权限的完整信息(文件读取数据、文件写入数据、文件附加数据等等)对于所有用户。如果当前进程在令牌中可用,则为其启用备份权限:
se_backup_value=win32security.LookupPrivilegeValue(无,win32security.se_backup_NAME)
htoken=win32security.OpenProcessToken(win32api.GetCurrentProcess(),win32security.TOKEN\u QUERY | win32security.TOKEN\u ADJUST\u PRIVILEGES)
prev\u state=win32security.AdjustTokenPrivileges(htoken,False,[(se\u backup\u值,win32security.se\u PRIVILEGE\u ENABLED)])
。一般来说,如果您将此更改为模拟self并仅为当前线程启用此权限,则效果会更好。
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)