跳至主内容

将终端加入Active Directory

在Active Directory中,每个用户都被设置为中央数据库中的唯一对象,且仅使用一组凭证。每个计算机系统也会创建独立对象。凭借同一组凭证,用户可自动登录所有工作站。账户变更只需在中央数据库操作一次。通过组和组织单位,可设置并实时更新对不同资源的访问权限。

本节提供将Linux和macOS系统加入Active Directory的指导。

注意

对于Linux终端,请确保在开始Active Directory加入流程前先查阅 先决条件 页面。

若遇到任何问题,请参考 故障排除 章节获取详细信息。

Linux

将Linux系统加入Active Directory的先决条件

要将Linux计算机加入Active Directory(AD)域,需满足若干先决条件。

以下章节详述了必要的先决条件。

示例 :

领域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 日期时间必须与Active Directory保持一致。

    确保计算机与Active Directory时间同步。许多认证错误源于时间差异。

  2. 虚拟机必须将Active Directory服务器设为DNS。

    可通过 应用程序 > 网络 > 选项 > IPv4设置 .

    方法:仅自动(DHCP)地址

    自动:关闭

    DNS服务器:11.11.11.11

    DNS: 11.11.11.11

    AD_join_procedure_prerequisites_image_1_en.png
    AD_join_procedure_prerequisites_image_2_en.png

    注意

    或者您也可以将以下行添加到 /etc/resolv.conf :

    search example.local
    
    nameserver 11.11.11.11
  3. 确保网络和防火墙已开放Active Directory和Kerberos使用的端口。所需端口见下表:

    端口

    方向

    目标

    描述

    22, 445 (SSH & SMB)

    出站

    任意

    检测本地网络中的计算机

    135 (RPC)

    入站

    任意

    通过中继代理部署

    137, 138, 139 (NetBIOS)

    入站

    任意

    通过中继代理部署

    53 (DNS)

    出站

    DNS服务器

    内部DNS查询使用

    88 (Kerberos)

    出站

    Active Directory域控制器

    Linux计算机的Active Directory集成

    389, 636端口(LDAP及LDAPS协议)

    出站

    Active Directory域控制器

    Active Directory集成

  4. 确保操作系统主机名唯一且不超过15个字符。

    • 执行以下命令修改主机名:

      # hostnamectl set-hostname <名称>
    • /etc/hostname 文件中删除旧名称并替换为新名称。

      注意

      CentOS 6系统中需替换旧HOSTNAME值为新值:

      # vi /etc/sysconfig/network
      NETWORKING=yes
      HOSTNAME=<名称>
    • 重启计算机

      注意

      终端主机名不得包含FQDN部分。

  5. 禁用 Selinux .

    修改配置文件中的SELINUX变量值: /etc/selinux/config 以实现禁用。

    SELINUX=disabled
  6. 修改 /etc/nsswitch.conf 文件。

    通过添加条目调整 hosts 数据库的查询顺序 dns文件 :

    hosts:          files dns mdns4_minimal [NOTFOUND=return]

使用PBIS将Linux终端加入Active Directory

要通过PBIS将Linux终端加入Active Directory (AD)域,需遵循以下步骤并满足 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11

重要提示

部分操作系统(Fedora31、CentOS8)需安装 libsnsl 软件包。

如何离线安装PBIS-Open

  1. .sh 下载最新 此处 并执行以下命令:

    • 适用于Ubuntu、Debian。

      • x64架构

        # wget https://github.com/BeyondTrust/pbis-open/releases/download/9.1.0/pbis-open-9.1.0.551.linux.x86_64.deb.sh
        # chmod +x pbis-open-9.1.0.551.linux.x86_64.deb.sh
        # sudo ./pbis-open-9.1.0.551.linux.x86_64.deb.sh
        # apt-get install ssh
        # sudo apt-get remove avahi-daemon
      • x86架构

        # wget https://github.com/BeyondTrust/pbis-open/releases/download/9.1.0/pbis-open-9.1.0.551.linux.x86.deb.sh
        # chmod +x pbis-open-9.1.0.551.linux.x86.deb.sh
        # sudo ./pbis-open-9.1.0.551.linux.x86.deb.sh
        # apt-get install ssh
        # sudo apt-get remove avahi-daemon
    • 适用于CentOS、Fedora、OracleLinux7、RHEL、SUSE。

      • x64架构

        # wget https://github.com/BeyondTrust/pbis-open/releases/download/9.1.0/pbis-open-9.1.0.551.linux.x86_64.rpm.sh
        # chmod +x pbis-open-9.1.0.551.linux.x86_64.rpm.sh
        # sudo ./pbis-open-9.1.0.551.linux.x86_64.rpm.sh
      • x86架构

        # wget https://github.com/BeyondTrust/pbis-open/releases/download/9.1.0/pbis-open-9.1.0.551.linux.x86.rpm.sh
        # chmod +x pbis-open-9.1.0.551.linux.x86.rpm.sh
        # sudo ./pbis-open-9.1.0.551.linux.x86.rpm.sh
  2. 加入Active Directory域。

    # cd /opt/pbis/bin/
    # sudo domainjoin-cli join example.local administrator

    注意

    验证 ./pbis-open*.sh 的输出并检查可能的错误。

  3. 检查域连接状态。

    # sudo domainjoin-cli query

使用SSSD将Linux终端加入Active Directory

本节适用于以下操作系统:

为CentOS6使用SSSD加入Active Directory

要使用SSSD将Linux终端加入Active Directory(AD)域,需遵循以下步骤并满足 通用先决条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 成功将CentOS6加入Active Directory需安装以下软件包:

    # yum install adcli krb5-workstation sssd pam_krb5
  2. 通过以下命令更改认证提供方:

    # authconfig \
     --enablekrb5 \
     --krb5kdc=example.local \
     --krb5adminserver=example.local \
     --krb5realm=EXAMPLE.LOCAL \
     --enablesssd \
     --enablesssdauth \
     --update
  3. 运行以下命令加入Active Directory:

    adcli join example.local -v
  4. 通过创建旧文件备份来配置 sssd.conf /etc/sssd/sssd.conf 并用以下内容覆盖原文件:

    [sssd]
    域 = example.local
    配置文件版本 = 2
    服务 = nss, pam
     
    [域/example.local]
    ad域 = example.local
    krb5域 = EXAMPLE.LOCAL
    域标签 = 管理系统 通过samba加入
    缓存凭证 = True
    身份提供者 = ad
    离线时存储krb5密码 = True
    默认shell = /bin/bash
    ldap ID映射 = True
    使用完全限定名称 = False
    回退主目录 = /home/%d/%u
    访问提供者 = ad

    将文件权限设置为 600 .

    # chmod 600 /etc/sssd/sssd.conf
    
    # service sssd start
    
    # chkconfig sssd on
  5. 配置 krb5.conf 文件时,先备份旧的 /etc/krb5.conf 并用以下内容覆盖:

    [默认库]
        默认域 = EXAMPLE.LOCAL
        DNS查找KDC = true
        可转发 = true
        默认凭证缓存 = FILE:/tmp/krb5cc_%{uid}
    [域]
        EXAMPLE.LOCAL = {
            管理服务器 = EXAMPLE.LOCAL
            #KDC = dc1.EXAMPLE.LOCAL
            #KDC = dc2.EXAMPLE.LOCAL
        }
    [日志]
        KDC = FILE:/var/log/krb5/krb5kdc.log
        管理服务器 = FILE:/var/log/krb5/kadmind.log
        默认 = SYSLOG:NOTICE:DAEMON
    [域映射]
        .EXAMPLE.LOCAL = EXAMPLE.LOCAL
        EXAMPLE.LOCAL = EXAMPLE.LOCAL
  6. 通过运行以下命令检查域连接并确保一切正常:

    # dig -t SRV _ldap._tcp.example.local
    # dig -t SRV _ldap._tcp.dc._msdcs.example.local
    # adcli info example.local
    # id administrator

使用SSSD将Linux终端加入Active Directory(适用于CentOS7/8、Fedora31、RHEL7/8、OracleLinux7)

