[PYTHON] Python을 사용하여 Windows에서 폴더 권한 설정
PYTHONPython을 사용하여 Windows에서 폴더 권한 설정
저는 사용자 AD 계정이 생성 될 때 Python을 사용하여 새로운 개인 폴더를 만듭니다. 폴더를 만들지 만 사용 권한이 올바르지 않습니다. 파이썬이 새로 생성 된 폴더에 사용자를 추가하고 사용 권한을 변경할 수 있습니까? 이 코드를 어디에서 시작해야할지 모르겠습니다.
해결법
-
==============================
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.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.다음은 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.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.처음에는 사용자 프로파일 디렉토리가 존재하지 않고 권한이 적절한 기본값으로 설정되면 자동으로 작성됩니다. 파이썬을 사용할 필요가 없다면 윈도우가 폴더를 생성하고 권한을 정렬하도록 할 수 있습니다.
처음에는 사용자 프로파일 디렉토리가 존재하지 않고 권한이 적절한 기본값으로 설정되면 자동으로 작성됩니다. 파이썬을 사용할 필요가 없다면 윈도우가 폴더를 생성하고 권한을 정렬하도록 할 수 있습니다.
어쨌든 파이썬을 사용하고 싶다면 os.system ()을 사용하여 cacls 또는 icacls를 올바른 인수로 호출하는 것을 고려할 수 있습니다. 그리고 권한 대신에 폴더 소유자를 폴더를 소유 할 사용자로 변경하기 만하면됩니다.
당신의 노력에 행운을 비네.
from https://stackoverflow.com/questions/12168110/setting-folder-permissions-in-windows-using-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Subplot에 여러 개의 Seaborn Jointplot을 그라인딩하는 방법 (0) | 2018.10.05 |
---|---|
[PYTHON] 파이썬에서 문자열을 정수로 분리하는 방법은? (0) | 2018.10.04 |
[PYTHON] 파이썬에서 문자열로부터 모듈로드하기 (0) | 2018.10.04 |
[PYTHON] 도커에 최소 플라스크 앱 배포 - 서버 연결 문제 (0) | 2018.10.04 |
[PYTHON] 사용자 정의 팝업 tkinter 대화 상자를 구현하는 올바른 방법 (0) | 2018.10.04 |