TT Bigdata TT Bigdata
首页
GitHub (opens new window)
JaneTTR

JaneTTR

数据酿造智慧,每一滴都是沉淀!
  • 产品中心

  • 安装与使用

    • Ambari Plus 安装

    • 组件安装

    • 开启高可用

    • 权限与安全专题

      • 权限与安全总览
      • Kerberos

      • LDAP

        • LDAP 专题
        • 【托管】OpenLDAP 接入与验证
        • 【托管】用户、用户组与授权验证
        • 【托管】OpenLDAP 高可用部署
        • 【外置】LDAP 接入与验证
        • 【外置】用户、用户组与授权验证
        • 【AD】Active Directory 接入与验证
        • 【AD】用户、用户组与授权验证
        • 附录:托管 OpenLDAP 环境准备
        • 附录:【外置】OpenLDAP 原生安装环境
        • 附录:Active Directory 实验环境
          • 准备 Active Directory 实验环境
          • 构建 Samba AD DC 镜像
          • 准备持久化目录和密码
          • 初始化 AD 域
          • 签发 LDAPS 证书
          • 启动 AD 容器
          • 创建 Bind 用户和测试组
          • 验证 LDAPS、Bind 与嵌套组
          • 在 Ambari Plus 中填写什么
          • 停用和数据保留
    • Ambari Plus Monitor

    • 常见问题

  • 发布与支持

  • 会员与访问

目录
准备 Active Directory 实验环境
构建 Samba AD DC 镜像
准备持久化目录和密码
初始化 AD 域
签发 LDAPS 证书
启动 AD 容器
创建 Bind 用户和测试组
验证 LDAPS、Bind 与嵌套组
在 Ambari Plus 中填写什么
停用和数据保留

附录:Active Directory 实验环境

# 准备 Active Directory 实验环境

本附录使用 Samba AD DC 准备可复现的实验域,保留构建、初始化、LDAPS、用户、直属组和嵌套组的核心命令。企业已有 AD 时直接阅读Active Directory 接入与验证。

配置项 示例值
AD Realm ADLAB.TEST
DNS 域 adlab.test
NetBIOS 域 ADLAB
域控制器 ad-dc1.adlab.test
外部访问名 dev1.test.com
LDAPS URL ldaps://dev1.test.com:21636
Base DN DC=adlab,DC=test
数据目录 /data/extlab/ad

注意

本文搭建的是单节点 Samba AD DC,只适合功能验证。它不代表生产级 Microsoft Active Directory,也没有覆盖双 DC、DNS 高可用、Global Catalog、站点复制、FSMO、备份恢复和域灾备。

笔记

本附录只把 AD 当作 LDAP 身份目录接入 Ambari Plus,没有让 Hadoop 主机加入 AD 域,也没有把 AD 作为 Kerberos KDC。两条安全链路要分开验收。

# 构建 Samba AD DC 镜像

示例主机使用 Docker。先建立一个最小镜像目录:

sudo install -d -m 700 /data/extlab/ad/image
cd /data/extlab/ad/image
1
2