要使用SSSD将Linux终端加入Active Directory(AD)域,需遵循以下步骤并满足 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 安装必要软件包:

    • Centos7/8、Fedora31和RHEL8需要以下软件包:

      # yum install adcli krb5-workstation realmd sssd
    • Oracle Linux7和RHEL7需要以下软件包:

      # yum install samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
  2. 运行以下命令加入Active Directory域。

    # realm join example.local -U administrator
  3. 通过运行以下命令检查域连接状态。

    # dig -t SRV _ldap._tcp.example.local
    # dig -t SRV _ldap._tcp.dc._msdcs.example.local
    # realm discover example.local
    # realm list

使用SSSD将Ubuntu/Debian系统的Linux终端加入Active Directory

要通过SSSD将Linux终端加入Active Directory(AD)域,需遵循以下步骤并满足 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 安装必要软件包。

    # sudo apt install sssd-ad sssd-tools realmd adcli

    注意

    Ubuntu14系统需额外安装软件包。

    # sudo apt-get install packagekit
  2. 运行以下命令加入Active Directory域。

    # sudo realm -v join example.local
  3. 通过运行以下命令检查域连接状态。

    # dig -t SRV _ldap._tcp.example.local 
    
    # dig -t SRV _ldap._tcp.dc._msdcs.example.local 
    
    # sudo realm -v discover example.local 
    
    # realm list

使用SSSD将SUSE Linux Enterprise 12/15系统的Linux终端加入Active Directory

要通过SSSD将SUSE系统的Linux终端加入Active Directory(AD)域,需遵循以下步骤并满足 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:   11.11.11.11
  1. 安装必要软件包。

    • 安装 krb5-client .

      # zypper in krb5-client
    • 安装以下软件包。

      # zypper in adcli sssd sssd-ldap sssd-ad sssd-tools
  2. 备份旧的 /etc/krb5.conf 并用以下内容覆盖:

    [libdefaults]
        default_realm = EXAMPLE.LOCAL
        dns_lookup_kdc = true
        forwardable = true
        default_ccache_name = FILE:/tmp/krb5cc_%{uid}
    [realms]
        EXAMPLE.LOCAL = {
            admin_server = EXAMPLE.LOCAL
            #kdc = dc1.EXAMPLE.LOCAL
            #kdc = dc2.EXAMPLE.LOCAL
        }
    [logging]
        kdc = FILE:/var/log/krb5/krb5kdc.log
        admin_server = FILE:/var/log/krb5/kadmind.log
        default = SYSLOG:NOTICE:DAEMON
    [domain_realm]
        .EXAMPLE.LOCAL = EXAMPLE.LOCAL
        EXAMPLE.LOCAL = EXAMPLE.LOCAL
  3. 配置 sssd.conf 文件,先备份旧的 /etc/sssd/sssd.conf 并用以下内容覆盖:

    [sssd]
    config_file_version = 2
    services = nss,pam
    domains = example.local
     
    [nss]
    filter_users = root
    filter_groups = root
     
    [pam]
     
    [domain/example.local]
    id_provider = ad
    auth_provider = ad
    ad_domain = example.local
    cache_credentials = true
    enumerate = false
    override_homedir = /home/%d/%u
    ldap_id_mapping = true
    ldap_referrals = false
    ldap_schema = ad

    将文件权限设置为 600 .

    # chmod 600 /etc/sssd/sssd.conf
  4. 配置 nsswitch.conf 文件

    passwd:     compat sss
    group:        compat sss
  5. 运行以下命令加入Active Directory域:

    # adcli join -D example.local
  6. 启用并启动 sssd 守护进程。

    # systemctl enable sssd
    # systemctl start sssd
  7. 配置LDAP客户端

    • 安装必要的软件包。

      # zypper 安装 openldap2-client cyrus-sasl-gssapi
    • 将以下内容添加到 /etc/openldap/ldap.conf .

      URI ldap://example.local
      BASE dc=example,dc=local
      REFERRALS OFF
  8. 通过执行以下命令检查域连接性:

    # ldapsearch -Y GSSAPI cn=Administrator
    # adcli info example.local
    # id administrator
    # getent passwd administrator

使用Winbind将Linux终端加入Active Directory

本节涵盖以下操作系统的配置指南:

在CentOS6/RHEL7上使用Winbind加入Active Directory

要通过Winbind将Linux终端加入Active Directory(AD)域,需遵循以下步骤并满足 通用先决条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 安装必要软件包。

    # yum -y 安装 samba4-winbind samba4-winbind-clients pam_krb5 krb5-libs
  2. 执行以下命令更改认证提供方:

    # authconfig \
     --enablekrb5 \
     --krb5kdc=example.local \
     --krb5adminserver=example.local \
     --krb5realm=EXAMPLE.LOCAL \
     --enablewinbind \
     --enablewinbindauth \
     --smbsecurity=ads \
     --smbrealm=EXAMPLE.LOCAL \
     --smbservers=example.local \
     --smbworkgroup=example\
     --winbindtemplatehomedir=/home/%U \
     --winbindtemplateshell=/bin/bash \
     --enablemkhomedir \
     --enablewinbindusedefaultdomain \
     --update
  3. 配置 nsswitch.conf 文件,在 /etc/nsswitch.conf 文件中启用以下参数:

    passwd: compat winbind
    group: compat winbind
  4. 加入Active Directory域。

    • 创建Kerberos密钥表文件:

      # sudo net ads keytab create -U administrator
    • 启动Winbind服务

      # service winbind start
      # chkconfig winbind on
    • 运行以下命令

      #  net ads join -U administrator -v
      输入administrator的密码:
      使用短域名 -- EXAMPLE
      已将'Ubuntu20-VM'加入DNS域'example.local'
      未为Ubuntu20-VM配置DNS域。无法执行DNS更新。
      DNS更新失败!

      重要提示

      即使上述消息显示DNS更新失败,请注意DNS已正确更新,您应忽略此错误信息。

  5. 通过运行以下命令检查域连接:

    # wbinfo -u

使用Winbind将Linux终端加入Active Directory(适用于CentOS7/8、Fedora31、RHEL8、OracleLinux7)

要使用Winbind将Linux终端加入Active Directory(AD)域,您需要按照以下步骤操作,并同时满足 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:   11.11.11.11
  1. 安装必要的软件包。

    # yum install samba samba-client samba-winbind samba-winbind-client
  2. 配置 smb.conf 文件。

    备份旧的 /etc/samba/smb.conf 并用以下内容覆盖:

    [global]
            workgroup = EXAMPLE
            realm = EXAMPLE.LOCAL
            security = ads
            idmap config * : backend = autorid
            idmap config * : range = 100000-19999999
            idmap config * : rangesize = 1000000
            template homedir = /home/%D/%U
            template shell = /bin/bash
            winbind use default domain = false
            winbind offline logon = true
            log file = /var/log/samba/log.%m
            max log size = 50
            log level = 0 
            kerberos method = secrets and keytab
  3. 加入Active Directory域。

    • 创建Kerberos krb5.keytab 文件:

      # sudo net ads keytab create -U administrator
    • 启用Winbind服务。

      # systemctl enable winbind --now
    • 运行以下命令。

      # net ads join -U Administrator --no-dns-updates example.local
  4. 通过运行以下命令检查域连接状态。

    # host -t SRV _kerberos._udp.example.local
    
    # host -t SRV _kerberos._tcp.example.local
    
    # testparm
    
    # wbinfo -u
    
    # wbinfo -g

使用Winbind将Linux终端加入Active Directory(SUSE Linux Enterprise 12,15版)

