1.10. 使用 smbcacls 在 SMB 共享中管理 ACL
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
security_principal:access_right/inheritance_information/permissions
例 1.3. 访问控制条目
如果 AD\Domain Users 组对Windows 上的此文件夹、子文件夹和文件拥有修改权限,那么ACL 将包含以下 ACE:
AD\Domain Users:ALLOWED/OI|CI/CHANGE
AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACE 包含以下部分:
- 安全主体
- 安全主体是 ACL 中权限的用户、组群或 SID。
- 访问权利
-
定义是否赋予或拒绝了对对象的访问权限。该值可以是
ALLOWED或DENIED。 - 继承信息
存在以下值:
Expand 表 1.1. 继承设置 值 描述 映射到 OI对象实例
这个文件夹和文件
CI容器继承
这个文件夹和子文件夹
IO只继承
ACE 不适用于当前文件或目录
ID继承
ACE 从父目录中继承
另外,这些值可以合并如下:
Expand 表 1.2. 继承设置组合 值组合 映射到 Windows 应用于设置OI|CI这个文件夹、子文件夹和文件
OI|CI|IO只适用于子文件夹和文件
CI|IO只使用子文件夹
OI|IO仅限文件
- 权限
这个值可以是代表一个或多个 Windows 权限的十六进制值,也可以是一个
smbcacls别名:代表一个或多个 Windows 权限的十六进制值。
下表以十六进制格式显示了高级 Windows 权限及其对应的值:
Expand 表 1.3. 十六进制格式的Windows权限及其相应的smbcacls值 Windows 权限 十六进制值 全控制
0x001F01FF遍历文件夹 / 执行文件
0x00100020列出文件夹 / 读数据
0x00100001读取属性
0x00100080读取扩展属性
0x00100008创建文件 / 写数据
0x00100002创建文件夹/附加数据
0x00100004写入属性
0x00100100写扩展属性
0x00100010删除子文件夹和文件
0x00100040删除
0x00110000读取权限
0x00120000更改权限
0x00140000获取所有权
0x00180000可以使用位
OR操作将多个权限组合为一个十六进制值。详情请参阅 ACE 掩码计算。smbcacls别名。下表显示了可用的别名:Expand 表 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"
# 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 | ... )))
# echo $(printf '0x%X' $(( hex_value_1 | hex_value_2 | ... )))
例 1.4. 计算 ACE 掩码
您需要设置以下权限:
- 遍历文件夹/执行文件(0x00100020)
- 列出文件夹/读数据(0x00100001)
- 读属性(0x00100080)
要计算上面权限的十六进制值,请输入:
echo $(printf '0x%X' $(( 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
# 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
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
# 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
# smbcacls //server/example / -U "DOMAIN\administrator --delete ACL:"AD\Domain Users":ALLOWED/OI|CI/READ