在 TrueNAS SCALE(基于 Linux 的现代版本)中集成 局域网 Active Directory(AD)域 在 TrueNAS SCALE (基于 Linux 的现代版本)中集成 局域网 Active Directory(AD)域 ,可以实现使用域账号(如 DOMAIN\user )来管理 SMB 共享文件的权限(ACL),从而实现企业级集中身份认证与精细化权限控制。 以下是 完整配置流程 (适用于 TrueNAS SCALE 22.12 及以上版本): ✅ 前提条件 局域网中已部署 Active Directory 域控制器 (如 Windows Server 2016/2019/2022) 域名示例: corp.local DC IP: 192.168.1.10 TrueNAS 主机已加入同一局域网 ,能解析域名、ping 通 DC DNS 配置正确 : TrueNAS 的 DNS 服务器应指向 AD 域控(或能递归解析 _ldap._tcp.dc._msdcs.corp.local 的 DNS) 防火墙允许以下端口 (TCP/UDP): 53(DNS)、88(Kerberos)、135(RPC)、139/445(SMB)、389(LDAP)、636(LDAPS) 🔧 步骤一:配置网络与主机名(关键!) AD 对主机名和 DNS 解析极其敏感。 进入 Network > Global Configuration Hostname : 设置为符合规范的名称(如 truenas ) Domain : 留空(不要填 AD 域名!) Nameserver 1 : 填写 AD 域控 IP (如 192.168.1.10 ) 保存后,测试 DNS 解析: # 在 Shell 中执行 nslookup corp.local nslookup truenas.corp.local # 应能解析到 TrueNAS IP ⚠️ 如果 truenas.corp.local 无法解析,需在 AD 域控的 DNS 中手动添加 A 记录。 🔐 步骤二:加入 Active Directory 域 进入 Directory Services > Active Directory 填写参数: Domain Name : corp.local (你的 AD 域名) Account Name : administrator 或有“加入计算机到域”权限的账户 Password : 对应密码 Site Name : 留空(除非你有 AD 站点) Enable : ✅ 勾选 (可选)高级设置: Use default domain account : ✅ 建议勾选(自动创建机器账户) Disable password expiration : ✅ 建议勾选(避免机器账户过期) 点击 SAVE ✅ 成功后,状态应显示 HEALTHY ,且 TrueNAS 会在 AD 中注册为计算机对象(如 TRUENAS$ )。 🧪 步骤三:验证 AD 集成是否成功 进入 Shell (System Settings > Shell) 执行命令测试: # 查看域用户 wbinfo -u # 查看域组 wbinfo -g # 测试 Kerberos 认证(应返回票据) kinit administrator@CORP.LOCAL klist 若报错(如 NT_STATUS_NO_TRUST_SAM_ACCOUNT ),说明未真正加入域,需检查 DNS 和时间同步。 确保时间同步 (AD 要求时间偏差 < 5 分钟): TrueNAS 应启用 NTP,并与域控时间一致。 域控通常作为权威时间源。 📁 步骤四:创建数据集并启用 SMB + ACL 模式 Storage > Pools > Add Dataset Name: ad_share Share Type : SMB ACL Type : NFSv4 (这是支持 Windows ACL 的关键!) 其他默认 → Save 💡 NFSv4 ACL 模式才能映射 Windows 的精细权限(读/写/删除子文件夹等)。 🌐 步骤五:创建 SMB 共享(使用 AD 身份) Sharing > Windows Shares (SMB) > Add Path: /mnt/tank/ad_share Name: AD_Share Purpose: Default share parameters ✅ Enabled 高级设置 (重要): Auxiliary Parameters (可选但推荐): vfs objects = acl_xattr map acl inherit = yes store dos attributes = yes 其他保持默认 → Save 👥 步骤六:配置 ACL 权限(使用域用户/组) 回到 Storage > Pools 找到 tank/ad_share ,点击 ⋮ > Edit ACL ACL Type : 确保是 NFSv4 点击 Add Item 添加权限条目: Who : 输入域用户或组,格式为: 用户: CORP\\alice 或 alice@corp.local 组: CORP\\domain users 或 domain users@corp.local Type : ALLOW Permissions : 勾选所需权限(如 READ , WRITE , EXECUTE ) Apply permissions recursively : ✅ 勾选 点击 Save ✅ 此时,Windows 客户端用域账号登录后,访问 \\truenas\AD_Share 将自动应用对应权限。 🖥️ 客户端测试(Windows) 用域账号(如 alice@corp.local )登录 Windows 访问: \\\AD_Share 尝试创建/删除文件 → 验证权限是否生效 🔧 常见问题排查 问题 解决方案 “无法加入域” / “NT_STATUS_LOGON_FAILURE” 检查账户密码、DNS 解析、时间同步 wbinfo -u 无输出 检查 SSSD 服务状态: systemctl status sssd ACL 保存时报错“Invalid user” 确保输入格式正确(如 CORP\\username ),且用户存在于域中 权限不生效 确认数据集 ACL 类型为 NFSv4 ,而非 POSIX 中文用户名乱码 在 SMB 全局设置中添加: fruit:encoding = UTF-8 dos charset = CP936 ✅ 总结:关键要点 项目 要求 DNS 必须能正向/反向解析 TrueNAS 主机名 时间同步 与域控偏差 < 5 分钟 数据集 ACL 类型 必须选 NFSv4 用户格式 DOMAIN\\username 或 username@domain.com SMB 共享 无需单独创建本地用户,直接使用域身份 通过以上配置,TrueNAS 即可作为 AD 域成员服务器 ,无缝使用域账号管理文件权限,适用于企业文件服务器、部门共享等场景。 📌 提示:如需更高级功能(如 LDAP 同步、组策略映射),可结合 SSSD 或 Winbind 进行调优,但对大多数 SMB 共享场景,上述配置已足够。