跳至主内容

将终端加入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。

    可通过以下路径修改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 数据库中通过添加 dnsfiles :

    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将Linux终端加入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
    
    [domain/example.local]
    ad域 = example.local
    krb5领域 = EXAMPLE.LOCAL
    realmd标签 = 管理系统 samba加入
    缓存凭据 = 真
    ID提供程序 = ad
    离线时存储krb5密码 = 真
    默认shell = /bin/bash
    ldap ID映射 = 真
    使用完全限定名 = 假
    回退主目录 = /home/%d/%u
    访问提供程序 = ad

    将文件权限设置为 600 .

    # chmod 600 /etc/sssd/sssd.conf
    
    # service sssd start
    
    # chkconfig sssd on
  5. 配置 krb5.conf 文件,先备份旧的 /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
  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终端加入Active Directory

要为SUSE系统使用SSSD加入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 in 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将Linux终端加入Active Directory

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

示例:

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

    # yum -y install 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)域,需遵循以下步骤并满足 通用前提条件 .

示例:

域: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 并用以下内容覆盖:

      [global]
          workgroup = EXAMPLE
          kerberos method = secrets and keytab
          realm = EXAMPLE.LOCAL
          security = ADS
       
          winbind refresh tickets = yes
          winbind use default domain = yes
          template shell = /bin/bash
          template homedir = /home/%D/%U
       
          idmap config * : backend = tdb
          idmap config * : range = 10000-19999
          idmap config EXAMPLE: backend = rid
          idmap config EXAMPLE: range = 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将Ubuntu、Debian的Linux终端加入Active Directory

要使用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 <NAME>
  • /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
    当前模式:                    enforcing
    配置文件模式:                enforcing
    策略MLS状态:                 enabled
    策略deny_unknown状态:        allowed
    内存保护检查:                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 数据库的搜索顺序是否 文件 ,然后 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)执行discover操作时,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)执行discover操作时,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时

"errors": [
        {
           "description": "无法为keytab文件生成凭据缓存文件: default",
           "message": "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
错误: 无法启动系统安全服务守护进程 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;已启用;供应商预设:禁用)
   状态:自东欧夏令时2022-09-21 22:08:34起失败(结果:退出码);5秒前
   进程:9457 ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER}(代码=退出,状态=4)
  主PID:9457(代码=退出,状态=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:主进程退出,代码=退出,状态=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:失败,结果为'退出码'。
解决方案
  • 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:32:59日志相同,此处省略重复翻译)。
10月11日 10:40:31 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:警告:若ad_gpo_access_control选项设置为强制模式,用户将被拒绝基于GPO的登录访问。
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:32:59日志相同,此处省略重复翻译)。
10月11日 10:40:54 10-10-192-49.yyz.local sssd[be[yyz.local]][25701]:警告:若ad_gpo_access_control选项设置为强制模式,用户将被拒绝基于GPO的登录访问。
解决方法
  • 检查 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_lookup_realm = true
           dns_lookup_kdc = true
           dns_fallback = yes
           rdns = false
    [realms]
           EXAMPLE.LOCAL = {
                 kdc = example.local
                 default_domain = example.local
           }
    [domain_realm]
           .EXAMPLE.LOCAL = EXAMPLE.LOCAL
           EXAMPLE.LOCAL = EXAMPLE.LOCAL

Winbind域加入过程故障排除

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

示例:

领域:example.local
域用户:administrator
域IP:11.11.11.11
错误:无法为keytab文件生成凭据缓存文件: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_address或-Shost_name 参数。

错误: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时,由于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;已启用;供应商预设:禁用)
   活动状态:失败(Result: exit-code),自2022年9月26日周一 10:15:35 EDT起;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]: Unit 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 .

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