要通过Winbind将Linux终端加入Active Directory(AD)域(SUSE系统),需遵循以下步骤并满足 通用先决条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 安装必要软件包。

    • 安装 krb5 客户端。

      # zypper in krb5-client
  2. 配置Kerberos客户端。

    备份旧版 /etc/krb5.conf 并用以下内容覆盖:

    [libdefaults]
        default_realm = EXAMPLE.LOCAL
        dns_lookup_kdc = true
        forwardable = true
        default_ccache_name = FILE:/tmp/krb5cc_%{uid}
    [realms]
        EXAMPLE.LOCAL = {
            admin_server = EXAMPLE.LOCAL
            #kdc = dc1.EXAMPLE.LOCAL
            #kdc = dc2.EXAMPLE.LOCAL
        }
    [logging]
        kdc = FILE:/var/log/krb5/krb5kdc.log
        admin_server = FILE:/var/log/krb5/kadmind.log
        default = SYSLOG:NOTICE:DAEMON
    [domain_realm]
        .EXAMPLE.LOCAL = EXAMPLE.LOCAL
        EXAMPLE.LOCAL = EXAMPLE.LOCAL
  3. 安装以下软件包:

    # zypper in samba-client samba-libs samba-winbind
  4. 配置 smb.conf 文件。

    • 备份旧版 /etc/samba/smb.conf 并用以下内容覆盖:

      [全局]
          工作组 = EXAMPLE
          Kerberos方法 = secrets and keytab
          领域 = EXAMPLE.LOCAL
          安全 = ADS
      
          winbind刷新票据 = 是
          winbind使用默认域 = 是
          模板shell = /bin/bash
          模板主目录 = /home/%D/%U
      
          idmap配置 * : 后端 = tdb
          idmap配置 * : 范围 = 10000-19999
          idmap配置 EXAMPLE: 后端 = rid
          idmap配置 EXAMPLE: 范围 = 20000-29999
    • 将文件权限设置为 600 .

      # chmod 600 /etc/samba/smb.conf
  5. 配置 nsswitch.conf 文件。

    /etc/nsswitch.conf 文件中启用参数:

    passwd: compat winbind
    group: compat winbind
  6. 通过运行以下命令建立与Kerberos的连接。

    # kinit Administrator
  7. 通过运行以下命令加入Active Directory域。

    #net ads join -U Administrator
  8. 通过运行以下命令启用并启动Winbind守护进程。

    # systemctl enable winbind
    # systemctl start winbind
  9. 配置LDAP客户端。

    • 安装必要的软件包。

      zypper in openldap2-client cyrus-sasl-gssapi
    • 将以下行添加到 /etc/openldap/ldap.conf .

      URI ldap://example.local
      BASE dc=example,dc=local
      REFERRALS OFF
  10. 通过运行以下命令检查域连接性。

    # ldapsearch -Y GSSAPI cn=Administrator
    
    # net ads info
    
    # id administrator
    
    # getent passwd administrator

使用Winbind将Linux终端加入Active Directory(适用于Ubuntu、Debian)

要使用Winbind将Linux终端加入Active Directory(AD)域,您需要按照以下步骤操作,并同时遵守 通用前提条件 .

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
  1. 安装以下软件包。

    # sudo apt install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind

    使用全大写字母输入域名:

    join_activedirectory_ubuntu_debian_kerberos_auth_en.png

    将Kerberos服务器字段留空。

    join_activedirectory_ubuntu_debian_configuring_kerberos_auth_en.png

    将Kerberos域的管理服务器字段留空。

    join_activedirectory_ubuntu_debian_configuring_kerberos_auth_2en.png
  2. 配置 PAM 通过运行以下命令并启用“ 登录时创建主目录 ”.

    # sudo pam-auth-update
    join_activedirectory_ubuntu_debian_pam_auth_en.png

    重要提示

    此命令不适用于Debian和Ubuntu14系统。

  3. 配置 nsswitch.conf 文件并在 /etc/nsswitch.conf 文件中启用参数。

    passwd:     compat winbind
    group:        compat winbind
  4. 配置 smb.conf 文件。

    • 备份旧版 /etc/samba/smb.conf 并用以下内容覆盖:

      [global]
      
      workgroup = EXAMPLE
      security = ads
      realm = EXAMPLE.LOCAL
      encrypt passwords = yes
      winbind use default domain = yes
      winbind refresh tickets = true
      template homedir = /home/%D/%U
      template shell = /bin/bash
      kerberos method = secrets and keytab
    • 重启samba服务。

      # systemctl restart smbd.service
  5. 配置 krb5.conf 文件。先备份 旧的/etc/krb5.conf文件 并将其内容替换为:

    [libdefaults]
           default_realm = EXAMPLE.LOCAL
           dns_lookup_realm = true
           dns_lookup_kdc = true
           dns_fallback = yes
    [realms]
           EXAMPLE.LOCAL = {
                 kdc = example.local
                 default_domain = example.local
           }
    [domain_realm]
           .EXAMPLE.LOCAL = EXAMPLE.LOCAL
           EXAMPLE.LOCAL = EXAMPLE.LOCAL
  6. 加入Active Directory域。

    • 初始化Kerberos票据并验证。

      # sudo kinit administrator
    • 创建Kerberos密钥表文件。

      # sudo net ads keytab create -U administrator
    • 将计算机加入Active Directory:

      # sudo net ads join -U administrator
    • 重启samba服务。

      # systemctl restart smbd.service
  7. 运行以下命令检查域连接状态:

    # wbinfo -u
    
    # wbinfo -g
    
    # getent passwd
    
    # getent group
    
    # wbinfo -i administrator

注意

DNS更新失败:NT_STATUS_INVALID_PARAMETER 并非错误。

计算机已成功加入Active Directory。

故障排除

本节包含以下内容的指导:

PBIS Active Directory域加入过程故障排除

本节列出PBIS Active Directory域加入过程中可能遇到的错误。

示例:

域: example.local
域用户: administrator
域IP: 11.11.11.11
错误: ERROR_GEN_FAILURE [代码 0x0000001f]

domainjoin-cli 命令可能因存在 avahi-daemon 包而失败。

# domainjoin-cli join example.local administrator
加入AD域:   example.local
计算机DNS名称: user.example.local

administrator@EXAMPLE.LOCAL的密码:

错误: ERROR_GEN_FAILURE [代码 0x0000001f]
解决方案
  • 移除 avahi-daemon

    # sudo apt-get remove avahi-daemon
错误: 无效主机名 [代码 0x000004ba]

domainjoin-cli 命令可能因主机名配置错误而失败。

# cd /opt/pbis/bin/
# sudo domainjoin-cli join example.local administrator
错误: 无效主机名 [代码 0x000004ba]
主机名不能为'linux'或'localhost'。
解决方案
  • 通过运行以下命令更改主机名:

    # hostnamectl set-hostname <名称>
  • /etc/hostname 中删除旧名称并替换为新名称。

  • /etc/hosts .

  • 重启端点。

错误: 模块未配置 [代码 0x000003eb]

domainjoin-cli 命令可能因主机名配置错误而执行失败。

# cd /opt/pbis/bin/
# sudo domainjoin-cli join example.local administrator
正在加入AD域:   example.local
计算机DNS名称: bdvm-c6x64.example.local
 
administrator@EXAMPLE.LOCAL的密码:
 
错误: 模块未配置 [代码 0x000003eb]
 
尽管已执行'hostname'配置,但配置尚未完成。请联系技术支持。
解决方案
  • 通过运行以下命令更改主机名:

    # hostnamectl set-hostname <名称>
  • etc/hostname 中删除旧名称并替换为新名称。

  • 将所有出现的端点名称从 /etc/hosts .

  • 重启端点。

错误: BeyondTrust AD Bridge Open需要库文件libnsl.so.1;请在安装AD Bridge前先安装libnsl.so.1。

执行 .sh 文件可能因缺少 libnsl.so.1 库而失败。

# ./pbis-open-9.1.0.551.linux.x86_64.rpm.sh
创建目录 pbis-open-9.1.0.551.linux.x86_64.rpm
验证归档完整性... 全部正常。
解压 pbis-open-9.1.0.551.linux.x86_64.rpm..........
正在安装软件包,旧包将被移除
警告: /home/pbis-open-9.1.0.551.linux.x86_64.rpm/./packages/pbis-open-upgrade-9.1.0-551.x86_64.rpm: 头V3 DSA/SHA1签名,密钥ID c9ceecef: NOKEY
验证中...                          ################################# [100%]
准备中...                          ################################# [100%]
更新/安装中...
   1:pbis-open-upgrade-9.1.0-551      ################################# [100%]
