Icacls 教程

Icacls 教程

Tue Aug 13 2024
BigWind
16 minutes

Excerpt#

如果您通过 Windows 文件资源管理器之类的工具检查和更改文件权限,则必须单击周围并打开/更改每个文件和文件夹的权限。如果您需要修改一两个权限,此方法就很好。但也许您想要确定和更改文件夹中一百个或更多文件的权限。让 icacls 命令作为解决方案。



如果您通过 Windows 文件资源管理器之类的工具检查和更改文件权限,则必须单击周围并打开/更改每个文件和文件夹的权限。如果您需要修改一两个权限,此方法就很好。但也许您想要确定和更改文件夹中一百个或更多文件的权限。让 icacls 命令作为解决方案。

在本教程中,您将了解有关 icacls 命令如何允许您读取、保存、恢复文件和文件夹权限的所有内容。

让我们开始吧!

先决条件#

本教程包含分步说明。要继续操作,请确保您已具备以下条件:

  • 具有管理员权限的 Windows 服务器或客户端 PC。
  • 如果您想了解如何更改远程计算机上的权限,请打开打开 Windows 文件和打印共享端口的远程 Windows 计算机。
  • Microsoft 的 Process Explorer v16.42(可选)显示哪个程序打开了特定文件或目录。

了解 icacls 命令是什么及其工作原理#

有时,用户无法访问或修改文件或文件夹,原因之一是缺乏对该对象的用户权限。 icacls 命令是一个命令行实用程序,用于查看或修改 Windows 文件系统上的文件或文件夹权限。

但在使用 icacls 命令更改文件和文件夹权限之前,您必须首先了解访问控制列表 (ACL)。在此上下文中,ACL 包含用户或组对 NTFS 文件系统内的对象的权限列表。

ACL 中的每个条目称为访问控制条目 (ACE)。 ACE 包含权限以及有关子对象如何继承这些权限的详细信息。 NTFS 权限可保护系统免受未经授权的访问。

icacls 命令可以在高级安全设置页面中的文件或文件夹属性中设置许多精细的权限。这些权限包括允许或拒绝特定权限,以及基本的读/写权限。

要查看文件或文件夹的高级权限:

1. 打开文件资源管理器,右键单击文件或文件夹,然后从上下文菜单中选择属性

2. 点击安全选项卡 —> 高级访问文件或文件夹的高级安全设置。

在高级视图中,您将看到一个权限选项卡以及构成该文件系统对象的 ACL 的每个 ACE。

3. 双击列表中的任意ACE,弹出权限输入对话框。

4. 现在,单击显示高级权限链接,深入了解该对象上设置的所有单独权限。

在下面,您可以看到授予或拒绝文件或文件夹的用户 ID 的所有高级权限。

运行基本 icacls 命令语法#

现在您已经了解了查看和更改文件/文件夹权限所涉及的所有单击操作,现在让我们学习如何使用 icacls 命令来使用命令行。

icacls 命令接受许多开关和参数来成功更改文件和文件夹权限,但让我们从运行基本的 icacls 命令语法开始。

打开命令提示符并按原样输入 icacls 命令以查看其默认输出。您可以在下面看到icacls命令的所有开关的帮助信息,并且默认显示参数。

也许您想查看文件或文件夹的现有权限。如果是这样,基本的 icacls 命令语法命令就足够了。为了演示,创建一个文件夹,然后运行 icacls 来查看其权限,如下所示。

NGINX
1
# Make a new folder named Folder1 md Folder1 # Checking permissions of the folder named Folder1 icacls Folder1

icacls 返回分配给对象的 ACL;在本例中,Folder 文件夹包含其中的所有 ACE。在下面,您可以看到 BUILTIN\AdministratorsNT AUTHORITY\SYSTEM 用户 ID 拥有对象继承的完整 (F) 权限 (OI) 和容器继承**(CI)**。

另一方面,BUILTIN\Users 用户 ID 表示 PC 上的本地用户组具有对象继承**(OI)** 和容器继承**(CI)<** 启用,以及读取和执行访问权限。 (接收)

