set_file_audit.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import win32security,win32file,win32api,ntsecuritycon,win32con, os
  2. from win32security import ACL_REVISION_DS, CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE, \
  3. PROTECTED_DACL_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION, \
  4. OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, SE_FILE_OBJECT
  5. ## SE_SECURITY_NAME needed to access SACL, SE_RESTORE_NAME needed to change owner to someone other than yourself
  6. new_privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_SECURITY_NAME),win32con.SE_PRIVILEGE_ENABLED),
  7. (win32security.LookupPrivilegeValue('',ntsecuritycon.SE_RESTORE_NAME),win32con.SE_PRIVILEGE_ENABLED),
  8. )
  9. ph = win32api.GetCurrentProcess()
  10. th = win32security.OpenProcessToken(ph,win32security.TOKEN_ALL_ACCESS|win32con.TOKEN_ADJUST_PRIVILEGES)
  11. modified_privs=win32security.AdjustTokenPrivileges(th,0,new_privs)
  12. ## look up a few sids that should be available on most systems
  13. my_sid = win32security.GetTokenInformation(th,ntsecuritycon.TokenUser)[0]
  14. pwr_sid = win32security.LookupAccountName('','Power Users')[0]
  15. admin_sid = win32security.LookupAccountName('','Administrators')[0]
  16. everyone_sid=win32security.LookupAccountName('','EveryOne')[0]
  17. ## create a dir and set security so Everyone has read permissions, and all files and subdirs inherit its ACLs
  18. temp_dir=win32api.GetTempPath()
  19. dir_name=win32api.GetTempFileName(temp_dir,'sfa')[0]
  20. os.remove(dir_name)
  21. os.mkdir(dir_name)
  22. dir_dacl=win32security.ACL()
  23. dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE, win32con.GENERIC_READ, everyone_sid)
  24. ## make sure current user has permissions on dir
  25. dir_dacl.AddAccessAllowedAceEx(ACL_REVISION_DS, CONTAINER_INHERIT_ACE|OBJECT_INHERIT_ACE, win32con.GENERIC_ALL, my_sid)
  26. ## keep dir from inheriting any permissions so it only has ACEs explicitely set here
  27. win32security.SetNamedSecurityInfo(dir_name, SE_FILE_OBJECT,
  28. OWNER_SECURITY_INFORMATION|GROUP_SECURITY_INFORMATION|DACL_SECURITY_INFORMATION|PROTECTED_DACL_SECURITY_INFORMATION,
  29. pwr_sid, pwr_sid, dir_dacl, None)
  30. ## Create a file in the dir and add some specific permissions to it
  31. fname=win32api.GetTempFileName(dir_name,'sfa')[0]
  32. print fname
  33. file_sd=win32security.GetNamedSecurityInfo(fname, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION)
  34. file_dacl=file_sd.GetSecurityDescriptorDacl()
  35. file_sacl=file_sd.GetSecurityDescriptorSacl()
  36. if file_dacl is None:
  37. file_dacl=win32security.ACL()
  38. if file_sacl is None:
  39. file_sacl=win32security.ACL()
  40. file_dacl.AddAccessDeniedAce(file_dacl.GetAclRevision(),win32con.DELETE,admin_sid)
  41. file_dacl.AddAccessDeniedAce(file_dacl.GetAclRevision(),win32con.DELETE,my_sid)
  42. file_dacl.AddAccessAllowedAce(file_dacl.GetAclRevision(),win32con.GENERIC_ALL,pwr_sid)
  43. file_sacl.AddAuditAccessAce(file_dacl.GetAclRevision(),win32con.GENERIC_ALL,my_sid,True,True)
  44. win32security.SetNamedSecurityInfo(fname, SE_FILE_OBJECT,
  45. DACL_SECURITY_INFORMATION|SACL_SECURITY_INFORMATION,
  46. None, None, file_dacl, file_sacl)
  47. win32security.AdjustTokenPrivileges(th, 0, modified_privs)