Skip to main content

在 TrueNAS SCALE(基于 Linux 的现代版本)中集成 局域网 Active Directory(AD)域

TrueNAS SCALE(基于 Linux 的现代版本)中集成 局域网 Active Directory(AD)域,可以实现使用域账号(如 DOMAIN\user)来管理 SMB 共享文件的权限(ACL),从而实现企业级集中身份认证与精细化权限控制。

以下是 完整配置流程(适用于 TrueNAS SCALE 22.12 及以上版本):


✅ 前提条件

  1. 局域网中已部署 Active Directory 域控制器(如 Windows Server 2016/2019/2022)
    • 域名示例:corp.local
    • DC IP:192.168.1.10
  2. TrueNAS 主机已加入同一局域网,能解析域名、ping 通 DC
  3. DNS 配置正确
    • TrueNAS 的 DNS 服务器应指向 AD 域控(或能递归解析 _ldap._tcp.dc._msdcs.corp.local 的 DNS)
  4. 防火墙允许以下端口(TCP/UDP):
    • 53(DNS)、88(Kerberos)、135(RPC)、139/445(SMB)、389(LDAP)、636(LDAPS)

🔧 步骤一:配置网络与主机名(关键!)

AD 对主机名和 DNS 解析极其敏感。

  1. 进入 Network > Global Configuration
    • Hostname: 设置为符合规范的名称(如 truenas
    • Domain: 留空(不要填 AD 域名!)
    • Nameserver 1: 填写 AD 域控 IP(如 192.168.1.10
  2. 保存后,测试 DNS 解析:
    # 在 Shell 中执行
    nslookup corp.local
    nslookup truenas.corp.local  # 应能解析到 TrueNAS IP
    

    ⚠️ 如果 truenas.corp.local 无法解析,需在 AD 域控的 DNS 中手动添加 A 记录。


🔐 步骤二:加入 Active Directory 域

  1. 进入 Directory Services > Active Directory
  2. 填写参数:
    • Domain Name: corp.local(你的 AD 域名)
    • Account Name: administrator 或有“加入计算机到域”权限的账户
    • Password: 对应密码
    • Site Name: 留空(除非你有 AD 站点)
    • Enable: ✅ 勾选
  3. (可选)高级设置:
    • Use default domain account: ✅ 建议勾选(自动创建机器账户)
    • Disable password expiration: ✅ 建议勾选(避免机器账户过期)
  4. 点击 SAVE

✅ 成功后,状态应显示 HEALTHY,且 TrueNAS 会在 AD 中注册为计算机对象(如 TRUENAS$)。


🧪 步骤三:验证 AD 集成是否成功

  1. 进入 Shell(System Settings > Shell)

  2. 执行命令测试:

    # 查看域用户
    wbinfo -u
    
    # 查看域组
    wbinfo -g
    
    # 测试 Kerberos 认证(应返回票据)
    kinit administrator@CORP.LOCAL
    klist
    

    若报错(如 NT_STATUS_NO_TRUST_SAM_ACCOUNT),说明未真正加入域,需检查 DNS 和时间同步。

  3. 确保时间同步(AD 要求时间偏差 < 5 分钟):

    • TrueNAS 应启用 NTP,并与域控时间一致。
    • 域控通常作为权威时间源。

📁 步骤四:创建数据集并启用 SMB + ACL 模式

  1. Storage > Pools > Add Dataset
    • Name: ad_share
    • Share Type: SMB
    • ACL Type: NFSv4(这是支持 Windows ACL 的关键!)
    • 其他默认 → Save

💡 NFSv4 ACL 模式才能映射 Windows 的精细权限(读/写/删除子文件夹等)。


🌐 步骤五:创建 SMB 共享(使用 AD 身份)

  1. Sharing > Windows Shares (SMB) > Add
    • Path: /mnt/tank/ad_share
    • Name: AD_Share
    • Purpose: Default share parameters
    • ✅ Enabled
  2. 高级设置(重要):
    • Auxiliary Parameters(可选但推荐):
      vfs objects = acl_xattr
      map acl inherit = yes
      store dos attributes = yes
      
    • 其他保持默认 → Save

👥 步骤六:配置 ACL 权限(使用域用户/组)

  1. 回到 Storage > Pools
  2. 找到 tank/ad_share,点击 ⋮ > Edit ACL
  3. ACL Type: 确保是 NFSv4
  4. 点击 Add Item 添加权限条目:
    • Who: 输入域用户或组,格式为:
      • 用户:CORP\\alicealice@corp.local
      • 组:CORP\\domain usersdomain users@corp.local
    • Type: ALLOW
    • Permissions: 勾选所需权限(如 READ, WRITE, EXECUTE
    • Apply permissions recursively: ✅ 勾选
  5. 点击 Save

✅ 此时,Windows 客户端用域账号登录后,访问 \\truenas\AD_Share 将自动应用对应权限。


🖥️ 客户端测试(Windows)

  1. 用域账号(如 alice@corp.local)登录 Windows
  2. 访问:\\<TrueNAS_IP>\AD_Share
  3. 尝试创建/删除文件 → 验证权限是否生效

🔧 常见问题排查

问题 解决方案
“无法加入域” / “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\\usernameusername@domain.com
SMB 共享 无需单独创建本地用户,直接使用域身份

通过以上配置,TrueNAS 即可作为 AD 域成员服务器,无缝使用域账号管理文件权限,适用于企业文件服务器、部门共享等场景。

📌 提示:如需更高级功能(如 LDAP 同步、组策略映射),可结合 SSSDWinbind 进行调优,但对大多数 SMB 共享场景,上述配置已足够。