警告: /home/pbis-open-9.1.0.551.linux.x86_64.rpm/./packages/pbis-open-9.1.0-551.x86_64.rpm: 头V3 DSA/SHA1签名,密钥ID c9ceecef: NOKEY
验证中...                          ################################# [100%]
准备中...                          ################################# [100%]
BeyondTrust AD Bridge Open需要库文件libnsl.so.1;请在安装AD Bridge前先安装libnsl.so.1。
 
错误: %prein(pbis-open-9.1.0-551.x86_64)脚本执行失败,退出状态1
错误: pbis-open-9.1.0-551.x86_64: 安装失败
安装/home/pbis-open-9.1.0.551.linux.x86_64.rpm/./packages/pbis-open-9.1.0-551.x86_64.rpm时出错
安装未完成。请修正错误后重新运行/home/pbis-open-9.1.0.551.linux.x86_64.rpm/install.sh install进行安装
解决方案
  • 安装 libnsl 软件包

    #  yum install libnsl
错误: 无法下载'appstream'仓库元数据:无法准备内部镜像列表:镜像列表中没有URL

由于内部镜像列表问题无法安装软件包。

# yum install libnsl
CentOS Linux 8 - AppStream                                             118  B/s |  38  B     00:00
错误: 无法下载'appstream'仓库元数据:无法准备内部镜像列表:镜像列表中没有URL
[root@bdvm-c8x64 home]# yum install libnsl
CentOS Linux 8 - AppStream                                             512  B/s |  38  B     00:00
错误: 无法下载'appstream'仓库元数据:无法准备内部镜像列表:镜像列表中没有URL
[root@bdvm-c8x64 home]# yum update
CentOS Linux 8 - AppStream                                             437  B/s |  38  B     00:00
错误: 无法下载'appstream'仓库元数据:无法准备内部镜像列表:镜像列表中没有URL
解决方案
  • 运行以下命令:

    # cd /etc/yum.repos.d/
    # sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    # sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    # yum update -y
  • 重新安装软件包

错误:查询lwsmd时收到错误。[代码 0x00000002]

由于以下原因无法加入域 错误代码0x00000002 .

# sudo domainjoin-cli join example.local administrator
 
错误:查询lwsmd时收到错误。[代码 0x00000002]
查询lwsmd时收到错误。
解决方案
  • 检查 pbis-open*.sh 文件中与SELinux相关的提及。

    # ./pbis-open-9.1.0.551.linux.x86_64.rpm.sh
    创建目录 pbis-open-9.1.0.551.linux.x86_64.rpm
    验证归档完整性... 一切正常。
    解压 pbis-open-9.1.0.551.linux.x86_64.rpm..........
    安装软件包,旧软件包将被移除
    ...
    SELinux模式:强制
     
    此软件包未包含适当的SELinux策略[/opt/pbis/share/rhel/unknown/pbis.pp]。您可以在/opt/pbis/share/pbis.pp提供策略
     
    检测到SELinux存在、启用且处于强制模式。您可以在/opt/pbis/share/pbis.pp提供策略 --或者-- 必须通过编辑/etc/selinux/config文件并重启来禁用SELinux或将其设置为宽容模式。有关如何编辑文件以禁用SELinux的说明,请参阅SELinux手册页。
     
    没有适当的SELinux策略,BeyondTrust AD Bridge将无法安装。
     
    警告:%post(pbis-open-9.1.0-551.x86_64)脚本执行失败,退出状态1
     
    ...
  • 通过运行以下命令检查SELinux状态:

    # sestatus
    SELinux状态:                 已启用
    SELinuxfs挂载点:             /sys/fs/selinux
    SELinux根目录:               /etc/selinux
    加载的策略名称:             targeted
    当前模式:                   强制
    配置文件中的模式:           强制
    策略MLS状态:                已启用
    策略deny_unknown状态:       允许
    内存保护检查:               actual (secure)
    内核策略最大版本:           31
  • 将配置文件 /etc/selinux/config 中的SELINUX变量值修改为禁用。

    SELINUX=disabled
  • 重新运行 pbis-open*.sh 命令。

错误:ERROR_BAD_COMMAND [代码 0x00000016]

这不是错误,端点已成功加入。

# /opt/pbis/bin/domainjoin-cli join example.local administrator
正在加入AD域:   example.local
计算机DNS名称: bdvm-c8x64.example.local
 
administrator@EXAMPLE.LOCAL的密码:
警告:处理'hostname'模块时发生可恢复错误
ERROR_BAD_COMMAND [代码 0x00000016]
 
 
 
警告:需要系统重启
您的系统已首次配置为向Active Directory进行身份验证。建议重启系统以确保所有应用程序识别新设置。
 
成功
错误:DNS_ERROR_BAD_PACKET [代码 0x0000251e]
# /opt/pbis/bin/domainjoin-cli join example.local administrator
正在加入AD域:   example.local
计算机DNS名称: o7x64tl.example.local
 
