在信息技术管理领域,将服务器纳入统一的身份认证体系是实现高效、安全运维的基础,对于许多仍在运行遗留系统的企业环境而言,将一台 CentOS 6.5 服务器加入现有的 Windows 域(通常是 Active Directory)是一项常见但至关重要的任务,这不仅允许域用户直接通过其域账户登录 Linux 服务器,还能实现统一的权限管理和资源访问控制,需要注意的是,CentOS 6.5 是一个非常古老的操作系统版本,早已停止官方支持,本文提供的方法仅适用于维护特定遗留环境的场景,强烈建议在生产环境中升级到受支持的现代系统。

准备工作:前置条件与环境检查
在开始任何配置之前,确保以下基础条件已经满足,这是成功加入域的关键。
- 网络连通性:CentOS 6.5 服务器必须能够通过网络访问域控制器(DC),使用
ping命令测试与域控制器 IP 地址和域名的连通性。 - DNS 配置:这是最关键的一步,服务器的
/etc/resolv.conf文件必须配置为使用域控制器作为其 DNS 服务器,它必须能够正确解析域的 SRV 记录,以便找到域控制器。 - 时间同步:Kerberos 协议对时间非常敏感,客户端与服务器之间的时间差通常不能超过 5 分钟,必须安装并配置 NTP 服务,确保 CentOS 服务器与域控制器的时间保持同步。
- 域管理员凭据:需要一个具有足够权限将计算机加入域的域账户,通常是 Domain Admins 组的成员。
核心组件安装
CentOS 6.5 需要安装几个核心软件包来与 Windows 域进行交互,主要包括 Samba(用于文件和打印共享以及身份验证)、Winbind(用于将 Windows NT/AD 域用户和组解析为 UNIX UID/GID)以及 Kerberos 客户端工具。
打开终端,执行以下命令来安装必要的软件包:
yum install samba samba-common samba-winbind krb5-workstation
samba: 提供 SMB/CIFS 协议支持的核心软件包。samba-winbind: Winbind 服务,使得 Linux 可以作为域成员。krb5-workstation: 提供 Kerberos 认证客户端工具,如kinit。
配置 Kerberos 认证
Kerberos 是域环境中用于安全认证的核心协议,我们需要创建一个配置文件来告诉 Linux 客户端如何与 Kerberos 域(Realm)通信,编辑 /etc/krb5.conf 文件,内容如下,请将 YOUR.REALM.COM 和 your.realm.com 替换为您的实际域名。
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = YOUR.REALM.COM
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
YOUR.REALM.COM = {
kdc = dc1.your.realm.com
kdc = dc2.your.realm.com
admin_server = dc1.your.realm.com
default_domain = your.realm.com
}
[domain_realm]
.your.realm.com = YOUR.REALM.COM
your.realm.com = YOUR.REALM.COM
配置要点说明:
default_realm: 设置默认的 Kerberos 域,必须大写。kdc: 指定域控制器的地址。admin_server: 指定管理服务器的地址。[domain_realm]部分:将小写的域名映射到大写的 Kerberos 域。
配置 Samba 与 Winbind
配置 Samba 和 Winbind 以便它们能够与域交互,编辑 /etc/samba/smb.conf 文件,以下是一个基础但功能齐全的配置示例:
[global] workgroup = YOURDOMAIN realm = YOUR.REALM.COM server string = CentOS 6.5 Server security = ADS encrypt passwords = yes dns proxy = no # Winbind Settings idmap config * : backend = tdb idmap config * : range = 2000-9999 idmap config YOURDOMAIN : backend = rid idmap config YOURDOMAIN : range = 10000-999999 winbind use default domain = yes winbind enum users = yes winbind enum groups = yes template shell = /bin/bash template homedir = /home/%U # Logging log file = /var/log/samba/log.%m max log size = 50
配置要点说明:
workgroup: 您的域的 NetBIOS 名称。realm: Kerberos 域名称,与krb5.conf中的default_realm相同。security = ADS: 指定 Samba 使用 Active Directory 安全模式。idmap config * : backend = tdb: 为非域用户/组使用 TDB 作为后端。idmap config YOURDOMAIN : backend = rid: 为域用户/组使用 RID(相对标识符)后端,这是一种简单且稳定的 ID 映射方式。idmap config YOURDOMAIN : range: 为域用户/组分配的 UNIX UID/GID 范围,确保不与本地用户冲突。winbind use default domain = yes: 允许直接使用username而不是DOMAIN\username来登录。template shell: 为域用户设置默认的 Shell。template homedir: 为域用户设置主目录的路径模板。
配置名称服务切换 (NSS)
为了让系统能够像查询本地用户一样查询域用户,需要修改 /etc/nsswitch.conf 文件,找到 passwd, group, 和 shadow 这几行,在末尾添加 winbind。

