跳至主内容

将终端加入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加入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接入
    缓存凭据 = 真                                         
    身份提供方 = ad
    离线存储krb5密码 = 真
    默认shell = /bin/bash                            
    ldap身份映射 = 真
    使用全限定名 = 假
    回退主目录 = /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将Linux终端加入Active Directory(适用于Ubuntu、Debian)

要使用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

在SUSE Linux Enterprise 12/15上使用SSSD加入Active Directory

要在SUSE系统上使用SSSD将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]
        默认域 = 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
  3. 配置 sssd.conf 通过备份旧文件 /etc/sssd/sssd.conf 并用以下内容覆盖其内容:

    [sssd]
    配置文件版本 = 2
    服务 = nss,pam
    域 = example.local
     
    [nss]
    过滤用户 = root
    过滤组 = root
     
    [pam]
     
    [域/example.local]
    ID提供者 = ad
    认证提供者 = ad
    AD域 = example.local
    缓存凭证 = true
    枚举 = false
    覆盖主目录 = /home/%d/%u
    LDAP ID映射 = true
    LDAP引用 = false
    LDAP架构 = 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安装samba samba-client samba-winbind samba-winbind-client
  2. 配置 smb.conf 文件。

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

    [全局]
            工作组 = EXAMPLE
            领域 = EXAMPLE.LOCAL
            安全机制 = ads
            idmap配置* : 后端 = autorid
            idmap配置* : 范围 = 100000-19999999
            idmap配置* : 范围大小 = 1000000
            模板主目录 = /home/%D/%U
            模板shell = /bin/bash
            winbind使用默认域 = false
            winbind离线登录 = true
            日志文件 = /var/log/samba/log.%m
            最大日志大小 = 50
            日志级别 = 0 
            kerberos方法 = secrets and keytab
  3. 加入Active Directory域。

    • 创建Kerberos krb5.keytab 文件:

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

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

      [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 <名称>
  • /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
  • 修改配置文件中的SELINUX变量值 /etc/selinux/config 以禁用它。

    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: Unit is masked.

该错误代码由缺少软件包引起。

# 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: Unit is masked.
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相同的时区、日期和时间。

  • 检查DC是否响应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
错误:无法找到repo的有效baseurl:base

此问题出现在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错误:所有镜像URL均未使用ftp、http[s]或file协议。
 例如:无效的发行版/repo/架构组合
移除无有效镜像的镜像列表:/var/cache/yum/x86_64/6/base/mirrorlist.txt
错误:无法找到repo的有效baseurl:base
解决方案
  • /etc/yum.repos.d/ 目录下创建新repo文件并添加以下内容:

    [C6.10-base]
    name=CentOS-6.10 - 基础仓库
    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 - 更新仓库
    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 - 附加仓库
    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 - 贡献仓库
    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
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探测: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; 已启用; 供应商预设: 禁用)
   活动状态:失败(结果: exit-code)自 2022-09-21 22:08:34 EEST 起;5秒前
   进程: 9457 ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER} (code=exited, status=4)
   主PID: 9457 (code=exited, status=4)

Sep 21 22:08:34 slesl15gia systemd[1]: 正在启动系统安全服务守护进程...
Sep 21 22:08:34 slesl15gia sssd[9457]: 无法读取配置文件 /etc/sssd/sssd.conf。请确保该文件仅对所有者可读且属主为 root.root。
Sep 21 22:08:34 slesl15gia systemd[1]: sssd.service: 主进程退出,code=exited, status=4/NOPERMISSION
Sep 21 22:08:34 slesl15gia systemd[1]: 无法启动系统安全服务守护进程。
Sep 21 22:08:34 slesl15gia systemd[1]: sssd.service: 单元进入失败状态。
Sep 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]:警告:若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月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秒前)
 主进程ID: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
 
Oct 11 16:43:32 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 11 16:43:32 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 11 16:43:32 10-10-192-49.yyz.local sssd[be[yyz.local]][1963]: GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)
Oct 11 16:43:32 10-10-192-49.yyz.local sssd[nss][1967]: 已请求枚举但未启用
Oct 11 16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 11 16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 11 16:43:36 10-10-192-49.yyz.local sssd[be[yyz.local]][1963]: GSSAPI错误:未指定的GSS故障。次要代码可能提供更多信息(在Kerberos数据库中未找到服务器)
Oct 11 16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 11 16:43:36 10-10-192-49.yyz.local sssd_be[1963]: GSSAPI客户端步骤1
Oct 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"设置为密钥表方法才能使用密钥表功能。
输入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时,由于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),自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)
 主进程ID: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 .

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