最后,两个 NT AUTHORITY\Authenticated Users 用户 ID 表明经过身份验证的用户组具有修改级别 (M) 访问权限,并且启用了对象继承 (OI) 和容器继承 (CI)。

保存和恢复文件和文件夹的 ACL#

更改文件和文件夹权限是一项敏感任务;一个错误的举动可能会扰乱用户访问或组访问。好消息是 icacls 命令允许您保存 ACL 文件。 ACL 文件包含文件和文件夹的 ACL。

为了演示如何保存和恢复 ACL,我们首先创建一个名为 C:\Temp\Folder1 的文件夹,并通过运行以下命令保存该文件夹的所有权限。

1. 运行下面的 icacls 命令以递归方式 (/T) 备份文件和文件夹的 ACL (c:\Temp\Folder1) 并将它们保存 (/save) 到文件 (C:\Folder1ACL) 中。

BASH
1
# Make a new folder named Folder1 md c:\Temp\Folder1 # Save folder1's permissions to a file named Folder1ACL icacls c:\Temp\Folder1 /save c:\Folder1ACL /T

在下面,您可以看到您已经创建了一个新文件夹,并成功将该文件夹的 ACL 保存在 ACL 文件中。通过运行 dir 命令确认 ACL 文件 (Folder1ACL) 存在。

2. 现在,像之前一样访问_Folder1_的高级安全设置。下面,通过单击添加按钮将新用户添加到文件夹权限。

3. 单击下面的选择主体选项,选择要添加到_Folder1_权限的用户或组。在弹出窗口中输入要添加的用户或组 ID,然后单击检查名称。找到用户或组 ID 后,单击确定

4. 通过选中完全控制选项,授予新用户对_Folder1_的完全权限,然后单击确定

在下面,您可以看到 User02 已添加到 Folder1 的权限中并被授予完全权限。

5. 现在您已经更改了文件夹的权限,请使用之前保存的 ACL 文件恢复原始权限。

在下面的命令中,您将恢复 (/restore) Folder1 ACL,这些 ACL 保存在位于目录 (Folder1ACL) 的文件 (Folder1ACL) 中c:\)。

BASH
1
icacls c:\Temp\ /restore c:\Folder1ACL

6. 最后,通过访问_Folder1_的高级安全设置来确认是否恢复了原始权限。

下面可以看到之前添加的Usre02被删除了,说明ACL文件中原来的权限被恢复了。

授予用户对文件和文件夹的权限#

通过学习 icacls 命令的基本语法,现在可以为文件和文件夹设置一些基本权限。 icacls 命令允许您通过开关授予、拒绝或删除文件或文件夹的权限。让我们介绍一下这些开关的使用方法。

也许您无法访问或修改文件或文件夹。在这种情况下,您可以使用 /grant 开关向用户授予适当的权限。

下面,该命令将向用户 (user01) 对 myfile.txt 授予 (`/grant`) 完全权限 (`F`) 文件。

也可以使用 Active Directory (AD) 或本地组名称来代替用户 ID (user01)。

BASH
1
icacls myfile.txt /grant user01:F

向用户授予对文件夹的权限与授予对文件的权限的方式不同。

下面,该命令将向用户 (user01) 对 MyFolder 授予 (/grant) 读取权限 (R)代码> 文件夹。

BASH
1
icacls Folder1 /grant user01:R

icacls 命令还允许您为文件或文件夹设置特殊权限。下面,您向用户 (user01)位于文件夹 (Folder1) 上。

BASH
1
icacls Folder1 /grant user02:(D,RD)

当您使用特殊权限(例如 RD,如下所示)时,必须将它们括在括号中。

拒绝用户对文件和文件夹的权限#

在某些情况下,您可能想要明确拒绝用户或组对文件或文件夹的访问。您可以使用 /deny 开关来执行此操作。

使用以下命令拒绝单个用户对文件和文件夹的完全权限。以下命令将确保 user01 无法访问 MyFile.txt 文件和 MyFolder 文件夹。

APACHE
1
# Deny (/deny) full permissions (F) for a user (user01) on a file (MyFile.txt) icacls MyFile.txt /deny user01:F # Deny (/deny) full permissions (F) for a user (user01) on a folder (MyFolder) icacls MyFolder /deny user01:(F)

