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
例 1.3. 访问控制条目
如果 AD\Domain Users
组对Windows 上的此文件夹、子文件夹和文件
拥有修改
权限,那么ACL 将包含以下 ACE:
AD\Domain Users:ALLOWED/OI|CI/CHANGE
ACE 包含以下部分:
- 安全主体
- 安全主体是 ACL 中权限的用户、组群或 SID。
- 访问权利
-
定义是否赋予或拒绝了对对象的访问权限。该值可以是
ALLOWED
或DENIED
。 - 继承信息
存在以下值:
表 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