首页/系统与基础设施/存储速查/POSIX 与 Windows ACL 的映射
NAS 与文件共享50 条

POSIX 与 Windows ACL 的映射

把 Windows 客户端接入 Linux/Samba 共享时,两套 ACL 语义并不天然兼容:不额外配置映射,细粒度权限会被压缩成传统权限位。acl_xattr 这类模块把 ACL 存进文件扩展属性,才能保住继承与条目语义。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​​​​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

为什么需要映射层

Windows 侧期望用条目式 ACL 描述「谁能做什么」,Linux 文件系统最基础的形态只有九个权限位。Samba 若不做额外处理,Windows 客户端设置的细粒度权限在落盘时会被压缩成权限位,返回给客户端时再展开成一套推断出来的条目:看起来有权限,实际语义已经丢失,继承也基本失效。解决方法是用扩展属性保存完整的 ACL,并在两侧做语义翻译。

基本信息

适用平台Linux/Samba 服务端 + Windows 客户端
核心模块vfs objects 中的 acl_xattr(或用 acl_tdb 存放在数据库)
继承相关参数map acl inherit、inherit acls、inherit permissions
前提条件服务端文件系统启用 ACL 与扩展属性,并保留挂载选项
影响权限语义是否完整、复制文件时权限是否跟着走

常用配置项与作用

配置项作用要注意什么
acl_xattr把 Windows ACL 存入扩展属性复制与备份必须保留扩展属性
map acl inherit让继承语义在两侧对应需与上层目录设计一起考虑
inherit acls新建文件继承目录上的 ACL与默认 ACL 配合检查
inherit permissions新条目继承父目录权限位与上一项同时启用时结果需实测确认

Samba 侧配置片段

Samba 侧配置片段
[global]
   # 保存并正确解释 Windows ACL 语义
   vfs objects = acl_xattr
   map acl inherit = yes
   # 让新建内容带上目录上的 ACL
   inherit acls = yes

[data]
   path = /srv/data
   read only = no
   # 具体参数含义以所装 Samba 版本的官方文档为准

复制与验证要点

复制与验证要点
# 复制时必须保留扩展属性,否则 ACL 会丢
rsync -aHAX /srv/data/ /backup/data/
tar --xattrs --acls -czf data.tgz -C /srv data    # 归档同样要带扩展属性
# 验证服务端 ACL 是否真的落在扩展属性上
getfacl /srv/data/sample.txt
getfattr -d -m - /srv/data/sample.txt | head -n 20
testparm -s /etc/samba/smb.conf                   # 确认配置生效
启用扩展属性保存 ACL 之后,权限的载体就不只是权限位了:用普通复制、普通压缩包或无 xattr 支持的存储搬迁数据,都会把 ACL 丢掉,而权限位看上去仍在。因此备份与迁移流程必须同步升级,否则恢复出来的共享权限与原始状态不同。
权限模型不宜来回切换:从权限位模式改为 ACL 模式(或反向)时,已有文件的权限表示方式不一致,同一目录下不同时期创建的文件可能表现出完全不同的权限行为,排查成本很高。切换前应先确认全量数据的处理方案。

易错点

  • 没启用 ACL 保存模块就宣称支持 Windows 细粒度权限:设置看似成功但语义被压缩,继承不起作用
  • 复制或备份未保留扩展属性:ACL 静默丢失,只剩权限位
  • 服务端文件系统未启用 ACL 相关挂载支持:配置生效但底层存不下,行为与预期不符
  • 混用多种 ACL 存储方式(扩展属性与数据库并存):权限来源不一致,结果难以解释
  • 在权限模型之间反复切换而不做全量处理:新旧文件的权限表示混杂,长期难以维护

数据来源与参考

  • RFC 7530《NFS Version 4 Protocol》第6章访问控制模型
  • Samba 官方文档《Windows ACL 与 POSIX ACL 映射》
  • Linux nfs4_acl(5) 与 acl(5) 手册页

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/posix-acl-windows-acl-mapping.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​​​​‌‌​‌‌‌‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌‌‌​​​​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​‌‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌‌​‌‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​​​​‌‌‌​​​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​