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

4

我有很多文件夹位于NTFS分区上(在Windows 2008上),它们没有从其父文件夹继承权限。

我想重置这些文件夹的权限,使它们包括来自父文件夹的权限(相当于在高级安全设置区域下选中“从对象的父项继承可继承权限”复选框)。

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

我一直在使用出色的pywin32扩展和http://timgolden.me.uk/python/win32_how_do_i.html的示例以及谷歌搜索来入手,但我没有看到任何简单地说“继承父项权限”的方法。

使用AddAccessAllowedAceEx,我甚至可以通过添加INHERITED_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 \
)

但是,如果我不从根文件夹开始遍历整个路径并一路建立继承关系,我怎么知道要继承哪些内容呢?

1个回答

1

需要在根文件夹的ACE中设置OBJECT_INHERIT_ACE和CONTAINER_INHERIT_ACE。您可能还想清除直接设置在每个子文件夹和文件上的任何权限。(这些将是其ACE标志中不包括INHERITED_ACE的那些)。


根文件夹的ACE已经设置了OBJECT_INHERIT_ACE和CONTAINER_INHERIT_ACE。文件夹上没有设置INHERITED_ACE权限。当我删除直接设置在文件夹上的任何权限时,文件夹上就没有任何权限了。我正在尝试从父级“重置”或“重新添加”所有缺失的INHERITED_ACE标志,在继承被关闭时被删除。 - David
在这种情况下,安全描述符可能被设置为受保护。这相当于在用户界面中取消选中“包括可继承权限”。您应该能够删除该描述符或者重新设置它以允许更改。 - Roger Upole
1
可以通过将安全描述符设置为None来完全删除它,或者使用UNPROTECTED_DACL_SECURITY_INFORMATION来设置它。 - Roger Upole
谢谢,那肯定有助于我检查它,但我已经知道文件夹没有继承。移除该标志也没有任何作用。我明天会再试试。 - David
你是从层级的顶端开始吗?如果你有根文件夹->子文件夹->子子文件夹,你需要确保子文件夹继承了才能使子子文件夹显示任何继承的权限。 - Roger Upole
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接