passwd: files winbind
shadow: files winbind
group: files winbind
启动服务并加入域
配置完成后,按顺序启动相关服务,并将其设置为开机自启。
# 启动并设置 NTP 服务 service ntpd start chkconfig ntpd on # 启动并设置 Samba 服务 service smb start chkconfig smb on # 启动并设置 Winbind 服务 service winbind start chkconfig winbind on
可以使用 net ads join 命令将计算机加入域,系统会提示输入域管理员密码。
net ads join -U administrator
如果命令执行成功,您会看到 "Joined ... to realm ..." 的提示信息,这表示您的 CentOS 6.5 服务器已成功成为域的一员。
验证与测试
进行一系列测试以确认配置生效。
-
测试域成员身份:
net ads testjoin
如果返回 "Join is OK",则表示加入成功。
-
检查是否可以获取域用户和组:
wbinfo -u wbinfo -g
这两个命令应该会分别列出域中的所有用户和组。

-
使用 getent 查询用户:
getent passwd 'your_domain_user'
如果能返回该用户的详细信息(包括 UID、GID 和主目录),说明 NSS 配置正确。
-
尝试切换用户:
su - 'your_domain_user'
如果能够成功切换到域用户 shell,即使提示没有主目录(下一个 FAQ 会解决这个问题),也基本表明认证流程已经打通。
相关问答FAQs
问题 1:除了 Winbind,还有其他方式可以将 CentOS 6.5 加入域吗?
解答:是的,除了 Samba Winbind,还可以使用 SSSD(System Security Services Daemon),SSSD 是一个更现代的系统服务,用于远程身份验证和域名解析,相比于 Winbind,SSSD 提供了更好的性能、更广泛的协议支持(如 LDAP、Kerberos、Proxy)以及离线缓存功能(即在与域控制器断开连接后,用户依然可以使用缓存的凭据登录),在 CentOS 6.5 的时代,Winbind 是更成熟和普遍的选择,但 SSSD 也是一个可行的替代方案,它通过编辑 /etc/sssd/sssd.conf 进行配置,并同样需要 Kerberos 和正确的 NSS 设置。
问题 2:AD 用户登录成功后,为什么提示 “Could not chdir to home directory: No such file or directory” 且没有家目录?
解答:这是一个非常常见的问题,默认情况下,PAM(可插拔认证模块)不会为首次登录的域用户自动创建主目录,您在 smb.conf 中设置的 template homedir 仅仅是指定了主目录的路径,但没有创建它的指令,要解决这个问题,需要修改 PAM 的配置,使其在用户首次登录时自动创建主目录,编辑 /etc/pam.d/system-auth-ac 文件(有时是 /etc/pam.d/system-auth),在 session 部分添加以下一行:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
这行配置的作用是,当一个会话建立时,如果用户的主目录不存在,pam_mkhomedir.so 模块会自动以 /etc/skel 为模板,使用 umask=0022 的权限创建它,添加后,域用户下次登录时,系统就会为其自动创建家目录了。