Hadoop-Gruppenzuordnungen für LDAP/Active Directory konfigurieren

Um den Active Directory-Benutzer und die -Gruppe so zu erkennen, dass die Autorisierung auf LDAP/Active Directory-Gruppenebene in Hadoop erzwungen werden kann, richten Sie die Hadoop-Gruppenzuordnung mit einer der folgenden Optionen ein:

Hadoop-Gruppenzuordnung im core-site.xml konfigurieren

  1. Öffnen Sie Apache Ambari.
  2. Wählen Sie in der seitlichen Symbolleiste unter Services die Option HDFS aus.
  3. Wählen Sie Konfigurationen > Erweitert.
  4. Fügen Sie die folgenden Schlüsselpaare zur benutzerdefinierten Core-Site hinzu:
    "hadoop.security.group.mapping":"org.apache.hadoop.security.CompositeGroupsMapping",
    "hadoop.security.group.mapping.providers.combined":"true",
    "hadoop.security.group.mapping.providers":"jniUnix,adServer",
    "hadoop.security.group.mapping.provider.jniUnix":"org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback",
    "hadoop.security.group.mapping.provider.adServer":"org.apache.hadoop.security.LdapGroupsMapping",
    "hadoop.security.group.mapping.provider.adServer.ldap.url":"ldap://{AD_FQDN}:389",
    "hadoop.security.group.mapping.provider.adServer.ldap.base":"{AD_SEARCH_BASE}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.user":"{AD_BIND_USER_DN}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.password":"{AD_BIND_USER_PWD}",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.group":"(&(objectclass=group)(cn=*))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.user":"(&(objectclass=user)(sAMAccountName={0}))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.memberof":"memberOf",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.group.name":"cn",
    "hadoop.security.group.mapping.ldap.ssl":"false",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore":"",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore.password.file":"",
    

Um die Mappings gleichzeitig einzurichten, führen Sie auf un0 den folgenden Befehl aus:

  1. Führen Sie in der un0 Folgendes aus:
    export AMBARI_CONF_SCRIPT=/var/lib/ambari-server/resources/scripts/configs.py
  2. Erfassen Sie <ambari_password>, <un0_node_IP> und <cluster_name> (prüfen Sie Ihren Clusternamen in der Ambari-UI), und führen Sie dann den folgenden Befehl aus, um die aktuelle core-site-Konfiguration abzurufen.
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=get \
    --file=/tmp/current_core-site.json
  3. Fügen Sie die Schlüssel/Wert-Paare mit den entsprechenden Werten in die Schlüssel/Wert-Reihe des Eigenschaftsobjekts der JSON-Konfigurationsdatei current_core-site.json ein, und fügen Sie dann das folgende Schlüssel/Wert-Paar zum Kennwortobjekt des Objekts properties_attributes hinzu.
    "password": {
       "hadoop.security.group.mapping.provider.ad4usersX.ldap.bind.password": "true" //the key-value pair to mask out your password in Ambari.
     },
  4. Führen Sie den folgenden Befehl aus, um die Konfiguration zu aktualisieren:
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=set \
    --file=/tmp/current_core-site.json
  5. Standardmäßig aktualisiert Hadoop den Benutzergruppenzuordnungscache alle 300 Sekunden. Um ein kleineres Aktualisierungsintervall zu haben, fügen Sie das folgende Schlüssel/Wert-Paar hinzu:
    "hadoop.security.groups.cache.secs":"<number of seconds you need>"
  6. Wählen Sie das Symbol Services '...', und wählen Sie Alle erforderlichen neu starten aus.

Hadoop-Gruppenzuordnung mit SSSD konfigurieren (empfohlen)

  1. Aktivieren Sie die Installation von yum-Packages.
    sudo sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/oracle-linux-ol7.repo
  2. Diese Änderung an alle Knoten übertragen.
    sudo dcli -f /etc/yum.repos.d/oracle-linux-ol7.repo -d /etc/yum.repos.d/oracle-linux-ol7.repo
  3. Installieren Sie das erforderliche Package.
    sudo dcli -C "yum -y install sssd realmd oddjob oddjob-mkhomedir adcli krb5-workstation samba-common-tools openldap-clients"
  4. Führen Sie den Befehl realm mit dem Parameter "discover" aus, um Informationen über die verknüpfte Domain zurückzugeben und zu validieren, dass der Join ausgeführt wurde.
    sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli
    Hinweis

    Realm Join verwendet samba/adcli, um Realm Join-Vorgänge auszuführen. Um eine davon durchzusetzen, fügen Sie --membership-software=<samba/adcli> hinzu, um die zu verwendende Mitgliedschaftssoftware anzugeben.

    Um einen anderen Computernamen beim AD-Server zu registrieren, fügen Sie --computer-name=<computer-name> hinzu.

    Um Realm Join auf allen Knoten des Clusters auszuführen, führen Sie Folgendes aus:

    cat /etc/hosts | grep -v 'local' | awk '{print $NF}' | while read line; do echo $line; ssh -n $line "sudo echo '<BIND_USER_PASSWORD>' | sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli"; sleep 1; done

  5. Aktualisieren Sie /etc/sssd/sssd.conf. Nehmen Sie im Abschnitt [domain/<AD_REALM_NAME>] die folgenden Aktualisierungen vor.
    1. Ändern Sie fully_qualified_names in False.

      sudo sed -i 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf

    2. (Optional) Fügen Sie Folgendes hinzu.
      ldap_user_search_base = cn=Users,dc=ad,dc=domain,dc=com
      ldap_group_search_base = cn=
      Users,dc=ad,dc=domain,dc=com
      Hinweis

      Für jedes Segment im AD-Domainnamen muss ein separater DC-Eintrag vorhanden sein. Beispiel: Wenn der AD-Domainname A.B.C.D.COM lautet, müssen Sie diese CD-Eintragsliste einschließen: dc=a,dc=b,dc=c,dc=d,dc=com,
  6. Übertragen Sie die Datei sssd.conf an alle Knoten.
    sudo dcli -f /etc/sssd/sssd.conf -d /etc/sssd/sssd.conf
  7. Starten Sie den SSSD-Service neu.
    sudo dcli -C "/bin/systemctl restart sssd.service"
  8. Stellen Sie sicher, dass SSSD die Benutzer- und Gruppeninformationen abruft.
    sudo dcli -C "id Administrator"
    Hinweis

    Wenn Sie eine Antwort id: Administrator: No such user erhalten, funktioniert SSSD nicht ordnungsgemäß.