要在 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)。

过程

  1. 在 Ubuntu/Debian 虚拟机上,安装 sambawinbind 软件包。
    sudo apt install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind
  2. 配置 Kerberos 身份验证设置。
    1. 如果 Kerberos 身份验证设置窗口未在系统中显示,请运行以下命令以显示该窗口。
      dpkg-reconfigure krb5-config
    2. 对于 Default Kerberos version 5 realm (默认 Kerberos 版本 5 领域),请输入 AD 域的 DNS 名称(全部为大写字母)。
      例如,如果 AD 域名为 mydomain.com,请输入 MYDOMAIN.COM
    3. 对于 Kerberos servers for your realm (领域的 Kerberos 服务器),请输入 AD 服务器的主机名(在该过程的示例中表示为 ads_hostname)。
    4. 对于 Administrative server for your Kerberos realm (Kerberos 领域的管理服务器),再次输入 AD 服务器的主机名。
  3. 更新 PAM 配置。
    1. 打开 PAM 配置页面。
      pam-auth-update
    2. 选择 Create home directory on login (在登录时创建主目录),然后选择 Ok (确定)
  4. 按照下例所示编辑 /etc/nsswitch.conf 配置文件。
    passwd: compat winbind
    group: compat winbind
    shadow: compat
    gshadow: files
  5. (可选) 如果系统自动检测到正确的 DNS 服务器,请跳过此步骤并继续执行下一步。如果系统无法检测到正确的 DNS 服务器,请完成此步骤以手动设置 DNS 服务器。
    要确保自动生成的 resolv.conf 文件将 AD 域引用为搜索域,请编辑系统连接的 NetworkManager 设置。以下子步骤提供了适用于 Ubuntu 20.04 系统的示例操作说明。
    1. 打开 NetworkManager 控制面板,然后导航到系统连接的 IPv4 Settings (IPv4 设置)。对于 Method (方法),请选择 Automatic (DHCP) addresses only (仅自动 (DHCP) 地址)。在 DNS servers (DNS 服务器) 文本框中,输入 DNS 名称服务器的 IP 地址(在该过程的示例中表示为 dns_IP_ADDRESS)。然后,单击 Save (保存)
    2. 编辑 /etc/dhcp/dhclient.conf 文件,如以下示例中所示。
      supersede domain-name "mydomain.com";
      prepend domain-name-servers dns_IP_ADDRESS;
    3. 编辑 /etc/systemd/resolved.conf 文件,如以下示例中所示。
      DNS=dns_IP_ADDRESS
      Domains="mydomain.com"
      注: 在创建新的即时克隆虚拟桌面时,将添加新的虚拟网络适配器。将网络适配器添加到克隆的虚拟桌面时,虚拟桌面模板将清除网络适配器(如 DNS 服务器)的设置。要在添加新网络适配器时保留 DNS 服务器设置,您必须为虚拟机指定 DNS 服务器。
    4. 编辑 /etc/resolv.conf 配置文件以指定 DNS 服务器,如以下示例中所示。如果显示警告,您可以忽略警告并继续进行更改。
      nameserver dns_IP_ADDRESS
      
      search mydomain.com
    5. 重新启动虚拟机,然后重新登录。
  6. 编辑 /etc/hosts 配置文件,如以下示例中所示。
    127.0.0.1     localhost
    127.0.1.1     myhost.mydomain.com myhost
  7. 编辑 /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
  8. 重新启动 smbd服务。
    sudo systemctl restart smbd.service
  9. 编辑 /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
    
  10. 将 Ubuntu/Debian 虚拟机加入 AD 域。
    1. 启动 Kerberos 票证。
       sudo kinit admin-user
      在出现提示时,输入管理员密码。
    2. 确认已成功创建票证。
      sudo klist
      该命令返回有关票证的信息,包括有效期开始时间和到期时间。
    3. 创建一个 Kerberos keytab 文件。
      sudo net ads keytab create -U admin-user
    4. 加入 AD 域。
      sudo net ads join -U admin-user
  11. 重新启动并验证 Winbind 服务。
    1. 重新启动 Winbind 服务。
      sudo systemctl restart winbind.service 
    2. 要验证 Winbind 服务,请运行以下命令并检查是否返回正确的输出。
      • wbinfo -u
      • wbinfo -g
      • getent passwd
      • getent group
  12. 重新启动虚拟机,然后重新登录。

下一步做什么

在 Ubuntu/Debian 桌面上配置 True SSO