0
0 комментариев

Приветствую всех. Есть код, задача которого, для папки target_folder и ее
подпапок и файлов выставить права согласно списка групп словаря access_dict. На данный момент, скрипт выставляет права только на корневую папку но со свойством «Для этой папки, ее подпапок и файлов» , а подпапки внутри остаются со старыми правами. Как применить права на все вложенные подпапки и файлы (Аналогично выставлению свойства через окна «Заменить все записи разрешений дочернего объекта наследуемыми от этого объекта»)?

#!/usr/bin/env python3
import win32security
import ntsecuritycon as con
target_folder = "D:\Test"
access_dict = {
            'Group1': 'R',
            'Group2': 'W',
            'Group3': 'R',
            'Group4': 'W',
            'Group5': 'R',
            'Group6': 'R',
            'СИСТЕМА': 'F',
            'Администраторы': 'F',
            'User': 'F',
            'ВСЕ':'R'
}
# === ACCESS CONSTANTS ===
read_only = 1179817             # маска: чтение и выполнение
write_access = 1245631          # маска: запись и изменение
full_access = 2032127           # маска: полный доступ
sd = win32security.GetFileSecurity(target_folder,win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()
ace_count = dacl.GetAceCount()
 
for i in range(0, ace_count):       # Удаляем все ACE
            dacl.DeleteAce(0)
 
for userName, access in access_dict.items():
            userx, domain, type = win32security.LookupAccountName("", userName)
            if access == "R":
               dacl.AddAccessAllowedAceEx(
                   win32security.ACL_REVISION,
                   con.OBJECT_INHERIT_ACE|con.CONTAINER_INHERIT_ACE,
                   read_only,
                   userx)  # Read only
            if access == "W":
               dacl.AddAccessAllowedAceEx(
                   win32security.ACL_REVISION,
                   con.OBJECT_INHERIT_ACE|con.CONTAINER_INHERIT_ACE,
                   write_access,
                   userx)  # Full control
            if access == "F":
               dacl.AddAccessAllowedAceEx(
                   win32security.ACL_REVISION,
                   con.OBJECT_INHERIT_ACE|con.CONTAINER_INHERIT_ACE,
                   full_access,
                   userx)  # Full control
 
sd.SetSecurityDescriptorDacl(1, dacl, 0)  # may not be necessary
win32security.SetFileSecurity(target_folder, win32security.DACL_SECURITY_INFORMATION, sd)


Добавить комментарий