在企业内部环境中,Linux 文件服务器统一接入 Windows AD 域是一个非常常见的需求。
这样可以做到:

  • 使用 AD 域账号统一认证

  • 文件权限由 域用户 / 域组控制

  • 运维侧无需维护本地账号体系

本文记录一次 Linux + Samba + Winbind 接入 AD 域并提供共享目录的完整实战过程,适用于生产环境参考。


一、环境说明

项目

说明

操作系统

Linux(CentOS / Rocky Linux 系列)

AD 域

EXAMPLE.AD.LOCAL

域控地址

192.168.X.X

Samba 角色

AD 成员服务器

认证方式

Kerberos + Winbind

共享目录

/data_share

⚠️ 文中所有域名、IP、用户名均为示例替换,请根据实际环境调整。


二、安装所需软件包

首先安装 Samba、Winbind 以及 Kerberos 相关组件:

yum install -y \
samba samba-client samba-common \
samba-winbind samba-winbind-clients \
krb5-workstation

这些组件分别负责:

  • Samba:文件共享服务

  • Winbind:AD 用户/组映射

  • Kerberos:域认证核心机制


三、配置 Kerberos(krb5.conf)

Kerberos 是 AD 认证的基础,配置文件通常位于:

/etc/krb5.conf

示例(脱敏后):

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 dns_lookup_kdc = true
 default_realm = EXAMPLE.AD.LOCAL

[realms]
 EXAMPLE.AD.LOCAL = {
   kdc = 192.168.X.X
   admin_server = 192.168.X.X
 }

[domain_realm]
 example.ad.local = EXAMPLE.AD.LOCAL
 .example.ad.local = EXAMPLE.AD.LOCAL

关键点说明:

  • default_realm 必须 全大写

  • kdcadmin_server 指向域控 IP

  • 域名映射必须正确,否则无法获取 Kerberos 票据


四、配置 NSS(让系统识别域用户)

修改 /etc/nsswitch.conf

passwd:     files winbind
shadow:     files winbind
group:      files winbind

作用:

让 Linux 系统在查询用户和组时,同时从 Winbind(AD) 中获取信息。


五、配置 Samba(smb.conf)

编辑 /etc/samba/smb.conf,以下为核心配置示例:

[global]
   workgroup = EXAMPLE
   security = ADS
   realm = EXAMPLE.AD.LOCAL
   password server = 192.168.X.X

   idmap config * : backend = tdb
   idmap config * : range = 100000-200000

   idmap config EXAMPLE : backend = ad
   idmap config EXAMPLE : schema_mode = rfc2307
   idmap config EXAMPLE : range = 400000000-500000000
   idmap config EXAMPLE : unix_nss_info = yes

   template shell = /sbin/bash
   template homedir = /home/%U

   winbind use default domain = Yes
   winbind enum users = yes
   winbind enum groups = yes
   winbind offline logon = yes

   log file = /var/log/samba/log.%m
   max log size = 50
   ntlm auth = yes

   interfaces = bond0

共享目录示例

[data_share]
   comment = Data Share
   path = /data_share
   browseable = Yes
   writable = Yes
   read only = No
   valid users = @"domain users"
   create mask = 0775
   directory mask = 0775

说明:

  • valid users 使用 域用户组

  • 权限控制统一交由 AD

  • 共享路径需提前创建并设置合适的 Linux 权限


六、加入 AD 域

执行域加入命令:

net ads join -U admin_user@example.ad.local

成功后会提示类似:

Joined 'SERVER-NAME' to realm 'EXAMPLE.AD.LOCAL'

七、启动并设置服务自启

systemctl start smb
systemctl start nmb
systemctl start winbind

systemctl enable smb
systemctl enable nmb
systemctl enable winbind

确认 Winbind 状态:

systemctl status winbind

八、验证域集成是否成功

1️⃣ 测试信任关系

wbinfo -t

返回 checking the trust secret succeeded 即正常。

2️⃣ 查看域用户

wbinfo -u

3️⃣ 查看域组

wbinfo -g

若能正常列出域用户/域组,说明 Linux 已成功接入 AD 域


九、常见踩坑经验

  • 时间不同步 = 100% 失败
    👉 请务必与域控使用同一 NTP 源

  • 域名大小写错误会导致 Kerberos 异常

  • idmap range 重叠会造成 UID/GID 冲突

  • 防火墙需放行 88 / 389 / 445 等端口


十、总结

通过 Samba + Winbind + Kerberos 的方式,可以让 Linux 文件服务器无缝接入 Windows AD 域,实现:

  • 域账号统一登录

  • 权限集中管理

  • 运维复杂度显著降低

这套方案在 影视制作、研发部门、企业文件服务器 场景中非常成熟可靠,适合长期运行在生产环境。