搜索

1.10. 使用 smbcacls 在 SMB 共享中管理 ACL

download PDF

smbcacls 工具可以列出、设置和删除存储在 SMB 共享中的文件和目录的 ACL。您可以使用 smbcacls 来管理文件系统 ACL:

  • 在使用高级 Windows ACL 或 POSIX ACL 的本地或远程 Samba 服务器中
  • 在 Red Hat Enterprise Linux 上,远程管理在 Windows 上托管的共享的 ACL

1.10.1. 访问控制条目

文件系统对象的每个 ACL 条目都包含以下格式的访问控制条目(ACE):

security_principal:access_right/inheritance_information/permissions

例 1.3. 访问控制条目

如果 AD\Domain Users 组对Windows 上的此文件夹、子文件夹和文件拥有修改权限,那么ACL 将包含以下 ACE:

AD\Domain Users:ALLOWED/OI|CI/CHANGE

ACE 包含以下部分:

安全主体
安全主体是 ACL 中权限的用户、组群或 SID。
访问权利
定义是否赋予或拒绝了对对象的访问权限。该值可以是 ALLOWEDDENIED
继承信息

存在以下值:

表 1.1. 继承设置
描述映射到

OI

对象实例

这个文件夹和文件

CI

容器继承

这个文件夹和子文件夹

IO

只继承

ACE 不适用于当前文件或目录

ID

继承

ACE 从父目录中继承

另外,这些值可以合并如下:

表 1.2. 继承设置组合
值组合映射到 Windows 应用于 设置

OI|CI

这个文件夹、子文件夹和文件

OI|CI|IO

只适用于子文件夹和文件

CI|IO

只使用子文件夹

OI|IO

仅限文件

权限

这个值可以是代表一个或多个 Windows 权限的十六进制值,也可以是一个 smbcacls 别名:

  • 代表一个或多个 Windows 权限的十六进制值。

    下表以十六进制格式显示了高级 Windows 权限及其对应的值:

    表 1.3. 十六进制格式的Windows权限及其相应的smbcacls值
    Windows 权限十六进制值

    全控制

    0x001F01FF

    遍历文件夹 / 执行文件

    0x00100020

    列出文件夹 / 读数据

    0x00100001

    读取属性

    0x00100080

    读取扩展属性

    0x00100008

    创建文件 / 写数据

    0x00100002

    创建文件夹/附加数据

    0x00100004

    写入属性

    0x00100100

    写扩展属性

    0x00100010

    删除子文件夹和文件

    0x00100040

    删除

    0x00110000

    读取权限

    0x00120000

    更改权限

    0x00140000

    获取所有权

    0x00180000

    可以使用位 OR 操作将多个权限组合为一个十六进制值。

详情请参阅 ACE 掩码计算

  • smbcacls 别名。下表显示了可用的别名:

    表 1.4. 现有 smbcacls 别名及其对应的 Windows 权限
    smbcacls 别名映射至 Windows 权限

    R

    READ

    读和执行

    W

    特殊:

    • 创建文件 / 写数据
    • 创建文件夹/附加数据
    • 写入属性
    • 写扩展属性
    • 读取权限

    D

    删除

    P

    更改权限

    O

    获取所有权

    X

    遍历 / 执行

    CHANGE

    修改

    FULL

    全控制

    注意

    设置权限时,您可以组合单例别名。例如,您可以设置 RD 来应用 Windows 权限 删除。但是,您既不能组合多个非字母别名,也无法组合别名和十六进制值。

1.10.2. 使用 smbcacls 显示 ACL

要显示 SMB 共享的 ACL,请使用 smbcacls 工具。如果您运行不带任何操作参数的 smbcacls,如 --add,那么工具会显示文件系统对象的 ACL。

流程

例如,列出 //server/example 共享的根目录的 ACL:

# smbcacls //server/example / -U "DOMAIN\administrator"
Enter DOMAIN\administrator's password:
REVISION:1
CONTROL:SR|PD|DI|DP
OWNER:AD\Administrators
GROUP:AD\Domain Users
ACL:AD\Administrator:ALLOWED/OI|CI/FULL
ACL:AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACL:AD\Domain Guests:ALLOWED/OI|CI/0x00100021

命令的输出会显示:

  • REVISION :安全描述符的内部 Windows NT ACL 修订版
  • CONTROL :安全描述符控制
  • OWNER :安全描述符所有者的名称或 SID
  • GROUP :安全描述符组的名称或 SID
  • ACL 条目.详情请参阅 访问控制条目

1.10.3. ACE 掩码计算

在大多数情况下,当添加或更新 ACE 时,您可以使用 现有的 smbcacls 别名及其相应的 Windows 权限 中列出的 smbcacls 别名。

但是,如果您要设置 Windows 权限及其相应的 smbcacls 值(十六进制格式) 中列出的高级 Windows 权限,则必须使用逐位 OR 操作来计算正确的值。您可以使用以下 shell 命令计算值:

# echo $(printf '0x%X' $(( hex_value_1 | hex_value_2 | ... )))

例 1.4. 计算 ACE 掩码

您需要设置以下权限:

  • 遍历文件夹/执行文件(0x00100020)
  • 列出文件夹/读数据(0x00100001)
  • 读属性(0x00100080)

要计算上面权限的十六进制值,请输入:

# echo $(printf '0x%X' $(( 0x00100020 | 0x00100001 | 0x00100080 )))
0x1000A1

设置或更新 ACE 时使用返回的值。

1.10.4. 使用 smbcacls 添加、更新和删除 ACL

根据您传递给 smbcacls 工具的参数,您可以添加、更新和删除文件或目录的 ACL。

添加 ACL

要对 //server/example 共享的根添加ACL,该共享将此文件夹、子文件夹和文件CHANGE 权限赋予 AD\Domain Users 组:

# smbcacls //server/example / -U "DOMAIN\administrator --add ACL:"AD\Domain Users":ALLOWED/OI|CI/CHANGE
更新 ACL

更新 ACL 与添加新的 ACL 类似。您可以使用 --modify 参数和现有的安全主体来覆盖 ACL,以便更新 ACL。如果 smbcacls 在 ACL 列表中找到了安全主体,那么工具会更新这些权限。否则,命令会失败并报错:

ACL for SID principal_name not found

例如,要更新 AD\Domain Users 组的权限,并将其设置为对 此文件夹、子文件夹和文件READ权限,请执行以下操作:

# smbcacls //server/example / -U "DOMAIN\administrator --modify ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
删除 ACL

要删除 ACL,请将带有确切ACL的 --delete 参数传递给 smbcacls 工具。例如:

# smbcacls //server/example / -U "DOMAIN\administrator --delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.