要在 Ubuntu/Debian 桌面上支持 True SSO,需使用 Samba 和 Winbind 解决方案将基础虚拟机 (VM) 与 Active Directory (AD) 域集成在一起。
要将 Ubuntu/Debian 虚拟机与 AD 域集成,请使用以下过程。
该过程中的一些示例使用占位符值表示网络配置中的实体,例如,虚拟机的主机名。请将占位符值替换为您的配置特定的信息,如下表中所述。
占位符值 |
说明 |
dns_IP_ADDRESS |
DNS 名称服务器的 IP 地址 |
mydomain.com |
AD 域的 DNS 名称 |
MYDOMAIN.COM |
AD 域的 DNS 名称,全部为大写字母 |
myhost |
Ubuntu/Debian 虚拟机的主机名 |
MYDOMAIN |
包含 Samba 服务器的工作组或 NT 域的 DNS 名称,全部为大写字母 |
ads-hostname |
AD 服务器的主机名 |
admin-user |
AD 域管理员的用户名 |
前提条件
确认以下各项:
- 虚拟机上的 DNS 可以解析 AD 服务器。
- 虚拟机上配置了网络时间协议 (NTP)。
过程
- 在 Ubuntu/Debian 虚拟机上,安装 samba 和 winbind 软件包。
sudo apt install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind
- 配置 Kerberos 身份验证设置。
- 如果 Kerberos 身份验证设置窗口未在系统中显示,请运行以下命令以显示该窗口。
sudo dpkg-reconfigure krb5-config
- 对于 Default Kerberos version 5 realm (默认 Kerberos 版本 5 领域),请输入 AD 域的 DNS 名称(全部为大写字母)。
例如,如果 AD 域名为
mydomain.com,请输入
MYDOMAIN.COM。
- 对于 Kerberos servers for your realm (领域的 Kerberos 服务器),请输入 AD 服务器的主机名(在该过程的示例中表示为 ads_hostname)。
- 对于 Administrative server for your Kerberos realm (Kerberos 领域的管理服务器),再次输入 AD 服务器的主机名。
- 更新 PAM 配置。
- 打开 PAM 配置页面。
- 选择 Create home directory on login (在登录时创建主目录),然后选择 Ok (确定)。
- 按照下例所示编辑 /etc/nsswitch.conf 配置文件。
passwd: compat winbind
group: compat winbind
shadow: compat
gshadow: files
- (可选) 如果系统自动检测到正确的 DNS 服务器,请跳过此步骤并继续执行下一步。如果系统无法检测到正确的 DNS 服务器,请完成此步骤以手动设置 DNS 服务器。
要确保自动生成的
resolv.conf 文件将 AD 域引用为搜索域,请编辑系统连接的 NetworkManager 设置。以下子步骤提供了适用于 Ubuntu 20.04 系统的示例操作说明。
- 打开 NetworkManager 控制面板,然后导航到系统连接的 IPv4 Settings (IPv4 设置)。对于 Method (方法),请选择 Automatic (DHCP) addresses only (仅自动 (DHCP) 地址)。在 DNS servers (DNS 服务器) 文本框中,输入 DNS 名称服务器的 IP 地址(在该过程的示例中表示为 dns_IP_ADDRESS)。然后,单击 Save (保存)。
- 编辑 /etc/dhcp/dhclient.conf 文件,如以下示例中所示。
supersede domain-name "mydomain.com";
prepend domain-name-servers dns_IP_ADDRESS;
- 编辑 /etc/systemd/resolved.conf 文件,如以下示例中所示。
DNS=dns_IP_ADDRESS
Domains="mydomain.com"
注: 在创建新的即时克隆虚拟桌面时,将添加新的虚拟网络适配器。将网络适配器添加到克隆的虚拟桌面时,虚拟桌面模板将清除网络适配器(如 DNS 服务器)的设置。要在添加新网络适配器时保留 DNS 服务器设置,您必须为虚拟机指定 DNS 服务器。
- 编辑 /etc/resolv.conf 配置文件以指定 DNS 服务器,如以下示例中所示。如果显示警告,您可以忽略警告并继续进行更改。
nameserver dns_IP_ADDRESS
search mydomain.com
- 重新启动虚拟机,然后重新登录。
- 编辑 /etc/hosts 配置文件,如以下示例中所示。
127.0.0.1 localhost
127.0.1.1 myhost.mydomain.com myhost
- 编辑 /etc/samba/smb.conf 配置文件,如以下示例中所示。
[global]
security = ads
realm = MYDOMAIN.COM
workgroup = MYDOMAIN
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%D/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = yes
winbind use default domain = yes
restrict anonymous = 2
kerberos method = secrets and keytab
winbind refresh tickets = true
- 重新启动 smbd服务。
sudo systemctl restart smbd.service
- 编辑 /etc/krb5.conf 配置文件,以使其具有类似于以下示例的内容。
[libdefaults]
default_realm = MYDOMAIN.COM
dns_lookup_realm = true
dns_lookup_kdc = true
[realms]
MYDOMAIN.COM = {
kdc = ads-hostname
admin_server = ads-hostname
}
[domain_realm]
.mydomain.com = MYDOMAIN.COM
mydomain.com = MYDOMAIN.COM
- 将 Ubuntu/Debian 虚拟机加入 AD 域。
- 启动 Kerberos 票证。
sudo kinit admin-user
在出现提示时,输入管理员密码。
- 确认已成功创建票证。
sudo klist
该命令返回有关票证的信息,包括有效期开始时间和到期时间。
- 创建一个 Kerberos keytab 文件。
sudo net ads keytab create -U admin-user
- 加入 AD 域。
sudo net ads join -U admin-user
- 重新启动并验证 Winbind 服务。
- 重新启动 Winbind 服务。
sudo systemctl restart winbind.service
- 要验证 Winbind 服务,请运行以下命令并检查是否返回正确的输出。
- sudo wbinfo -u
- sudo wbinfo -g
- sudo getent passwd
- sudo getent group
- 重新启动虚拟机,然后重新登录。