Windows 文件访问控制权限

基本语法

修改文件访问控制权限的命令行工具是 icacls,其使用语法是这样的:

icacls FILE                    # 查看文件的访问权限
icacls FILE /grant SID:(PERM)  # 为用户显式授予权限
icacls FILE /deny SID:(PERM)   # 为用户显式拒绝权限
icacls FILE /remove SID        # 删除用户的权限
icacls FILE /setowner SID      # 设置文件所属者

其中,FILE 是你要修改权限的文件,SID 是用户的安全标识符(Security Identifier),或者也可以是用户名,PERM 是权限。

有以下几种权限:

  • F - 完全访问
  • M - 修改访问权限
  • RX - 读取和执行访问权限
  • R - 只读访问
  • W - 只写访问

关于命令的更多用法可以查阅 icacls | Microsoft Learn,或者使用命令 icacls /? 查看帮助。

示例

向管理员组和系统组添加完全访问权限

icacls FILE /inheritance:r /grant Administrators:(F) /grant SYSTEM:(F)
  • /inheritance:r: 移除从父目录继承的权限。通过这种方法确保 FILE 只拥有我们赋予它的权限。

向所有人添加读权限

icacls FILE /grant Every:(R)

向其他用户和用户组添加完全访问权限

如果不是为 AdministratorsAdministratorSYSTEMEveryone 这种系统自带用户(组)添加权限,建议使用用户的 SID 而不是用户名来添加权限。

首先查询该用户的 SID:

$ Get-LocalUser | Select-Object Name, SID
Name               SID
----               ---
Administrator      S-1-5-21-479362186-2444553748-1039381088-500
DefaultAccount     S-1-5-21-479362186-2444553748-1039381088-503
Guest              S-1-5-21-479362186-2444553748-1039381088-501
WDAGUtilityAccount S-1-5-21-479362186-2444553748-1039381088-504
MyUser             S-1-5-21-479362186-2444553748-1039381088-1001

这里看到我的用户名 MyUser 的 SID 为 S-1-5-21-479362186-2444553748-1039381088-1001

或者查找用户组的 SID:

$ Get-LocalGroup | Select-Object Name, SID
Name                                SID
----                                ---
docker-users                        S-1-5-21-479362186-2444553748-1039381088-1010
__vmware__                          S-1-5-21-479362186-2444553748-1039381088-1013
Access Control Assistance Operators S-1-5-32-579
Administrators                      S-1-5-32-544
Backup Operators                    S-1-5-32-551
Cryptographic Operators             S-1-5-32-569
Device Owners                       S-1-5-32-583
Distributed COM Users               S-1-5-32-562
Event Log Readers                   S-1-5-32-573
Guests                              S-1-5-32-546
Hyper-V Administrators              S-1-5-32-578
IIS_IUSRS                           S-1-5-32-568
Network Configuration Operators     S-1-5-32-556
Performance Log Users               S-1-5-32-559
Performance Monitor Users           S-1-5-32-558
Power Users                         S-1-5-32-547
Remote Desktop Users                S-1-5-32-555
Remote Management Users             S-1-5-32-580
Replicator                          S-1-5-32-552
System Managed Accounts Group       S-1-5-32-581
Users                               S-1-5-32-545

找到你的用户(组)的 SID,拷贝下来,然后运行命令:

icacls FILE /inheritance:r /grant "*S-1-5-21-479362186-2444553748-1039381088-1001:(F)"

注意 SID 前面要有一个 * 号表示这是一个 SID 而不是用户名

如果你没有使用 SID 而是使用用户名来添加权限,可能会遇到这种 bug,添加的用户名变成一串 SID:

image

posted @ 2024-04-22 16:48  Undefined443  阅读(691)  评论(0编辑  收藏  举报