删除用户对文件和文件夹的权限#

也许您想要删除用户当前对文件或文件夹拥有的所有权限。在这种情况下,请结合使用 /remove 开关和 icacls 命令。

以下命令删除 user01 对文件和文件夹的所有权限。命令完成后,user01 无法再访问或修改 myfile.txt 文件和名为 Folder1 的文件夹。

BASH
1
# Removing all user01's permissions from myfile.txt icacls myfile.txt /remove user01 # Removing all user01's permissions from Folder1 icacls Folder1 /remove user01

使用完整性级别保护文件和文件夹#

除了权限之外,Windows 中的所有对象(例如文件、文件夹、注册表项、正在运行的进程和用户会话)都包含完整性级别。

您可以将完整性级别应用于任何具有安全描述符的对象。即使用户对文件或文件夹具有完全权限,完整性级别也可以为不太可信的对象设置更严格的权限。

请参阅下表中的可以为 Windows 对象设置的完整性级别列表。

Integrity Level NameExplanationExample
UntrustedProcesses that are launched automatically are marked as Untrusted.Apps like Edge and chrome launch their update processes automatically. They are marked as untrusted.
LowVery restricted integrity level. Processes with low integrity level cannot write to registry and they have very limited access on files and folders.Internet Explorer in protected mode has low integrity level.
MediumThis is the integrity level that most of the objects will have. Standard or non-admin users get this medium integrity level. Also objects that are not marked as low or high will be in medium integrity level by default.
HighAdmins have the high integrity level by default. With this admins can interact with other objects with high integrity levels and objects with medium and low integrity levels.Processes started with “Run as Administrator” option or elevated.
SystemThis integrity level is assigned to windows OS files and core services.Windows Services that run under local service, network service or NT authority\system.
InstallerInstaller integrity level is highest of all other integrity levels. Objects that has installer integrity level can also uninstall other objects as they are almost equal to High integrity level.

也许您很好奇为计算机上运行的每个 Windows 进程设置了哪个完整性级别。如果是这样,请启动 Microsoft Process Explorer,右键单击任意列标题,然后单击选择列,如下所示。

现在,通过选中选择列弹出窗口中的完整性级别选项,在表格列表中添加完整性列,然后点击确定

请注意,完整性列将显示在进程表列表的最右侧部分,您将在其中看到每个进程的完整性级别。

限制非管理员用户修改文件或文件夹#

在文件或文件夹上设置高完整性级别 当您想要限制其他用户修改文件或文件夹时,请在该文件或文件夹上设置高完整性级别。只有管理员才能访问和修改具有高完整性级别的文件和文件夹。

让我们看看 icacls 命令如何实际设置完整性级别。

1. 在当前目录中创建一个文本文件,并使用以下命令将文件的完整性级别设置为高。

BASH
1
# Create a text file named demo.txt in the current directory echo . > demo.txt # Run icacls command to set the text file's (demo.txt) integrity level to high (H) icacls demo.txt /setintegritylevel H

2. 通过运行以下命令验证文件的完整性级别。在下面,您可以看到您拥有该文件的完全访问权限,但该文件的完整性级别设置为高。

NGINX
1
icacls demo.txt

3. 现在,通过切换到 PC 上的非管理员帐户来测试文件的完整性级别,然后使用以下命令将文本添加到文本文件。

BASH
1
echo "Adding text to demo file" >> demo.txt

请注意,您将收到一条错误消息,指出访问被拒绝。即使您拥有该文件的完全访问权限,您也只能使用管理员组中的用户帐户修改该文件。

通过禁用继承来限制文件和文件夹修改#

默认情况下,文件和文件夹继承其父文件夹的权限。也许您希望在创建新文件夹或文件时避免向用户提供不必要的访问权限。禁用继承是解决该问题的一种方法。

您不必是管理员才能禁用继承,但您应该拥有该对象的完全权限。

继承的一个示例是,当您创建文件夹 C:\myfolder\testdata 时,它将继承父文件夹 C:\myfolder 的权限。

