복붙노트

[PYTHON] Python을 사용하여 Windows에서 폴더 권한 설정

PYTHON

Python을 사용하여 Windows에서 폴더 권한 설정

저는 사용자 AD 계정이 생성 될 때 Python을 사용하여 새로운 개인 폴더를 만듭니다. 폴더를 만들지 만 사용 권한이 올바르지 않습니다. 파이썬이 새로 생성 된 폴더에 사용자를 추가하고 사용 권한을 변경할 수 있습니까? 이 코드를 어디에서 시작해야할지 모르겠습니다.

해결법

  1. ==============================

    1.pywin32의 일부인 win32security 모듈이 필요합니다. 여기에 당신이하고 싶은 일을하는 예가 있습니다.

    pywin32의 일부인 win32security 모듈이 필요합니다. 여기에 당신이하고 싶은 일을하는 예가 있습니다.

    이 예에서는 파일에 대해 새 DACL을 만들고 이전 DACL을 대체하지만 기존 DACL을 쉽게 수정할 수 있습니다. 빈 DACL을 만드는 대신 보안 설명자에서 기존 DACL을 가져 오면됩니다.

    import win32security
    import ntsecuritycon as con
    
    FILENAME = "whatever"
    
    userx, domain, type = win32security.LookupAccountName ("", "User X")
    usery, domain, type = win32security.LookupAccountName ("", "User Y")
    
    sd = win32security.GetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION)
    dacl = sd.GetSecurityDescriptorDacl()   # instead of dacl = win32security.ACL()
    
    dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, userx)
    dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, usery)
    
    sd.SetSecurityDescriptorDacl(1, dacl, 0)   # may not be necessary
    win32security.SetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION, sd)
    
  2. ==============================

    2.ACE에 대한 보안 설명자의 "목록"에 관심이있는 사용자는 다음 데이터 구조를 사용합니다. 나는 이것을 가지고 잠시 뒤로 도움을 받았고, 그 이후로 이것을 사용 해왔다.

    ACE에 대한 보안 설명자의 "목록"에 관심이있는 사용자는 다음 데이터 구조를 사용합니다. 나는 이것을 가지고 잠시 뒤로 도움을 받았고, 그 이후로 이것을 사용 해왔다.

    typical_aces={
        2032127L:"Full Control(All)",
        1179817L:"Read(RX)",
        1180086L:"Add",
        1180095L:"Add&Read",
        1245631L:"Change"
    }
    
    binary_aces={
        1:"ACCESS_READ",            #0x00000001
        2:"ACCESS_WRITE",           #0x00000002
        4:"ACCESS_CREATE",          #0x00000004
        8:"ACCESS_EXEC",            #0x00000008
        16:"ACCESS_DELETE",         #0x00000010
        32:"ACCESS_ATRIB",          #0x00000020
        64:"ACCESS_PERM",           #0x00000040
        32768:"ACCESS_GROUP",       #0x00008000
        65536:"DELETE",             #0x00010000
        131072:"READ_CONTROL",      #0x00020000
        262144:"WRITE_DAC",         #0x00040000
        524288:"WRITE_OWNER",       #0x00080000
        1048576:"SYNCHRONIZE",      #0x00100000
        16777216:"ACCESS_SYSTEM_SECURITY",#0x01000000
        33554432:"MAXIMUM_ALLOWED", #0x02000000
        268435456:"GENERIC_ALL",    #0x10000000
        536870912:"GENERIC_EXECUTE",#0x20000000
        1073741824:"GENERIC_WRITE", #0x40000000
        65535:"SPECIFIC_RIGHTS_ALL",#0x0000ffff
        983040:"STANDARD_RIGHTS_REQUIRED",#0x000f0000
        2031616:"STANDARD_RIGHTS_ALL",#0x001f0000
        }
    

    지정된 DACL / 패스의 마스크를 다음에 건네줍니다.

    def calculate_plaintext_mask(mask):
        a=2147483648L
        if typical_aces.has_key(mask):
            return typical_aces[mask]
        else:
            result='NONE'
            while a>>1:
                a=a>>1
                masked=mask&a
                if masked:
                    if binary_aces.has_key(masked):
                        result=binary_aces[masked]+':'+result
        return result
    
  3. ==============================

    3.다음은 SetEntriesInAcl에서 EXPLICIT_ACCESS 항목을 사용하는 kindall의 답변입니다. ACE가 정식으로 적절한 ACL을 만듭니다 (예 : 액세스 거부 ACE가 먼저 나열 됨). 또한이 버전에서는 SetNamedSecurityInfo를 사용하여 DACL을 설정합니다.이 매개 변수는 사용되지 않는 함수 SetFileSecurity와 달리 상속 가능한 ACE 전파를 지원합니다.

    다음은 SetEntriesInAcl에서 EXPLICIT_ACCESS 항목을 사용하는 kindall의 답변입니다. ACE가 정식으로 적절한 ACL을 만듭니다 (예 : 액세스 거부 ACE가 먼저 나열 됨). 또한이 버전에서는 SetNamedSecurityInfo를 사용하여 DACL을 설정합니다.이 매개 변수는 사용되지 않는 함수 SetFileSecurity와 달리 상속 가능한 ACE 전파를 지원합니다.

    import ntsecuritycon
    import win32security
    
    FILENAME = "whatever"
    USERX = "UserX"
    USERY = "UserY"
    
    entries = [{'AccessMode': win32security.GRANT_ACCESS,
                'AccessPermissions': 0,
                'Inheritance': win32security.CONTAINER_INHERIT_ACE |
                               win32security.OBJECT_INHERIT_ACE,
                'Trustee': {'TrusteeType': win32security.TRUSTEE_IS_USER,
                            'TrusteeForm': win32security.TRUSTEE_IS_NAME,
                            'Identifier': ''}}
                for i in range(2)]
    
    entries[0]['AccessPermissions'] = (ntsecuritycon.GENERIC_READ |
                                       ntsecuritycon.GENERIC_WRITE)
    entries[0]['Trustee']['Identifier'] = USERX
    entries[1]['AccessPermissions'] = ntsecuritycon.GENERIC_ALL
    entries[1]['Trustee']['Identifier'] = USERY
    
    sd = win32security.GetNamedSecurityInfo(FILENAME, win32security.SE_FILE_OBJECT,
            win32security.DACL_SECURITY_INFORMATION)
    dacl = sd.GetSecurityDescriptorDacl()
    dacl.SetEntriesInAcl(entries)
    win32security.SetNamedSecurityInfo(FILENAME, win32security.SE_FILE_OBJECT,
        win32security.DACL_SECURITY_INFORMATION |
        win32security.UNPROTECTED_DACL_SECURITY_INFORMATION,
        None, None, dacl, None)
    
  4. ==============================

    4.os.chmod 사용

    os.chmod 사용

    http://docs.python.org/library/os.html#os.chmod

    os.chmod를 사용하여 권한을 설정할 수 있습니다.

    모드는 기본 8로 작성됩니다. 바이너리로 변환하면

    000 111 111 000     rwx rwx rwx 첫 번째 rwx는 소유자 용이고 두 번째는 그룹 용이고 세 번째는 세계 용입니다.

    r = 읽기, w = 쓰기, x = 실행

    가장 자주 보는 권한은 다음과 같습니다. 7 읽기 / 쓰기 / 실행 - 내용을 보려면 디렉토리를 실행해야합니다. 6 읽기 / 쓰기 4 개의 읽기 전용

    os.chmod를 사용할 때 8 진 표기법을 사용하는 것이 가장 좋습니다.

    os.chmod('myfile',0o666)  # read/write by everyone
    os.chmod('myfile',0o644)  # read/write by me, readable for everone else
    

    내가 보통 당신이 내용을 볼 수 있도록 디렉토리가 "실행 가능"하게되기를 원한다는 것을 기억하십시오.

    os.chmod('mydir',0o777)  # read/write by everyone
    os.chmod('mydir',0o755)  # read/write by me, readable for everone else
    

    참고 : 0o777 구문은 Python 2.6 및 3+ 용입니다. 그렇지 않은 경우 2 시리즈의 경우 0777입니다. 2.6은 어느 구문을 허용하므로 사용자가 선택하는 구문은 앞으로 또는 뒤로 호환 될 것인지 여부에 따라 다릅니다.

  5. ==============================

    5.처음에는 사용자 프로파일 디렉토리가 존재하지 않고 권한이 적절한 기본값으로 설정되면 자동으로 작성됩니다. 파이썬을 사용할 필요가 없다면 윈도우가 폴더를 생성하고 권한을 정렬하도록 할 수 있습니다.

    처음에는 사용자 프로파일 디렉토리가 존재하지 않고 권한이 적절한 기본값으로 설정되면 자동으로 작성됩니다. 파이썬을 사용할 필요가 없다면 윈도우가 폴더를 생성하고 권한을 정렬하도록 할 수 있습니다.

    어쨌든 파이썬을 사용하고 싶다면 os.system ()을 사용하여 cacls 또는 icacls를 올바른 인수로 호출하는 것을 고려할 수 있습니다. 그리고 권한 대신에 폴더 소유자를 폴더를 소유 할 사용자로 변경하기 만하면됩니다.

    당신의 노력에 행운을 비네.

  6. from https://stackoverflow.com/questions/12168110/setting-folder-permissions-in-windows-using-python by cc-by-sa and MIT license