administrator@EXAMPLE.LOCAL的密码:
错误:DNS_ERROR_BAD_PACKET [代码 0x0000251e]
从DNS服务器接收到错误数据包。可能请求的地址不存在。
解决方案
  • 检查域控制器是否响应ping。

    # ping example.local
  • 检查DNS是否 计算机 是否设置为域控制器的IP地址。

  • 检查 hosts 数据库的搜索顺序是否为 files ,然后 dns (位于 /etc/nsswitch.conf .

  • 将以下内容添加到 /etc/resolv.conf .

    search example.local
    nameserver 11.11.11.11

SSSD域加入过程故障排除

本节列出了SSSD加入Active Directory域过程中可能遇到的错误。

示例:

域:example.local
域用户:administrator
域IP:11.11.11.11
错误:加入域失败:无法通过RPC查找域'example.local'的DC信息:登录尝试无效。可能是由于用户名或认证信息错误。

该错误代码表示用户名或密码不正确。

# realm join example.local -U administrator -v
 * 解析:_ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查找
 * 成功发现:example.local
输入administrator的密码:
 * 所需文件:/usr/sbin/oddjobd, /usr/libexec/oddjob/mkhomedir, /usr/sbin/sssd, /usr/bin/net
 * LANG=C LOGNAME=root /usr/bin/net -s /var/cache/realmd/realmd-smb-conf.0HT7S1 -U administrator ads join example.local
输入administrator的密码:
加入域失败:无法通过RPC查找域'example.local'的DC信息:登录尝试无效。可能是由于用户名或认证信息错误。
 ! 加入域example.local失败
realm: 无法加入域:加入域example.local失败
解决方案
  • 重新运行命令并输入正确的凭据。

错误:! 在域中注册计算机失败:GDBus.Error:org.freedesktop.systemd1.UnitMasked: 单元被屏蔽。

该错误代码表示缺少软件包。

# realm join example.local -U administrator -v
 * 解析:_ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查找
 * 成功发现:example.local
输入administrator的密码:
 * 未找到文件:/usr/bin/net
 * 所需文件:/usr/sbin/oddjobd, /usr/libexec/oddjob/mkhomedir, /usr/sbin/sssd, /usr/bin/net
 * 解析所需软件包
 ! 在域中注册计算机失败:GDBus.Error:org.freedesktop.systemd1.UnitMasked: 单元被屏蔽。
realm: 无法加入域:在域中注册计算机失败。请查看诊断信息。
解决方案
  • 运行以下命令:

    # yum install samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
错误:无结果:example.local

当向Active Directory (AD)执行发现操作时,realm discover命令能解析域但未返回结果。

# sudo realm -v discover example.local
sudo: 无法解析主机user-market-2: 连接超时
 * 正在解析: _ldap._tcp.example.local
 * 正在解析: example.local
 * 无结果: example.local
example.local
  类型: kerberos
  域名: EXAMPLE.LOCAL
  域名称: example.local
  已配置: 否
解决方案

解决问题步骤:

  • 检查虚拟机是否与Active Directory保持日期时间同步。

  • 设置与Active Directory相同的时区、日期和时间。

  • 检查域控制器是否响应ping请求。

    # ping example.local
  • 检查 计算机 的DNS是否设置为域控制器的IP地址。

  • 检查 hosts 数据库的 files 搜索顺序是否为 dns/etc/nsswitch.conf .

    hosts: files dns mdns4_minimal [NOTFOUND=return]
错误:realm: 未找到该域: example.local

当向Active Directory (AD)执行发现操作时,realm discover命令无法解析域。

# sudo realm -v discover example.local
sudo: 无法解析主机user-market-2: 没有那个文件或目录
 * 正在解析: _ldap._tcp.example.local
 * 正在解析: example.local
 * 无结果: example.local
realm: 未找到该域: example.local
解决方案
  • 将以下内容添加至 /etc/resolv.conf .

    search example.local
    nameserver 11.11.11.11
  • 验证 /etc/nsswitch.conf 文件中确保hosts数据库在files之后包含dns。

    hosts:      files dns myhostname
  • 执行ping命令。

    # ping example.local
错误:无法以Administrator@EXAMPLE.LOCAL身份认证:预认证失败
#  sudo realm -v join example.local
sudo: 无法解析主机user-market-2: 连接超时
 * 解析: _ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查询
 * 成功发现: example.local
Administrator密码:
 * 无条件检查软件包
 * 解析所需软件包
 * LANG=C /usr/sbin/adcli join --verbose --domain example.local --domain-realm EXAMPLE.LOCAL --domain-controller 11.11.11.--login-type user --login-user Administrator --stdin-password
 * 使用域名: example.local
 * 根据FQDN计算计算机账户名: USER-MARKET-2
 * 使用域领域: example.local
 * 向域控制器发送netlogon ping: cldap://11.11.11.11
 * 从DC.example.local接收NetLogon信息
 * 将krb5.conf片段写入/var/cache/realmd/adcli-krb5-2lGxqJ/krb5.d/adcli-krb5-conf-ophiP9
 ! 无法以Administrator@EXAMPLE.LOCAL身份认证:预认证失败
adcli: 无法连接到example.local域: 无法以Administrator@EXAMPLE.LOCAL身份认证:预认证失败
 ! 加入域失败
realm: 无法加入领域: 加入域失败
解决方案
  • 检查是否输入了正确的管理员账户密码并重新运行命令。

错误:无法在领域注册计算机: 以下软件包存在未满足的依赖关系:
# sudo realm -v join example.local
 * 解析: _ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查询
 * 成功发现: example.local
 * 无条件检查软件包
 * 解析所需软件包
 * 安装必要软件包: sssd-tools, sssd, libnss-sss, libpam-sss
 ! 无法在领域注册计算机: 以下软件包存在未满足的依赖关系:
 
sssd-tools: 依赖: libc6 (>= 2.12) 但将安装2.19-0ubuntu6.15
            依赖: libpopt0 (>= 1.14) 但将安装1.16-8ubuntu1
            依赖: libselinux1 (>= 1.32) 但将安装2.2.2-1ubuntu0.1
            依赖: libsemanage1 (>= 2.0.3) 但将安装2.2-1
            依赖: libtalloc2 (>= 2.0.4~git20101213) 但将安装2.1.5-0ubuntu0.14.04.1
            依赖: sssd-common (= 1.11.5-1ubuntu3) 但将安装1.11.8-0ubuntu0.7
 
realm: 无法加入领域: 无法在领域注册计算机。请查看诊断信息。
解决方案
  • 运行以下命令更新软件包。

    # apt update
    # sudo apt install sssd-ad sssd-tools realmd adcli
错误:KDC或领域不可达或无法解析地址

此问题出现在尝试使用SSSD将Centos6加入Active Directory时

"错误": [
        {
           "描述": "无法为keytab文件生成凭据缓存文件: default",
           "消息": "KDC或领域不可达或无法解析地址"
        }
     ],
解决方案
  • 运行以下命令:

    # authconfig \
     --enablekrb5 \
     --krb5kdc=example.local \
     --krb5adminserver=example.local \
     --krb5realm=EXAMPLE.LOCAL \
     --enablesssd \
     --enablesssdauth \
     --update
  • 检查 krb5.conf 文件。其格式应如下:

    [libdefaults]
        default_realm = EXAMPLE.LOCAL
        dns_lookup_kdc = true
        forwardable = true
        default_ccache_name = FILE:/tmp/krb5cc_%{uid}
    [realms]
        EXAMPLE.LOCAL = {
            admin_server = EXAMPLE.LOCAL
            #kdc = dc1.EXAMPLE.LOCAL
            #kdc = dc2.EXAMPLE.LOCAL
        }
    [logging]
        kdc = FILE:/var/log/krb5/krb5kdc.log
        admin_server = FILE:/var/log/krb5/kadmind.log
        default = SYSLOG:NOTICE:DAEMON
    [domain_realm]
        .EXAMPLE.LOCAL = EXAMPLE.LOCAL
        EXAMPLE.LOCAL = EXAMPLE.LOCAL
错误:无法为仓库base找到有效的baseurl

该问题出现在CentOS 6上,原因是操作系统即将终止生命周期

# yum install adcli krb5-workstation sssd
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
解决方案
  • /etc/yum.repos.d/ 目录下创建新仓库文件并添加以下内容:

    [C6.10-base]
    name=CentOS-6.10 - Base
    baseurl=http://vault.epel.cloud/6.10/os/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enabled=1
    metadata_expire=never
     
    [C6.10-updates]
    name=CentOS-6.10 - Updates
    baseurl=http://vault.epel.cloud/6.10/updates/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enabled=1
    metadata_expire=never
     
    [C6.10-extras]
    name=CentOS-6.10 - Extras
    baseurl=http://vault.epel.cloud/6.10/extras/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enabled=1
    metadata_expire=never
     
    [C6.10-contrib]
    name=CentOS-6.10 - Contrib
    baseurl=http://vault.epel.cloud/6.10/contrib/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enabled=0
    metadata_expire=never
     
    [C6.10-centosplus]
    name=CentOS-6.10 - CentOSPlus
    baseurl=http://vault.epel.cloud/6.10/centosplus/$basearch/
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enabled=0
    metadata_expire=never
  • 更新软件包后重新运行命令:

    # yum update
    
    # yum install adcli krb5-workstation sssd
错误:adcli: 无法连接域: 无法获取Kerberos票据...时钟偏差过大

当终端节点与Active Directory的日期时间不一致时会出现此问题

# adcli join example.local
Password for Administrator@EXAMPLE.LOCAL:
adcli: 无法连接example.local域: 无法获取Administrator@EXAMPLE.LOCAL的Kerberos票据: 时钟偏差过大
解决方案
  • 将终端节点的时区、日期和时间设置为与Active Directory一致

错误:gss_init_sec_context失败[杂项故障(详见文本): 时钟偏差过大]

当终端节点与Active Directory的日期时间不一致时会出现此问题

# sudo realm -v join example.local
 * 正在解析: _ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查找
 * 成功发现: example.local
 * 无条件检查软件包
 * 解析所需软件包
 * LANG=C /usr/sbin/adcli join --verbose --domain example.local --domain-realm EXAMPLE.LOCAL --domain-controller 11.11.11.11 --login-type computer --no-password
 * 使用域名: example.local
 * 从fqdn计算计算机账户名: BDVMU14X86
 * 使用域领域: example.local
 * 向域控制器发送netlogon ping: cldap://11.11.11.11
 * 从DC.example.local接收NetLogon信息
 * 将krb5.conf片段写入/var/cache/realmd/adcli-krb5-ffDXAr/krb5.d/adcli-krb5-conf-YCJvaP
 ! 无法以机器账户身份认证: BDVMU14X86: 在Kerberos数据库中未找到客户端'BDVMU14X86$@EXAMPLE.LOCAL'
adcli: 无法连接到example.local域: 无法以机器账户身份认证: BDVMU14X86: 在Kerberos数据库中未找到客户端'BDVMU14X86$@EXAMPLE.LOCAL'
 ! 无法自动加入域
Administrator密码:
 * 无条件检查软件包
 * 解析所需软件包
 * LANG=C LOGNAME=root /usr/bin/net -s /var/cache/realmd/realmd-smb-conf.PF1JS1 -U Administrator ads join example.local
输入Administrator密码:gss_init_sec_context失败,原因[杂项故障(详见文本): 时钟偏差过大]
kinit成功但ads_sasl_spnego_gensec_bind(KRB5)失败: 发生内部错误。

加入域失败: 无法连接到AD: 发生内部错误。
 ! 加入域example.local失败
realm: 无法加入领域: 加入域example.local失败
解决方案
  • 将终端的时间区域、日期和时间设置为与Active Directory相同。

错误: 无法在领域注册机器: GDBus.Error:org.freedesktop.systemd1.UnitMasked: 单元被屏蔽。

该错误是由于缺少软件包导致的。

# realm join example.local -U administrator -v
 * 正在解析: _ldap._tcp.example.local
 * 在11.11.11.11上执行LDAP DSE查找
 * 成功发现: example.local
administrator密码:
 * 找不到文件: /usr/bin/net
 * 所需文件: /usr/sbin/oddjobd, /usr/libexec/oddjob/mkhomedir, /usr/sbin/sssd, /usr/bin/net
 * 解析所需软件包
 ! 无法在领域注册机器: GDBus.Error:org.freedesktop.systemd1.UnitMasked: 单元被屏蔽。
realm: 无法加入领域: 无法在领域注册机器。请查看诊断信息。
解决方案
  • 通过运行以下命令安装缺失的软件包:

    # yum install samba-common-tools realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
错误: 无法启动System Security Services Daemon status=4 /NOPERMISSION

sssd 服务无法启动,原因是 /etc/sssd/sssd.conf 文件的权限设置不正确。

# systemctl start sssd
sssd.service 任务失败,因为控制进程退出时返回错误代码。
详情请参阅 "systemctl status sssd.service" 和 "journalctl -xe"。
# systemctl status sssd.service
● sssd.service - 系统安全服务守护进程
   已加载:已加载(/usr/lib/systemd/system/sssd.service;已启用;供应商预设:禁用)
   活动状态:失败(结果:exit-code)自 东欧夏令时 2022-09-21 22:08:34 起;5秒前
  进程:9457 ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER} (code=exited, status=4)
 主进程ID:9457 (code=exited, status=4)

