基于Active Directory实现Ubuntu集中式身份认证的方案咨询
基于Windows Server 2012 AD搭建Ubuntu集中式认证体系指南
没问题,这个需求我帮很多企业实现过——把Ubuntu机器接入Windows Server 2012 AD做集中认证,统一管理用户权限,完全可行。下面是一步步的实操指南,跟着做基本不会踩坑:
一、前期准备工作
- 确保所有Ubuntu机器和AD域控制器处于同一局域网,时间必须同步(Kerberos认证对时间差敏感,建议控制在5分钟以内,可通过
chrony或ntp服务同步AD服务器时间) - 在Ubuntu的DNS配置中指向AD服务器(可编辑
/etc/resolv.conf添加AD的IP,或通过DHCP自动分配) - 提前记录AD的完整域名(如
example.com)、域控制器主机名(如dc01.example.com),以及拥有域权限的管理员账号
二、安装依赖组件
在每台Ubuntu机器上执行以下命令,安装对接AD所需的工具包:
sudo apt update && sudo apt install realmd sssd sssd-tools libnss-sss libpam-sss adcli krb5-user -y
三、配置Kerberos认证
Kerberos是AD和Linux之间的核心认证协议,我们先完成配置:
- 运行Kerberos配置向导:
sudo dpkg-reconfigure krb5-config
按提示依次输入:
- 默认Kerberos realm:输入AD域名的大写形式(如
EXAMPLE.COM) - KDC服务器:输入域控制器主机名(如
dc01.example.com) - 管理服务器:和KDC服务器一致即可
- 也可以手动编辑
/etc/krb5.conf确保配置正确:
[libdefaults] default_realm = EXAMPLE.COM dns_lookup_kdc = true dns_lookup_realm = true [realms] EXAMPLE.COM = { kdc = dc01.example.com admin_server = dc01.example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
四、将Ubuntu加入AD域
- 先用域管理员账号获取Kerberos票据:
kinit administrator@EXAMPLE.COM
输入管理员密码后,若没有报错则说明票据获取成功。
- 将Ubuntu加入AD域:
sudo realm join --user=administrator EXAMPLE.COM
执行成功后,用realm list命令验证,能看到AD域的信息即为成功。
五、配置SSSD核心服务
SSSD(System Security Services Daemon)负责Linux和AD之间的用户信息同步与认证请求转发,是核心配置环节:
- 编辑
/etc/sssd/sssd.conf,替换为以下内容(注意修改域名相关参数):
[sssd] services = nss, pam, ssh config_file_version = 2 domains = EXAMPLE.COM [domain/EXAMPLE.COM] id_provider = ad auth_provider = ad access_provider = ad ad_domain = example.com krb5_realm = EXAMPLE.COM cache_credentials = True ldap_id_mapping = True use_fully_qualified_names = False fallback_homedir = /home/%u default_shell = /bin/bash
- 设置配置文件权限(SSSD要求必须是600):
sudo chmod 600 /etc/sssd/sssd.conf
- 重启SSSD服务:
sudo systemctl restart sssd && sudo systemctl enable sssd
六、配置PAM自动创建家目录
让AD用户首次登录Ubuntu时自动生成家目录:
运行PAM配置工具:
sudo pam-auth-update
在弹出的界面中,勾选SSS authentication和Create home directory on login选项,按回车确认保存。
七、测试认证功能
- 在AD服务器上创建一个测试用户(如
testuser) - 在Ubuntu上执行
id testuser,若能返回用户的UID、GID等信息,说明用户信息同步成功 - 尝试切换用户:
su - testuser,输入AD用户密码后成功登录,且自动生成了/home/testuser目录 - 也可以通过SSH远程登录测试,验证跨机器的集中认证效果
八、可选优化配置
- 限制特定AD组登录:在
sssd.conf的[domain/EXAMPLE.COM]段添加ad_access_filter = (memberOf=CN=LinuxAllowedUsers,OU=Groups,DC=example,DC=com),仅允许指定组的用户登录Ubuntu - 配置sudo权限:创建
sudoers规则文件sudo touch /etc/sudoers.d/ad_sudo,添加%linuxallowedusers ALL=(ALL) ALL(组名对应AD中的组,注意小写),让指定AD组拥有sudo权限
九、常见问题排查
- 登录失败时,查看SSSD日志:
journalctl -u sssd或cat /var/log/sssd/sssd_EXAMPLE.COM.log - 时间不同步导致Kerberos认证失败:执行
sudo chronyc tracking查看时间同步状态,确保和AD服务器时间一致 - DNS解析问题:用
dig dc01.example.com验证AD服务器是否能被正常解析
内容的提问来源于stack exchange,提问作者dmx




