![授予对子目录的访问权限,但不授予对父目录的访问权限](https://linux22.com/image/1343219/%E6%8E%88%E4%BA%88%E5%AF%B9%E5%AD%90%E7%9B%AE%E5%BD%95%E7%9A%84%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%EF%BC%8C%E4%BD%86%E4%B8%8D%E6%8E%88%E4%BA%88%E5%AF%B9%E7%88%B6%E7%9B%AE%E5%BD%95%E7%9A%84%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.png)
我有一个涉及 Windows 文件服务器的场景,其中“所有者”想要向以下类型的一组用户分配权限:
\\server\dir1\dir2\dir3
:读取、写入和执行\\server\dir1\dir2
:没有权限\\server\dir1
:没有权限\\server
:读取并执行
据我了解(更新:这整段都是错的!),这是不可能做到的,因为Read & Execute
权限必须授予目录链中的所有父目录权限,以便操作系统能够“看到”子目录并访问它们。如果没有此权限,您甚至无法获得尝试访问嵌套目录时,安全上下文令牌,即使您对子目录具有完全访问权限。
我们正在寻找解决此问题的方法,而无需将数据从 移动\\server\dir1\dir2\dir3
到\\server\dir4
。
我想到了一个解决方法,但我不确定它是否会起作用,即创建某种链接或连接点,\\server\dir4
作为对 的引用。如果用户没有或 的权限,\\server\dir1\dir2\dir3
我不确定哪个可用选项(如果有)可以用于此目的,但据我所知,选项如下:Read & Execute
\\server\dir1\dir2
\\server\dir1
- NTFS 符号链接,
- 交界处,
- 硬链接。
所以问题是:
- 这些方法是否适合实现我的目标?
- 是否有其他我上面没有列出的链接或间接引用目录的方法可能合适?
- 有没有直接的不涉及授予
Read & Execute
或\\server\dir1
但\\server\dir2
仍允许访问的解决方案\\server\dir1\dir2\dir3
?
答案1
您最初的假设是错误的,这使得您的其余问题变得毫无意义。
用户在dir1
和上所需的最低权限dir2
是Traverse Directory
。但这很可能给您的用户带来麻烦 - 因此我建议Traverse Directory
和 List Folders
他们将能够浏览前两个目录并到达dir3
他们具有更多权限的位置,但甚至看不到前两个目录中存在哪些文件。
权限(如Read & Execute
和 )Modify
只是单个权限的集合。它们是您首先看到的内容,因为它们最常用。如果您需要非常详细(如这种情况),请单击按钮Advanced
并深入了解那里列出的选项。
答案2
令人惊讶的是,如果个人拥有子文件夹的完整路径,并且至少拥有 R 权限,则他们不需要任何父文件夹的权限,甚至不需要遍历。他们只需使用 UNC 即可访问它。(当然,他们必须拥有共享的读取权限;只是不需要他们想要访问的级别以上的任何文件夹的读取权限)。
当我被告知这一点时我并不相信,但测试证明了这一点。
这与我对 Windows 世界中权限的了解相反,我想这对很多人来说都会感到惊讶。
\服务器\文件夹1\文件夹2\文件夹3
如果 Bilbo 对文件夹 1 和文件夹 2 根本没有权限,但是 Bilbo 对文件夹 3 有修改(例如),则 \server\folder1\folder2\folder3 会直接带他到那里,没有问题。
答案3
与 MDMarra 类似的一个解决方案是设置 NTFS 权限,如下所示:
- 目录1: 授予列出文件夹内容(遍历文件夹/执行文件、列出文件夹/读取数据、读取属性、读取扩展属性、读取权限)
- 但选择仅限此文件夹应用于下拉菜单
- 目录2: 授予列出文件夹内容并申请仅限此文件夹
- 目录3:授予所需的读/写权限并申请此文件夹、子文件夹和文件或者仅限子文件夹和文件
最终结果是用户/组可以读取每个单独的父文件夹并深入到子文件夹,而无需任何其他文件夹或文件。
答案4
因此,我一直在以下环境中进行测试,因为我想获得最终的、经过测试的答案,即通过浏览(即通过 Windows 文件资源管理器)简单地遍历文件夹所需的最低权限。以下是那些想要严格锁定的人的结果。
我有不是在生产中测试了这一点,看看削减“标准”经过良好测试的遍历权限模板是否会产生任何奇怪的副作用
- 横移文件夹
- 列出文件夹
- 读取属性
- 读取扩展属性
- 读取权限
...这基本上只是对“此文件夹”的普通“读取和执行”权限。也就是说,对于用户简单地移动、复制和删除服务器上的文件以及用户完全使用服务器上的文档副本等进行工作,小规模测试到目前为止完全没有问题。
环境:
- 服务器:Windows 2008 R2——几乎没有组策略,没有任何与用户权限相关的变化,配置为域控制器,AD 集成 DNS,非常标准/基本的设置。
- 客户:Windows 7 SP1——在 VM 中全新安装,在任何更改之间重新启动,以确保每次都完全重新创建与服务器的连接。
- 这两个安装都至少修补至 2017 年底,因此对于 Windows 时间线此时已经嵌入的权限相关的任何内容来说,可能都是最新的。
- 这是访问虚拟机中作为持久网络驱动器 (\server\share -> S:) 安装的共享文件夹。对于经过身份验证的用户组,共享权限为读取+更改,该组涵盖测试用户和所有其他可能需要在某个时候访问的用户。
- 每次更改后,我都会重新启动虚拟机,打开文件资源管理器,然后正常浏览共享,沿着我知道测试用户具有这些遍历权限的路径,而不是没有的路径。
结果:
- 根文件夹必需:ListFolder-ReadData + ReadAttributes(2x 权限)
- 子文件夹必填:ListFolder-ReadData(1x 权限)
选修的:遍历文件夹--执行文件
--> 此可选权限仅在明确禁止“绕过遍历检查”用户权限时才重要,因为在 99% 的情况下,默认情况下它处于启用状态。换句话说,启用“绕过遍历检查”用户权限(在组策略中公开,而不是在 NTFS 文件/文件夹权限中公开)可完全消除此权限,并有效地使此权限在默认情况下在所有地方都启用。注意:我尚未测试明确拒绝此权限是否会阻止“绕过遍历检查”用户权限在该特定情况下生效,但可能会)。
补充信息:“绕过遍历检查”用户权限允许某人被动地遍历到他们可以直接访问的子文件夹,无论深度有多少级(即,权限是在该文件/文件夹上设置的,但不一定在文件路径上的任何其他地方设置)。