关于多级目录结构中DACL继承的问题

问题描述

我有这样的目录结构:

dir1 -> dir2 -> dir3 -> dir4

dir2 在目录 dir1 中,dir3 在目录 dir2 中等等

'dir1' 有自己的一套 DACL。它们是明确的。 'dir1' - (OI) 和 (CI) 的 DACL 启用了继承。 以同样的方式在目录 dir2、dir3 和 dir4 上启用继承。

最初 dir2、dir3 和 dir4 有自己的一组 DACL,它们是显式的。没有任何 DACL 是继承的,但它们是可继承的。

例如 每个目录 dir1、dir2、dir3 和 dir4 都有 DACL 'Allow Full control to use SYstem' 并继承自 GUI 中显示 None 的列。

我有一个函数 setAcl(char* path)。这个函数做了以下事情:

管理员调用 AllocateAndInitializeSid。

  1. 创建 ACL 并调用 InitializeAcl
  2. 调用 AddAccessAllowedAce。此 ACE 不可继承。
  3. 在传递的参数“path”上调用 SetNamedSecurityInfo。 这些标志被传递: DACL_Security_informatION | OWNER_Security_informatION | GROUP_Security_informatION。

setAcl() 在上述目录上被调用,顺序如下:

  1. 目录3
  2. dir2
  3. 目录4

当它第一次在目录 'dir3' 上被调用时,它为管理员添加一个显式的 DACL(由于 setAcl 函数添加)。 此外,由于未设置标志 PROTECTED_DACL_Security_informatION,它还添加了可继承的来自父级的 DACL。 因此,现在 dir3 目录具有一个显式 DACL 和其他从父文件夹“dir2”继承的“允许对系统进行完全控制”的 DACL。最初它具有所有显式 DACL。

当在目录 'dir2' 上调用 setAcl 时,会发生同样的事情。它为管理员添加一个显式 DACL,并从父文件夹继承其他 DACL。 “允许对系统的完全控制”现在被标记为从目录“dir1”继承。 由于 SetNamedSecurityInfo 还更新了子对象 DACL,它更新了目录“dir3”(dir2 的子项)的 DACL。由于现在'dir2'没有明确的DACL'允许对系统的完全控制',dir3的这个DACl是从目录'dir1'继承的,而在函数调用之前它是从目录'dir2'继承的。

我认为继承规则在这里出现,首先是一个对象 从父级继承 DACL。如果没有可继承的,则继承自 祖父母。我说的对吗?

到目前为止,我可以理解一切,当我调用 setAcl("dir4") 时,问题就开始了。 在 setAcl("dir4") 之后,'dir4' 目录只有一个显式 DACL。它没有从祖父母那里继承任何东西。

为什么我打电话时它没有从祖父母那里继承权限 'SetNamedSecurityInfo'?

我的期望是,在调用 SetNamedSecurityInfo 之后,它应该 从目录“dir1”合并可继承的 DACL,就像我打电话时一样 setAcl("dir3")。但它不会发生。你能解释一下原因吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...