映射层在做什么
域账号在 Windows 世界里由 SID 唯一标识,Linux 文件系统只记录数字 UID/GID。跨平台共享时必须有组件负责翻译:Samba 侧由 winbind 按配置的后端把 SID 换算成 UID/GID,Linux 与域集成环境常用 SSSD 承担同样职责,Kerberos 化的 NFS 则依赖 idmap 服务。映射是双向且必须稳定:同一个域账号在任何时候都应换算出同一个数字,否则文件的属主归属会随时间变化。
基本信息
| 适用平台 | Linux 与 Windows 域集成的文件服务 |
|---|---|
| Samba 侧 | idmap config 与 winbind 后端 |
| 常见后端 | tdb、rid、ad、autorid |
| 验证命令 | wbinfo -n 名称、wbinfo -s SID、getent passwd 域用户 |
| 关键约束 | 映射范围不能与本地账号 UID 冲突,且应长期固定 |
映射后端对比
| 后端 | 映射方式 | 适用与风险 |
|---|---|---|
| tdb | 按需分配并记录在本地数据库 | 无法跨主机保持一致,多机共享易错乱 |
| rid | 由 RID 推导,算法确定 | 多主机一致,需规划 UID 范围 |
| ad | 读取目录中记录的数字并采用 | 需要目录侧维护对应属性 |
| autorid | 按域自动分配范围 | 部署简单,变更范围时需谨慎 |
检查映射结果
检查映射结果
wbinfo -n 'EXAMPLE\svc' # 名称换 SID
wbinfo -s S-1-5-21-...-1105 # SID 换回名称,验证一致性
getent passwd 'EXAMPLE\svc' # 查看系统侧解析到的 UID
id 'EXAMPLE\svc' # 查看该账号的完整身份信息
ls -ln /srv/data | head -n 10 # 看磁盘上实际记录的属主数字典型使用场景
- 多台 Linux 文件服务器挂载同一份后端存储,要求同一域账号在每台机器上都是同一个 UID
- 域账号与本地账号并存,需要避免 UID 数字撞车导致越权访问
- 从旧映射方案迁移到新方案,需要评估已有文件属主的变化范围
- NFS 与 SMB 同时对外提供,两侧身份解析必须给出相同结果
映射规则、后端类型或 UID 范围的变更会让同一账号换算出不同数字,而磁盘上已有文件的属主数字不会跟着变。结果是权限全面错乱,甚至出现 A 的目录被判给 B 的情况。任何改动前都必须评估存量文件,必要时连同 ACL 一并重新固化。
判断映射是否漂移的简单办法:在每台文件服务器上对同一个域账号执行同样的解析命令,比对得到的 UID 是否一致;再随机抽取几个存量文件查看属主数字是否仍能解析成预期账号。一致性核对应纳入日常巡检,而不是等用户报障。