9月21日 22:08:34 slesl15gia systemd[1]: 正在启动系统安全服务守护进程...
9月21日 22:08:34 slesl15gia sssd[9457]: 无法读取配置文件 /etc/sssd/sssd.conf。请确保该文件仅所有者可访问且属主为root.root。
9月21日 22:08:34 slesl15gia systemd[1]: sssd.service: 主进程退出,code=exited, status=4/NOPERMISSION
9月21日 22:08:34 slesl15gia systemd[1]: 启动系统安全服务守护进程失败。
9月21日 22:08:34 slesl15gia systemd[1]: sssd.service: 单元进入失败状态。
9月21日 22:08:34 slesl15gia systemd[1]: sssd.service: 以 'exit-code' 结果失败。
解决方案
  • 600 设置权限 /etc/sssd/sssd.conf 文件后重新运行启动命令。

    # chmod 600 /etc/sssd/sssd.conf
    # systemctl start sssd
错误:adcli: 加入域 example.local 失败:无法查找计算机账户。无法连接LDAP服务器

终端无法连接LDAP服务器。

# adcli join -D example.local -U administrator
administrator@EXAMPLE.LOCAL的密码:
adcli: 加入域 example.local 失败:无法查找计算机账户:SGIA12$: 无法连接LDAP服务器
解决方案
  • 配置LDAP客户端。

    # zypper in openldap2-client cyrus-sasl-gssapi
  • 将以下内容添加到 /etc/openldap/ldap.conf .

    URI ldap://example.local
    BASE dc=example,dc=local
    REFERRALS OFF
错误:authconfig: 认证模块 /usr/lib64/security/pam_krb5.so 缺失。认证过程可能无法正常工作。

authconfig 命令因缺少so文件而运行失败。

#  authconfig \
  --enablekrb5 \
  --krb5kdc=example.local \
  --krb5adminserver=example.local \
  --krb5realm=EXAMPLE.LOCAL \
  --enablesssd \
  --enablesssdauth \
  --update
authconfig: 认证模块 /usr/lib64/security/pam_krb5.so 缺失。认证过程可能无法正常工作。
解决方案
  • 安装缺失的软件包:

    # yum install pam5_krb
错误:警告:如果ad_gpo_access_control选项设置为强制执行模式,用户将被拒绝基于GPO的登录访问。

该错误是由于krb5.conf文件配置不完整导致的。

● sssd.service - 系统安全服务守护进程
   已加载:已加载(/usr/lib/systemd/system/sssd.service;已启用;供应商预设:禁用)
   活动状态:自2022年9月26日星期一12:15:44 EDT起活跃(运行中);2周0天前
   主PID:25700(sssd)
   任务数:4
   CGroup:/system.slice/sssd.service
           ├─25700 /usr/sbin/sssd -i --logger=files
           ├─25701 /usr/libexec/sssd/sssd_be --domain yyz.local --uid 0 --gid 0 --logger=files
           ├─25702 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
           └─25703 /usr/libexec/sssd/sssd_pam --uid 0 --gid 0 --logger=files

10月11日 10:32:59 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:识别名(DN)为[cn={8F655C32-3704-42C7-9BAD-5CC2C1A3AE55},cn=policies,cn=system,DC=yyz,DC=local]的组策略容器不可读或存在不可读/缺失属性。修复此问题需确保该AD对象具有以下可读属性:nTSecurityDescriptor、cn、gPCFileSysPath、gPCMachineExtensionNames、gPCFunctionalityVersion、flags。若您无服务器访问权限或无法修改该对象权限,可使用选项ad_gpo_ignore_unreadable = True跳过此GPO。详见'man ad_gpo_ignore_unreadable'。
10月11日 10:32:59 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:警告:若ad_gpo_access_control选项设置为强制执行模式,用户将被拒绝基于GPO的登录访问。
10月11日 10:36:35 10-10-192-49.yyz.local sssd_be[25701]:GSSAPI客户端步骤1
10月11日 10:36:35 10-10-192-49.yyz.local sssd_be[25701]:GSSAPI客户端步骤1
10月11日 10:36:35 10-10-192-49.yyz.local sssd_be[25701]:GSSAPI客户端步骤1
10月11日 10:36:35 10-10-192-49.yyz.local sssd_be[25701]:GSSAPI客户端步骤2
10月11日 10:40:31 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:识别名(DN)为[cn={8F655C32-3704-42C7-9BAD-5CC2C1A3AE55},cn=policies,cn=system,DC=yyz,DC=local]的组策略容器不可读或存在不可读/缺失属性。(内容与前述相同,此处省略重复翻译)
10月11日 10:40:31 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:警告:(内容与前述相同,此处省略重复翻译)
10月11日 10:40:54 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:识别名(DN)为[cn={8F655C32-3704-42C7-9BAD-5CC2C1A3AE55},cn=policies,cn=system,DC=yyz,DC=local]的组策略容器不可读或存在不可读/缺失属性。(内容与前述相同,此处省略重复翻译)
10月11日 10:40:54 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:警告:(内容与前述相同,此处省略重复翻译)
解决方法
  • 检查 krb5.conf 文件是否包含 [realms] 配置如下:

    [libdefaults]
           default_realm = EXAMPLE.LOCAL
           dns_lookup_realm = true
           dns_lookup_kdc = true
           dns_fallback = yes
    [realms]
           EXAMPLE.LOCAL = {
                 kdc = example.local
                 default_domain = example.local
           }
    [domain_realm]
           .EXAMPLE.LOCAL = EXAMPLE.LOCAL
           EXAMPLE.LOCAL = EXAMPLE.LOCAL
错误:kadmin: 初始化kadmin接口时,krb5.conf缺少kadmin客户端所需参数

