停止 Windows 7 中所有子文件夹的权限继承

停止 Windows 7 中所有子文件夹的权限继承

这是在 Windows 7 中。

我有多个高级文件夹。每个高级文件夹都有一大堆子文件夹。

我需要指定一个组对高级别文件夹“只读”,但对每个子文件夹和所有较低级别的文件夹“读写”。

我认为我可以分两步完成此操作:

  1. 使用“此文件夹、子文件夹和文件”在高文件夹级别分配“读写”权限。此步骤有效,组将一直获得读写权限。

  2. 再次打开高级文件夹,并为试图限制的组指定“只读”,但这次我在应用时选择“仅限此文件夹”。此步骤不起作用。

我认为第 2 步会将每个子文件夹保留为“读写”,并仅将“只读”应用于顶级文件夹。但是第 2 步之后,所有子文件夹(一直向下)也变为“只读”。

我认为这是因为所有子文件夹都继承了权限。我原本以为使用“仅限此文件夹”设置不同的权限会禁用继承以允许我设置的不同权限,但事实并非如此。

如果我打开目录,选择所有子文件夹,然后右键单击“属性”,它不会让我一次设置多个文件的权限。它只允许我一次设置一个权限。

我不想手动设置数千个文件权限。有什么帮助吗?

谢谢,

汤匙。

答案1

我有多个高级文件夹。每个高级文件夹都有一大堆子文件夹。

我需要指定一个组对高级别文件夹“只读”,但对每个子文件夹和所有较低级别的文件夹“读写”。

根据您的问题、您的评论澄清以及对高级 [父] 文件夹将具有只读访问权限的确认。同时确认所有子文件夹(以及每个子文件夹内的文件)都将获得修改访问权限,因此下面是在批处理 FOR 循环中执行此操作的两个示例;一个是批处理脚本,另一个是复制并粘贴到命令行中。

设置变量

  • SET TopFolder=

    • 将值设置SET TopFolder=为等于 [parent] 根级文件夹,并带有完整路径和文件夹名称。循环将根据此文件夹下存在的内容设置权限,授予显式修改 NFTS ACL 访问权限。
  • SET UserOrGroupName=

    • 将值设置SET UserOrGroupName=为等于用户帐户名或安全组名(即<LocalUserName><LocalGroupName><Domain>\<UserName><Domain>\<GroupName>)。

命令行复制示例

@ECHO ON

SET TopFolder=C:\Users\User\Desktop\HighLevelFolder\Parent1
SET UserOrGroupName=User
::: Grant top folder read and execute access and have beneath folders and files inherit these permissions.
ICACLS "%TopFolder%" /grant:r "%UserOrGroupName%":(OI)(CI)RX
::: Iterate the subfolders beneath the [parent] root-level folder to grant the explicit modify access
FOR /F "TOKENS=*" %G IN ('DIR /B /AD "%TopFolder%\*"') DO ICACLS "%TopFolder%\%~G" /grant:r "%UserOrGroupName%":(OI)(CI)M
GOTO EOF

批处理脚本示例

@ECHO ON

SET TopFolder=C:\Users\User\Desktop\HighLevelFolder\Parent1
SET UserOrGroupName=User
::: Grant top folder read and execute access and have beneath folders and files inherit these permissions.     
ICACLS "%TopFolder%" /grant:r "%UserOrGroupName%":(OI)(CI)RX
::: Iterate the subfolders beneath the [parent] root-level folder to grant the explicit modify access
FOR /F "TOKENS=*" %%G IN ('DIR /B /AD"%TopFolder%\*"') DO ICACLS "%TopFolder%\%%~G" /grant:r "%UserOrGroupName%":(OI)(CI)M
GOTO EOF

进一步阅读和来源

我使用了这些 ICACLS 选项:

/grant[:r] Sid:perm grants the specified user access rights. With :r,
    the permissions replace any previously granted explicit permissions.
    Without :r, the permissions are added to any previously granted
    explicit permissions.

perm is a permission mask and can be specified in one of two forms:
    a sequence of simple rights:
            M - modify access
            RX - read and execute access

inheritance rights may precede either form and are applied
only to directories:
        (OI) - object inherit
        (CI) - container inherit

答案2

在高文件夹级别分配“读写”权限,使用“此文件夹、子文件夹和文件”这一步奏效了,小组的读写能力得到了极大的提升。

这是海报“汤姆”出错的地方。

他应该在此步骤中将“应用于”值设置为仅限子文件夹和文件

您可以通过将目录的访问权限(例如 RX)设置为“仅限此文件夹”来限制用户对目录的访问,前提是您将其子对象的访问权限(例如 FULL)设置为“仅限子文件夹和文件”。否则设置会发生冲突,Windows 7 将拒绝更改或以您不希望的其他方式应用它。

Tom 的手动操作比解决 icacls.exe 的恐怖要容易得多,但理论上,可以通过以下方法获得相同的结果(但我从来没有这样做过,除非先删除所有遗传权利,并删除所有明确的权限,并删除对象上的所有其他用户或对对象上的每个用户执行此操作):

我首先仅对子对象设置完全访问权限 -

icacls.exe "%directory%" /T /grant:r %username%:(OI)(CI)(IO)F

然后我限制用户对目录本身的访问 -

icacls.exe "%directory%" /grant:r %username%:(RX,WDAC,WO,WD,AD,WEA,DC)

相关内容