# 在 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 &gt; Global Configuration**
    - **Hostname**: 设置为符合规范的名称（如 `truenas`）
    - **Domain**: 留空（不要填 AD 域名！）
    - **Nameserver 1**: 填写 **AD 域控 IP**（如 `192.168.1.10`）
2. 保存后，测试 DNS 解析： ```bash
    # 在 Shell 中执行
    nslookup corp.local
    nslookup truenas.corp.local  # 应能解析到 TrueNAS IP
    
    ```
    
    > ⚠️ 如果 `truenas.corp.local` 无法解析，需在 AD 域控的 DNS 中手动添加 A 记录。

---

## 🔐 步骤二：加入 Active Directory 域

1. 进入 **Directory Services &gt; 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 &gt; Shell）
2. 执行命令测试：
    
    ```bash
    # 查看域用户
    wbinfo -u
    
    # 查看域组
    wbinfo -g
    
    # 测试 Kerberos 认证（应返回票据）
    kinit administrator@CORP.LOCAL
    klist
    
    ```
    
    > 若报错（如 `NT_STATUS_NO_TRUST_SAM_ACCOUNT`），说明未真正加入域，需检查 DNS 和时间同步。
3. **确保时间同步**（AD 要求时间偏差 &lt; 5 分钟）：
    
    
    - TrueNAS 应启用 NTP，并与域控时间一致。
    - 域控通常作为权威时间源。

---

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

1. **Storage &gt; Pools &gt; Add Dataset**
    - Name: `ad_share`
    - **Share Type**: **SMB**
    - **ACL Type**: **NFSv4**（这是支持 Windows ACL 的关键！）
    - 其他默认 → Save

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

---

## 🌐 步骤五：创建 SMB 共享（使用 AD 身份）

1. **Sharing &gt; Windows Shares (SMB) &gt; 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 &gt; Pools**
2. 找到 `tank/ad_share`，点击 **⋮ &gt; Edit ACL**
3. **ACL Type**: 确保是 **NFSv4**
4. 点击 **Add Item** 添加权限条目： 
    - **Who**: 输入域用户或组，格式为： 
        - 用户：`CORP\\alice` 或 `alice@corp.local`
        - 组：`CORP\\domain users` 或 `domain 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. 尝试创建/删除文件 → 验证权限是否生效

---

## 🔧 常见问题排查

<table id="bkmrk-%E9%97%AE%E9%A2%98-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88-%E2%80%9C%E6%97%A0%E6%B3%95%E5%8A%A0%E5%85%A5%E5%9F%9F%E2%80%9D-%2F-%E2%80%9Cn"><thead><tr><th>问题</th><th>解决方案</th></tr></thead><tbody><tr><td>**“无法加入域” / “NT\_STATUS\_LOGON\_FAILURE”**</td><td>检查账户密码、DNS 解析、时间同步</td></tr><tr><td>**wbinfo -u 无输出**</td><td>检查 SSSD 服务状态：`systemctl status sssd`</td></tr><tr><td>**ACL 保存时报错“Invalid user”**</td><td>确保输入格式正确（如 `CORP\\username`），且用户存在于域中</td></tr><tr><td>**权限不生效**</td><td>确认数据集 ACL 类型为 **NFSv4**，而非 POSIX</td></tr><tr><td>**中文用户名乱码**</td><td>在 SMB 全局设置中添加：  
`fruit:encoding = UTF-8`  
`dos charset = CP936`</td></tr></tbody></table>

---

## ✅ 总结：关键要点

<table id="bkmrk-%E9%A1%B9%E7%9B%AE-%E8%A6%81%E6%B1%82-dns-%E5%BF%85%E9%A1%BB%E8%83%BD%E6%AD%A3%E5%90%91%2F%E5%8F%8D%E5%90%91%E8%A7%A3%E6%9E%90"><thead><tr><th>项目</th><th>要求</th></tr></thead><tbody><tr><td>**DNS**</td><td>必须能正向/反向解析 TrueNAS 主机名</td></tr><tr><td>**时间同步**</td><td>与域控偏差 &lt; 5 分钟</td></tr><tr><td>**数据集 ACL 类型**</td><td>必须选 **NFSv4**</td></tr><tr><td>**用户格式**</td><td>`DOMAIN\\username` 或 `username@domain.com`</td></tr><tr><td>**SMB 共享**</td><td>无需单独创建本地用户，直接使用域身份</td></tr></tbody></table>

---

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

> 📌 提示：如需更高级功能（如 LDAP 同步、组策略映射），可结合 **SSSD** 或 **Winbind** 进行调优，但对大多数 SMB 共享场景，上述配置已足够。