该错误是由于 krb5.conf 文件配置不完整导致的。

# kadmin list_principals
kadmin: 初始化kadmin接口时,krb5.conf缺少kadmin客户端所需参数
解决方法
  • 检查 krb5.conf 文件是否包含 [realms] 配置如下:

    [libdefaults]
           default_realm = EXAMPLE.LOCAL
           dns_lookup_realm = true
           dns_lookup_kdc = true
           dns_fallback = yes
    [realms]
           EXAMPLE.LOCAL = {
                 kdc = example.local
                 default_domain = example.local
           }
    [domain_realm]
           .EXAMPLE.LOCAL = EXAMPLE.LOCAL
           EXAMPLE.LOCAL = EXAMPLE.LOCAL
  • 检查主机名是否已被使用。

  • 检查Active Directory中是否禁用了该终端。

错误:GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)

该错误是由于 rdns 参数缺失于 krb5.conf .

------------------------ldapsearch -Y GSSAPI cn=Administrator---------------------------------
● sssd.service - 系统安全服务守护进程
   已加载:已加载(/usr/lib/systemd/system/sssd.service;已启用;供应商预设:禁用)
   活动:自2022年10月11日星期二16:43:20 EDT起活动(运行)1分30秒
 主PID:1923(sssd)
    任务:4
   CGroup:/system.slice/sssd.service
           ├─1923 /usr/sbin/sssd -i --logger=files
           ├─1963 /usr/libexec/sssd/sssd_be --domain yyz.local --uid 0 --gid 0 --logger=files
           ├─1967 /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files
           └─1968 /usr/libexec/sssd/sssd_pam --uid 0 --gid 0 --logger=files
 
10月11日16:43:32 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:32 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:32 10-10-192-49.yyz.local sssd[be[yyz.local]][1963]: GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)
10月11日16:43:32 10-10-192-49.yyz.local sssd[nss][1967]: 请求枚举但未启用
10月11日16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:36 10-10-192-49.yyz.local sssd[be[yyz.local]][1963]: GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)
10月11日16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
10月11日16:43:36 10-10-192-49.yyz.local sssd[be[yyz.local]][1963]: GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)
解决方法
  • 添加 rnds=falsekrb5.conf 文件

    [libdefaults]
           默认领域 = EXAMPLE.LOCAL
           DNS查找领域 = true
           DNS查找KDC = true
           DNS回退 = 是
           rdns = false
    [realms]
           EXAMPLE.LOCAL = {
                 KDC = example.local
                 默认域 = example.local
           }
    [domain_realm]
           .EXAMPLE.LOCAL = EXAMPLE.LOCAL
           EXAMPLE.LOCAL = EXAMPLE.LOCAL

Winbind域加入过程故障排除

本节列出了Winbind加入Active Directory域过程中可能遇到的错误。

示例:

领域:example.local
域用户:administrator
域IP:11.11.11.11
错误:无法为密钥表文件生成凭据缓存文件:default

终端主机名最多只能包含15个字符。

# net ads join -U administrator
我们的NetBIOS名称最多15个字符,"MAC-00-50-56-A9-06-E1"有21个字符
配置无效。正在退出...
加入域失败:指定的计算机名称格式无效。
解决方案
  • 更改主机名。

错误:未为suse15-user配置DNS域。无法执行DNS更新。

加入Active Directory时,net命令有时无法更新DNS。

# net ads join -U administrator
输入administrator的密码:
使用短域名 -- EXAMPLE
已将'SUSE15-USER'加入DNS域'example.local'
未为suse15-user配置DNS域。无法执行DNS更新。
DNS更新失败:NT_STATUS_INVALID_PARAMETER
解决方案
  • 将机器的IP和FQDN添加到 etc/hosts 文件中。

    12.12.12.12     suse15-name.example.local     suse15-name
  • 重新运行命令。

  • 或者您可以使用 --no-dns-update 参数运行命令。

错误:指定的计算机名称格式无效。
当主机名超过15个字符时会出现此问题。
# net ads join -U administrator
我们的NetBIOS名称最多15个字符,"MAC-XX-XX-XX-XX-XX-XX"有21个字符
配置无效。正在退出...
加入域失败:指定的计算机名称格式无效。
解决方案
  • 通过运行以下命令更改主机名。

    # systemctl set-hostname <名称>
  • /etc/hostname 中删除旧名称并替换为新名称。

  • 将所有出现的端点名称从 /etc/hosts .

  • 重启端点设备。

错误:未配置DNS域。无法执行DNS更新

加入Active Directory时,有时 net 命令无法更新DNS。

# net ads join -U administrator
输入管理员密码:
使用短域名 -- SAMDOM
已将'AD-Member'加入DNS域'samdom.example.com'
未为AD-Member配置DNS域。无法执行DNS更新。
DNS更新失败:NT_STATUS_INVALID_PARAMETER
解决方案
  • 将机器的IP和FQDN添加到 /etc/hosts 文件中。

    12.12.12.12    AD-Member.samdom.example.com     AD-Member
  • 重新运行命令。

  • 或者可以使用 --no-dns-update 参数运行命令。

错误:E: 软件包'krb5-config'没有可安装候选

无法安装 krb5-config 软件包。

# sudo apt install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind
读取软件包列表... 完成
构建依赖树
读取状态信息... 完成
软件包krb5-config不可用,但被另一个软件包引用。
这可能意味着该软件包缺失、已被废弃,或
只能从其他来源获取
E: 软件包'krb5-config'没有可安装候选
 
# sudo apt install samba krb5-user winbind libpam-winbind libnss-winbind
读取软件包列表... 完成
构建依赖树
读取状态信息... 完成
无法安装某些软件包。这可能意味着您要求了
一个不可能的情况,或者您正在使用不稳定的
发行版,某些必需的软件包尚未创建
或尚未移入Incoming。
以下信息可能有助于解决问题:
 
下列软件包有未满足的依赖关系:
 krb5-user : 依赖: krb5-config 但无法安装
 samba : 依赖: python-dnspython 但无法安装
         依赖: python-samba 但不会被安装
         依赖: samba-common-bin (= 2:4.5.16+dfsg-1+deb9u4) 但不会被安装
         依赖: tdb-tools 但无法安装
         推荐: attr 但无法安装
         推荐: samba-dsdb-modules 但不会被安装
         推荐: samba-vfs-modules 但不会被安装
 winbind : 依赖: samba-common-bin (= 2:4.5.16+dfsg-1+deb9u4) 但不会被安装
E: 无法修正问题,您持有的软件包存在未满足的依赖关系。
解决方案
  • 取消注释以 #deb/etc/apt/sources.list 文件中。

  • 更新软件仓库并重新运行命令。

    # apt update
    # sudo apt install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind
错误:ads_keytab_open: 设置的kerberos方法无效(0)

该问题是由于 smb.conf 文件中缺少相关配置节导致。

# sudo net ads keytab create -U administrator
 
警告:必须将"kerberos method"设置为keytab方法才能使用keytab功能。
输入administrator密码:
ads_keytab_open: 设置的kerberos方法无效(0)
解决方案
  • 将以下行添加到 /etc/samba/smb.conf 文件:

    kerberos method = secrets and keytab
  • 再次重新运行命令。

错误:无法获取winbind接口详情:WBC_ERR_WINBIND_NOT_AVAILABLE

测试命令失败。

# wbinfo -t
无法获取winbind接口详情:WBC_ERR_WINBIND_NOT_AVAILABLE
无法获取winbind域名!
通过RPC调用检查(null)域的信任密钥失败
调用wbcCheckTrustCredentials失败:WBC_ERR_WINBIND_NOT_AVAILABLE
无法检查密钥
[root@fedgia samba]#  wbinfo -u
无法获取winbind接口详情:WBC_ERR_WINBIND_NOT_AVAILABLE
无法获取winbind域名!
查找域用户时出错
[root@fedgia samba]#  wbinfo -g
无法获取winbind接口详情:WBC_ERR_WINBIND_NOT_AVAILABLE
无法获取winbind域名!
调用wbcListGroups失败:WBC_ERR_WINBIND_NOT_AVAILABLE
查找域组时出错
解决方案
  • 运行以下命令。

    # systemctl enable winbind --now
  • 再次重新运行命令。