创建 Dockerfile:

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
 && apt-get install -y --no-install-recommends \
      samba samba-vfs-modules samba-dsdb-modules winbind \
      libnss-winbind python3-samba ldb-tools \
      krb5-user ldap-utils ca-certificates openssl tini \
      dnsutils iproute2 procps \
 && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["/usr/sbin/samba", "-i", "--no-process-group"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14

构建镜像:

sudo docker build -t ambari-ad-lab:ubuntu22.04 .
1

如果生产环境不能访问公共镜像仓库,应提前把基础镜像和软件包纳入内部制品库,不要在执行接入向导时临时下载。

# 准备持久化目录和密码

域数据库不能只放在容器可写层。下面几个目录会映射到容器中的 Samba 配置和数据路径。

sudo install -d -m 700 \
  /data/extlab/ad/etc-samba \
  /data/extlab/ad/var-lib-samba \
  /data/extlab/ad/var-cache-samba \
  /data/extlab/ad/tls \
  /data/extlab/ad/secrets

sudo -i
umask 077
openssl rand -base64 30 > /data/extlab/ad/secrets/domain-admin.secret
openssl rand -base64 30 > /data/extlab/ad/secrets/bind-user.secret
openssl rand -base64 30 > /data/extlab/ad/secrets/test-user.secret
1
2
3
4
5
6
7
8
9
10
11
12

建立独立 Docker 网络,让 Docker 自动选择未占用的地址池:

sudo docker network create ambari-ad-lab-net
1

如果环境必须固定容器网段,应由网络管理员分配地址,并先检查它是否与主机、Kubernetes、Docker 和集群业务网段冲突。

# 初始化 AD 域

域只需要初始化一次。下面的临时容器退出后,域数据仍保存在 /data/extlab/ad。

sudo docker run --rm \
  --network ambari-ad-lab-net \
  -v /data/extlab/ad/etc-samba:/etc/samba \
  -v /data/extlab/ad/var-lib-samba:/var/lib/samba \
  -v /data/extlab/ad/var-cache-samba:/var/cache/samba \
  -v /data/extlab/ad/secrets:/run/ad-secrets:ro \
  ambari-ad-lab:ubuntu22.04 \
  bash -lc 'samba-tool domain provision \
    --server-role=dc \
    --use-rfc2307 \
    --dns-backend=SAMBA_INTERNAL \
    --realm=ADLAB.TEST \
    --domain=ADLAB \
    --adminpass="$(</run/ad-secrets/domain-admin.secret)"'
1
2
3
4
5
6
7
8
9
10
11
12
13
14

警告

samba-tool domain provision 需要接收域管理员初始密码。本示例从 root-only 文件读取,避免把密码写死在教程和脚本中。仍应在隔离主机上执行,并在部署完成后限制进程查看、审计日志和备份文件访问。

# 签发 LDAPS 证书

生成测试 CA:

cd /data/extlab/ad

openssl genrsa -out tls/ca.key 4096
openssl req -x509 -new -sha256 -days 3650 \
  -key tls/ca.key \
  -out tls/ca.pem \
  -subj '/CN=Ambari AD Lab Root CA/O=Ambari Plus Lab'
1
2
3
4
5
6
7

为外部访问名和域控制器名称签发证书:

openssl genrsa -out tls/server.key 3072
openssl req -new \
  -key tls/server.key \
  -out tls/server.csr \
  -subj '/CN=dev1.test.com/O=Ambari Plus Lab'

cat > tls/server.ext <<'EOF'
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth
subjectAltName=DNS:dev1.test.com,DNS:ad-dc1.adlab.test,DNS:ad-dc1
EOF

openssl x509 -req -sha256 -days 825 \
  -in tls/server.csr \
  -CA tls/ca.pem \
  -CAkey tls/ca.key \
  -CAcreateserial \
  -out tls/server.pem \
  -extfile tls/server.ext

chmod 600 tls/ca.key tls/server.key
chmod 644 tls/ca.pem tls/server.pem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

在 /data/extlab/ad/etc-samba/smb.conf 的 [global] 中确认下面几项存在:

[global]
    netbios name = AD-DC1
    realm = ADLAB.TEST
    workgroup = ADLAB
    server role = active directory domain controller
    dns forwarder = 127.0.0.11
    idmap_ldb:use rfc2307 = yes

    tls enabled = yes
    tls keyfile = /etc/samba/tls/server.key
    tls certfile = /etc/samba/tls/server.pem
    tls cafile = /etc/samba/tls/ca.pem
    ldap server require strong auth = yes
1
2
3
4
5
6
7
8
9
10
11
12
13

检查证书:

openssl verify -CAfile tls/ca.pem tls/server.pem
openssl x509 -in tls/server.pem \
  -noout -subject -issuer -dates -ext subjectAltName
1
2
3

# 启动 AD 容器

这里只向主机映射 LDAPS。21636 是实验环境端口;没有冲突时也可以使用标准的 636。

sudo docker run -d \
  --name ambari-ad-lab \
  --hostname ad-dc1 \
  --restart unless-stopped \
  --network ambari-ad-lab-net \
  -p 21636:636 \
  -v /data/extlab/ad/etc-samba:/etc/samba \
  -v /data/extlab/ad/var-lib-samba:/var/lib/samba \
  -v /data/extlab/ad/var-cache-samba:/var/cache/samba \
  -v /data/extlab/ad/tls:/etc/samba/tls:ro \
  -v /data/extlab/ad/secrets:/run/ad-secrets:ro \
  --health-cmd 'samba-tool domain info 127.0.0.1 >/dev/null 2>&1' \
  --health-interval 10s \
  --health-timeout 5s \
  --health-retries 12 \
  ambari-ad-lab:ubuntu22.04
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

检查容器、域和端口:

sudo docker ps --filter name=ambari-ad-lab
sudo docker inspect ambari-ad-lab \
  --format '{{.State.Status}} / {{.State.Health.Status}}'
sudo docker exec ambari-ad-lab \
  samba-tool domain info 127.0.0.1
sudo ss -lntup | grep ':21636\b'
1
2
3
4
5
6

Samba AD 容器、持久化目录和 LDAPS

核对 Samba AD 域信息

容器健康检查、LDAPS 端口和域信息都通过后,再创建平台 Bind 用户和测试目录对象。

# 创建 Bind 用户和测试组

平台应使用专门的只读 Bind 用户,不要长期使用 Domain Administrator。

sudo docker exec ambari-ad-lab bash -lc '
  samba-tool user create svc_ambari_bind \
    "$(</run/ad-secrets/bind-user.secret)" \
    --given-name="Ambari Directory" \
    --surname="Bind" \
    --description="Read-only Ambari directory bind account"

  samba-tool user create alice \
    "$(</run/ad-secrets/test-user.secret)" \
    --given-name="Alice" \
    --surname="Data User" \
    --mail-address="[email protected]"

  samba-tool group add DataEngineers
  samba-tool group add PlatformReaders
  samba-tool group addmembers DataEngineers alice
  samba-tool group addmembers PlatformReaders DataEngineers
'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Samba 会根据 given name 和 surname 生成 CN,因此示例中的 Bind DN 为:

CN=Ambari Directory Bind,CN=Users,DC=adlab,DC=test
1

如果企业 AD 把服务账号放在专用 OU,页面中必须填写真实 DN,不能照抄 CN=Users。

# 验证 LDAPS、Bind 与嵌套组

先检查 TLS 名称和 CA:

openssl s_client \
  -connect dev1.test.com:21636 \
  -servername dev1.test.com \
  -CAfile /data/extlab/ad/tls/ca.pem \
  -verify_return_error </dev/null
1
2
3
4
5

再使用 Bind 用户查询 RootDSE:

export LDAPTLS_CACERT=/data/extlab/ad/tls/ca.pem

ldapsearch -LLL -x \
  -H ldaps://dev1.test.com:21636 \
  -D 'CN=Ambari Directory Bind,CN=Users,DC=adlab,DC=test' -W \
  -s base -b '' \
  defaultNamingContext dnsHostName supportedLDAPVersion
1
2
3
4
5
6
7

验证 Samba AD 的 LDAPS 证书和 RootDSE

证书校验和目录 Bind 是两项独立检查。证书通过并不代表账号有查询权限,Bind 成功也不能替代证书名称校验。

查询用户和嵌套组:

ldapsearch -LLL -x \
  -H ldaps://dev1.test.com:21636 \
  -D 'CN=Ambari Directory Bind,CN=Users,DC=adlab,DC=test' -W \
  -b 'DC=adlab,DC=test' \
  '(|(sAMAccountName=alice)(cn=DataEngineers)(cn=PlatformReaders))' \
  dn cn sAMAccountName userPrincipalName member
1
2
3
4
5
6

验证 AD 用户、直属组和嵌套组

预期关系如下:

alice -> DataEngineers -> PlatformReaders
1

笔记

Samba AD DC 不一定支持 ldapwhoami 使用的 Who Am I 扩展操作。遇到 Extended Operation ... not supported 时,不要误判为 Bind 失败;使用带凭据的 RootDSE ldapsearch 验证即可。

# 在 Ambari Plus 中填写什么

进入 权限与审计 → LDAP 目录与权限 → 选择目录来源,选择 接入 Active Directory。

最新版 Active Directory 连接页

页面字段 示例值
域控地址 ldaps://dev1.test.com:21636,可继续添加备用域控并设置优先级。
Base DN DC=adlab,DC=test
Bind DN CN=Ambari Directory Bind,CN=Users,DC=adlab,DC=test
Bind 密码 bind-user.secret 中的密码,只在页面输入。
StartTLS 关闭;这里直接使用 LDAPS。
受信任 CA 上传或粘贴 ca.pem 的 PEM 内容。
用户搜索 Base CN=Users
用户过滤器 (&(objectClass=user)(!(objectClass=computer)))
用户名属性 sAMAccountName
用户组搜索 Base CN=Users
用户组过滤器 (objectClass=group)
用户组名称属性 cn
成员属性 member
嵌套组 开启
AD 组解析模式 matching-rule-in-chain
Referral ignore
认证方式 TLS + Simple Bind

实验环境可以关闭“生产 AD 配置”。生产配置应使用企业 CA、吊销检查和企业规定的通道绑定策略;如果现场启用了 AD 强制签名、Channel Binding 或更严格的 LDAP 策略,要按域策略设置,不能为了通过测试降低 AD 安全基线。

在“管理员准备”步骤填写 AD 中已经存在的管理员用户与管理员组。平台验证对象和成员关系,不保存管理员用户的日常登录密码。接入后按统一组权限页面配置入口、数据服务和平台角色:

统一组权限配置页

# 停用和数据保留

平台停用外部 AD 时,只解除 Ambari Plus 与目录消费者的连接,不应该停止域控制器或删除 AD 对象。

测试环境暂停容器:

sudo docker stop ambari-ad-lab
1

恢复:

sudo docker start ambari-ad-lab
1

普通暂停不要删除容器网络、/data/extlab/ad、域数据库、证书和账号。真正退役前应先完成 AD 备份、消费者解绑和目录对象清理,并由 AD 管理员按企业流程执行。

#LDAP#Active Directory#Samba AD DC#LDAPS
附录:【外置】OpenLDAP 原生安装环境
IoTDB 安装与部署

← 附录:【外置】OpenLDAP 原生安装环境 IoTDB 安装与部署→

最近更新
01
当前版本 2026/08
08-29
02
把 Ambari Server HA 稳稳地跑起来
08-17
03
从一次启用操作追到主备就绪
08-17
更多文章>
Theme by Vdoing | Copyright © 2017-2026 JaneTTR | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式