使用Python重置NTFS文件夹上继承的权限

使用Python重置NTFS文件夹上继承的权限,python,permissions,ntfs,pywin32,Python,Permissions,Ntfs,Pywin32,我在NTFS分区(在Windows 2008上)上有很多文件夹没有从父文件夹继承权限 我想重置它,以便它们确实包含这些父权限(相当于选中“高级安全设置”区域下的“包含此对象父对象的可继承权限”复选框) 由于我们在这里使用Python来完成一些其他的系统管理任务,如果可能的话,我想用Python来完成(我知道如何用VBScript来完成,但这不是一次性的脚本,而是定期运行的,因此应该与我们的代码库的其余部分集成) 我一直在使用和Google的优秀pywin32扩展和示例来开始,但我看不到任何简单地

我在NTFS分区(在Windows 2008上)上有很多文件夹没有从父文件夹继承权限

我想重置它,以便它们确实包含这些父权限(相当于选中“高级安全设置”区域下的“包含此对象父对象的可继承权限”复选框)

由于我们在这里使用Python来完成一些其他的系统管理任务,如果可能的话,我想用Python来完成(我知道如何用VBScript来完成,但这不是一次性的脚本,而是定期运行的,因此应该与我们的代码库的其余部分集成)

我一直在使用和Google的优秀pywin32扩展和示例来开始,但我看不到任何简单地说“从父级继承权限”的方法

使用AddAccessAllowedAceEx,我甚至可以通过在下面的内容中添加继承的\u ACE标志来伪造某些内容的继承,不管它是否真的来自父级:

dacl.AddAccessAllowedAceEx( \
  win32security.ACL_REVISION_DS \
, win32security.OBJECT_INHERIT_ACE | win32security.CONTAINER_INHERIT_ACE | win32security.INHERITED_ACE \
, ntsecuritycon.FILE_GENERIC_READ | ntsecuritycon.FILE_GENERIC_EXECUTE \
, some_sid_here \
)

但是,除非我从根文件夹遍历整个路径并构建继承,否则我怎么知道要继承哪些内容呢?

需要在根文件夹的ACE上设置OBJECT\u inherit\u ACE和CONTAINER\u inherit\u ACE。您可能还希望清除直接在每个子文件夹和文件上设置的任何权限。(这些将是在其ACE标志中不包含继承的ACE的文件)。

在根文件夹的ACE上已经设置了OBJECT\u INHERIT\u ACE和CONTAINER\u INHERIT\u ACE。文件夹上根本没有设置继承的权限。当我删除直接在文件夹上设置的任何权限时,我最终对该文件夹没有任何权限。我正在尝试“重置”或“重新添加”来自父级的所有丢失的继承标志,这些标志在关闭继承时被删除。在这种情况下,安全描述符可能被设置为受保护。这对应于在UI中取消选中“包含可继承权限”。您应该能够通过将安全描述符设置为“无”将其完全删除,或者使用未受保护的\u DACL\u SECURITY\u信息将其设置。将安全描述符设置为“无”似乎与删除所有ACE具有相同的效果。。。删除所有权限,不重置任何内容。虽然我似乎无法查询它(说我无论如何也不能查询),而且我似乎不知道如何设置/写入它,但您可能发现了一些未受保护的\u DACL\u安全信息。您可以通过检查GetSecurityDescriptorControl返回的标志是否包括受保护的SE\u DACL\u来检查它。