要了解继承以及禁用继承的效果,请在文件资源管理器中查看 ~\Desktop 文件夹中任何文件的权限。您将看到与下面类似的权限。请注意,该文件_继承_其父文件夹的权限。

通过使用 inheritance 参数运行以下命令,使用 icacls 禁用此文件的继承。下面的命令指定 d 参数,该参数禁用继承并将继承转换为显式权限。

BASH
1
# Disabling inheritance on a file named Myfile.txt icacls ~/Desktop/Myfile.txt /inheritance:d

您还可以使用 inheritance 参数指定 e 启用继承,指定 r 禁用并删除对象中所有出现的继承 ACE ,例如,/inheritance:e/inheritance:r

禁用继承后,您可以在下面看到 icacls 将每个继承 ACE 转换为显式权限(从无继承)。

也许您希望在重新启用文件继承后删除这些显式权限。为此,您可以手动删除权限或重置文件的继承。重置文件的继承将删除所有权限,文件将继承父文件夹的权限。

下面的命令重置 (/reset) 文件 (demo.txt) 继承,同时抑制成功消息 (/q) 并忽略错误 ( <代码>/c)。

BASH
1
icacls demo.txt /q /c /reset

授予或拒绝不同继承级别的权限#

NTFS 文件系统是一个大的文件夹层次结构,每个其他文件夹都有一个父文件夹,有时还有一个子文件夹。该层次结构有不同的“级别”。您可以在每个“级别”设置继承。例如,如果您有一个类似 C:\Folder\Subfolder 的路径,则可以在 C:\Folder 和 <子文件夹。

当您使用 icacls 设置文件夹权限时,icacls 会自动设置该文件夹继承以将权限传播到其子文件夹。但也许您只想应用特定权限而不启用对该文件夹的子文件夹的继承?

以下命令向用户 (user02) 授予对 mydemo 文件夹的完全权限 (F)。但由于未指定继承选项,icacls 仅授予对 mydemo 文件夹的完全权限。如果没有指定继承选项,将自动应用默认选项 (OI)。

BASH
1
icacls mydemo /grant user02:(F)

也许您想向用户授予权限以及指定的继承。在这种情况下,请运行以下命令。

下面,您向从 申请的用户 (`user02`) 授予 (`/grant`) 只读权限 (`R`) >mydemo 文件夹及其文件和子文件夹 (OI)(CI)

BASH
1
icacls mydemo /grant user02:(OI)(CI)(R)

以下是设置文件或文件夹继承级别的选项列表:

  • OI - 对象继承 - 适用于此文件夹和文件。不会继承或传播到子文件夹。
  • CI - 容器继承 - 适用于该目录和子目录。
  • IO - 仅继承 - 不适用于当前文件或目录。
  • (OI)(CI) - 应用于此文件夹、子文件夹和文件。
  • (OI)(CI)(IO) - 仅适用于子文件夹和文件。
  • (CI)(IO) - 仅适用于子文件夹。
  • (OI)(IO) - 仅适用于文件。

更改文件共享的文件权限#

到目前为止,您已经了解了如何更改本地 PC 上的权限。但是 icacls 也可以设置远程文件的权限,尽管没有直接的方法来实现这一点。

更改远程 PC 上的权限时,必须指定远程 PC 上文件的完整路径,如下所示。您还应该拥有实际文件夹、文件和共享路径的权限,以允许其他用户获得权限。

下面,您向用户 () 授予 (`/grant`) 或拒绝 (`/deny`) 完全权限 (`F`) user02)位于远程 PC (\\win10vm2) 的文本文件 (\c$\temp\testfile.txt) 上。

BASH
1
# Granting full permission to a user on a text file from a remote PC icacls \\win10vm2\c$\temp\testfile.txt /grant user02:F # Denying full permission to a user on a text file from a remote PC icacls \\win10vm2\c$\temp\testfile.txt /deny user02:F

结论#

在本指南中,您学习了如何运行 icacls 命令来设置从基本到高级的权限。您还学会了在 AclFile 中备份文件和文件夹的 ACL,作为更改权限出错时的后备措施。

原文章地址:Icacls:终极指南