错误:加入域失败:通过rpc查找域'EXAMPLE.LOCAL'的DC信息失败:NT_STATUS_CONNECTION_RESET

加入命令失败并返回错误NT_STATUS_CONNECTION_RESET。

# net ads join -U Administrator
输入Administrator密码:
加入域失败:通过rpc查找域'EXAMPLE.LOCAL'的DC信息失败:NT_STATUS_CONNECTION_RESET
解决方案
  • 在Active Directory上安装SMBv1。前往 服务器管理器 仪表板 启动“删除角色和功能”向导 功能 SMB 1.0/CIFS 文件共享支持 .

  • 重新运行命令。

错误:DNS更新失败!

这并非问题。终端已成功加入Active Directory。

# net ads join -U Administrator
输入Administrator的密码:
使用短域名——EXAMPLE
已将'|USER-USER3'加入DNS域'example.local'
未为用户-user3配置DNS域。无法执行DNS更新。
DNS更新失败!
错误:net命令无法连接到127.0.0.1 IP地址

默认设置下, net 命令会连接到127.0.0.1 IP地址。若Samba未监听环回接口,连接将失败。例如:

# net rpc rights list -U administrator
输入administrator的密码:
无法连接到服务器127.0.0.1
连接失败:NT_STATUS_CONNECTION_REFUSED
解决方法
  • /etc/samba/smb.conf 文件的[global]部分添加以下参数:

    bind interfaces only = yes
    interfaces = lo eth0
  • 重启Samba服务。

  • 向net命令传递 -I IP地址或-S主机名 参数。

错误:getent未找到域用户和组

有时getent passwd或getent group不显示任何内容。

# getent passwd
# getent group
解决方案
  • 将以下参数添加到 [global] 部分的 /etc/samba/smb.conf 文件中:

winbind enum users = yes
winbind enum groups = yes

注意

这些设置会降低性能,因此仅建议在测试时添加。

错误:DNS更新失败:ERROR_DNS_GSS_ERROR

加入Active Directory时,由于AD上Kerberos配置错误,net命令可能因ERROR_DNS_GSS_ERROR而失败。

# net ads join -U administrator
输入administrator密码:
使用短域名——SAMDOM
已将'AD-Member'加入DNS域'samdom.example.com'
AD-Member.samdom.example.com的DNS更新失败:ERROR_DNS_GSS_ERROR
DNS更新失败:NT_STATUS_UNSUCCESSFUL
解决方案
  • 运行自动重新配置:

    # samba_upgradedns --dns-backend=BIND9_DLZ
    正在读取域信息
    DNS账户已存在
    未找到区域文件/usr/local/samba/private/dns/SAMDOM.EXAMPLE.COM.zone
    将自动创建DNS记录
    DNS分区已存在
    dns-DC1账户已存在
    BIND配置示例文件请参见/usr/local/samba/private/named.conf
    安全DNS更新所需文档请参见/usr/local/samba/private/named.txt
    DNS升级完成
  • 重启BIND服务。

错误:加入域失败:无效配置("workgroup"设置为'EXAMPLE.LOCAL',应为'EXAMPLE')且未请求配置修改

加入命令失败的原因是 authconfig 运行不正确。

# net ads join -U Administrator
输入Administrator密码:
加入域失败:无效配置("workgroup"设置为'EXAMPLE.LOCAL',应为'EXAMPLE')且未请求配置修改
解决方案
  • 正确运行以下命令:

# authconfig \
 --enablekrb5 \
 --krb5kdc=example.local \
 --krb5adminserver=example.local \
 --krb5realm=EXAMPLE.LOCAL \
 --enablewinbind \
 --enablewinbindauth \
 --smbsecurity=ads \
 --smbrealm=EXAMPLE.LOCAL \
 --smbservers=example.local \
 --smbworkgroup=example\
 --winbindtemplatehomedir=/home/%U \
 --winbindtemplateshell=/bin/bash \
 --enablemkhomedir \
 --enablewinbindusedefaultdomain \
 --update
错误:winbind.service:主进程退出,代码=exited,状态=1/FAILURE

启动Winbind服务失败。

# service winbind status
重定向至/bin/systemctl status winbind.service
● winbind.service - Samba Winbind守护进程
   已加载:已加载(/usr/lib/systemd/system/winbind.service;已启用;供应商预设:禁用)
   活动状态:失败(结果:exit-code),自EDT时间2022年9月26日周一10:15:35起已过56秒
     文档:man:winbindd(8)
           man:samba(7)
           man:smb.conf(5)
   进程:12649 ExecStart=/usr/sbin/winbindd --foreground --no-process-group $WINBINDOPTIONS (code=exited, status=1/FAILURE)
  主PID:12649(code=exited, status=1/FAILURE)
   状态:"正在启动进程..."

9月26日10:15:35 rhel7x64tl winbindd[12649]:[2022/09/26 10:15:35.316642,  0] ../../source3/winbindd/winbindd_cache.c:3166(initialize_winbindd_cache)
9月26日10:15:35 rhel7x64tl winbindd[12649]:  initialize_winbindd_cache: 正在清除缓存并以版本号2重新创建
9月26日10:15:35 rhel7x64tl winbindd[12649]:[2022/09/26 10:15:35.319950,  0] ../../source3/winbindd/winbindd_util.c:1279(init_domain_list)
9月26日10:15:35 rhel7x64tl winbindd[12649]:  无法获取我们的SID - 我们是否已加入?
9月26日10:15:35 rhel7x64tl winbindd[12649]:[2022/09/26 10:15:35.319999,  0] ../../source3/winbindd/winbindd.c:1462(winbindd_register_handlers)
9月26日10:15:35 rhel7x64tl winbindd[12649]:  无法初始化域列表
9月26日10:15:35 rhel7x64tl systemd[1]:winbind.service: 主进程已退出,code=exited, status=1/FAILURE
9月26日10:15:35 rhel7x64tl systemd[1]:无法启动Samba Winbind守护进程。
9月26日10:15:35 rhel7x64tl systemd[1]:单元winbind.service进入失败状态。
9月26日10:15:35 rhel7x64tl systemd[1]:winbind.service失败。
解决方案

macOS

将macOS终端加入Active Directory

要将macOS Ventura终端加入Active Directory(AD)域,请按照以下步骤操作。

示例:

领域:example.local
域用户:administrator
域IP:11.11.11.11

配置DNS服务器地址
  1. 前往 系统偏好设置 > 网络 .

  2. 以太网 部分,点击 高级 .

  3. DNS 下,输入 IP地址 Active Directory .

    join__mac__ad__step1__part1__en.png
  4. 点击 确定 保存更改。

返回 网络 页面,您可以看到已填写数据的字段。

mac_ethernet_new.png
配置日期和时间
  • 设置 日期和时间 以及 时区 Active Directory .

    join__mac__ad__step2__part1__en.png
加入Active Directory
  1. 前往 系统偏好设置 > 用户与群组 > 网络账户服务器 .

    join__mac__ad__step3__part2__en.png
  2. 点击 编辑 > 打开目录实用工具 .

    join__mac__ad__step3__part3__en.png
  3. 目录实用工具 中输入您的本地 用户名 密码 .

    mac_diectory_utility.png
  4. 输入 Active Directory 域名 并点击 绑定 .

    mac_directory_utility_login.png
  5. 目录实用工具 中重新输入您的本地 用户名 密码 .

    mac_directory_utility_login_credentials.png
  6. 输入您的域 用户名 密码 .

    mac_directory_utility_network_administratory.png
  7. 返回 用户与群组 界面,您将能检查端点是否已成功加入 Active Directory .

    active_directory_join_procedure_joined_macos_en.png

重要提示

若端点名称包含连字符,您可能无法绑定到诸如 LDAP Active Directory .

建立绑定时,请使用不含连字符的端点名称。