Damit dies funktioniert, benötigen wir die folgenden Module und Systeme:
Das LDAP-Modul wird verwendet, um Benutzer auf unserer Website mit dem LDAP-Benutzer zu registrieren, und das LDAP SSO-Modul wird für die Authentifizierung mit Apache über Kerberos verwendet.
Kerberos ist ein Netzauthentifizierungssystem, das sich auf eine vertrauenswürdige dritte Partei stützt. Die beiden anderen Parteien sind der Benutzer und der Dienst, mit dem der Benutzer eine Verbindung herstellen möchte. Nicht alle Dienste und Anwendungen können Kerberos verwenden, aber für die Dienste und Anwendungen, die dies können, bietet Kerberos einen Single-Sign-On-Zugang zum Netzwerk.
In diesem Abschnitt werden wir den Kerberos-Server und einige Benutzereinstellungen einrichten und konfigurieren.
Wenn Sie neu in Kerberos sind, müssen Sie einige Begriffe verstehen. Viele dieser Begriffe sind Ihnen vielleicht aus anderen Umgebungen bekannt.
Principal: Alle Benutzer, Computer und Dienste, die von Servern bereitgestellt werden, müssen als Kerberos-Principal identifiziert werden.
Instances: Wird für Service-Manager und Personen mit speziellen administrativen Verwaltungsrollen verwendet.
Realms: Der eindeutige Kontrollbereich, der von der Kerberos-Installation bereitgestellt wird. Betrachten Sie ihn als die Domäne oder Gruppe, zu der Ihre Hosts und Benutzer gehören. Standardmäßig verwendet ubuntu die großgeschriebene DNS-Domäne (BEISPIEL.COM) als Realm.
Key Distribution Center: (KDC) besteht aus drei Teilen, einer Datenbank mit allen Auftraggebern, einem Authentifizierungsserver und einem Ticketausstellungsserver. Für jede Region muss es mindestens ein KDC geben.
Ticket Granting Ticket: Das Ticket Granting Ticket (TGT) wird vom Authentifizierungsserver (AS) festgelegt und ist mit dem nur dem KDC bekannten Passwort des Benutzers verschlüsselt.
Ticket Granting Server: (TGS) stellt auf Anfrage Servicetickets für Benutzer aus.
Tickets: Authentifiziert die Identitäten von zwei Auftraggebern. Das eine ist der Auftraggeber, das andere ist ein vom Benutzer angeforderter Dienst. Tickets generieren einen Verschlüsselungsschlüssel, der für die sichere Kommunikation während der authentifizierten Sitzung verwendet wird.
Keytab Files: Keytabs sind Dateien, die aus der KDC-Stammdatenbank extrahiert werden und den Verschlüsselungsschlüssel für einen Dienst oder Host enthalten.
Zusammenfassend lässt sich sagen, dass Realm über mindestens ein KDC verfügt, das die Datenbank der Principals on Demand enthält. Wenn der Principal-Benutzer eine Verbindung zu dem Server mit Kerberos-Zugang herstellt, stellt das KDC ein Ticket Granting Ticket (TGT) aus. Wenn die vom Benutzer angegebenen Anmeldeinformationen übereinstimmen, wird der Benutzer authentifiziert, und der Ticket Granting Server (TGS) fordert vom Server Tickets für den über Kerberos konfigurierten Dienst an. Ticket-Dienste authentifizieren den Benutzer, ohne dass er seinen Benutzernamen und sein Passwort erneut bestätigen muss.
Kerberos ist ein Authentifizierungsprotokoll für Computernetzwerke, das auf der Grundlage von Tickets funktioniert und es Knoten, die über ein unsicheres Netzwerk kommunizieren, ermöglicht, ihre Identität gegenseitig sicher nachzuweisen. Das Protokoll wurde nach der Figur Kerberos (oder Cerberus) aus der griechischen Mythologie benannt, dem wilden dreiköpfigen Wachhund des Hades.
Seine Entwickler zielten in erster Linie auf das Benutzer-Server-Modell ab und bieten eine gegenseitige Authentifizierung, bei der sich sowohl Benutzer als auch Server gegenseitig authentifizieren. Die Nachrichten des Kerberos-Protokolls sind gegen Abhör- und Wiederholungsangriffe geschützt.
Kerberos basiert auf der Verschlüsselung mit symmetrischen Schlüsseln und erfordert eine vertrauenswürdige Drittpartei. Optional kann es in bestimmten Authentifizierungsphasen die Verschlüsselung mit öffentlichen Schlüsseln verwenden. Kerberos verwendet standardmäßig den UDP-Port 88.
Aus diesen Gründen ist Kerberos eine brauchbare Option für die Apache-Authentifizierung.
Wir werden die Kerberos-Einstellungen für Apache über Ubuntu vornehmen.
Die Systemuhren der mit dem Kerberos-Realm verbundenen Server und Benutzerdienste müssen zueinander kompatibel sein. In unserem Fall müssen die Systemuhren des Windows-Servers, der die Benutzer beherbergt, d. h. des LDAP-Servers, und des Ubuntu-Servers, der den Apache-Server beherbergt, synchronisiert sein (der Unterschied darf höchstens 5 Minuten betragen, damit Kerberos korrekt funktioniert). Außerdem muss Ihre Website einen gültigen Domänennamen haben; die Kerberos-Authentifizierung funktioniert nicht mit IP-Adressen. Wenn Sie sich auf localhost befinden, können Sie den Domänennamen in Ihrer Datei /etc/hosts
festlegen. Zum Beispiel: 127.0.0.0.1 apache.drupart.local
Um die Systemzeit des Ubuntu-Servers mit der Systemzeit des LDAP-Servers zu synchronisieren, können Sie NTP verwenden, das über die Befehlszeile läuft. Um NTP zu installieren, führen Sie den folgenden Befehl aus:
sudo apt-get install ntp
Starten Sie den NTP-Dienst neu:
sudo service ntp restart
Synchronisieren Sie die Systemuhr des Servers mit folgendem Befehl
sudo ntpdate -s drupal.drupart.local
Installieren Sie libapache2-mod-auth-curb und krb5-user mit dem folgenden Befehl:
sudo apt-get install libapache2-mod-auth-kerb krb5-user
Wir werden libapache2-mod-auth-kerb verwenden, um Apache mit Kerberos zu verbinden. krb5-user ist keine wirkliche Voraussetzung, bietet aber nützliche Kommandozeilen-Tools für Kerberos.
Zusätzlich zum Befehl libapache2-mod-auth-curb installiert krb5-config das Abhängigkeitspaket und zeigt dann einen Konfigurationsassistenten an, der nach folgenden Angaben fragt
Standard Kerberos Version 5 Realm. Verwenden Sie DRUPAL.LOCAL (in Großbuchstaben). KDC Mein Active Directory-Server ist drupal.drupart.local, ändern Sie ihn in Ihren eigenen Server. Verwaltungsserver. Dies ist in der Regel derselbe wie der LDAP-/Active-Directory-Server bzw. sollte im Falle mehrerer Domänencontroller normalerweise auf den Host gesetzt werden.
Nachdem Sie diese Pakete installiert haben, ändern Sie den Inhalt der Datei /etc/krb5.conf
entsprechend Ihren Bedürfnissen. In dieser Datei definieren wir die Kerberos-Zone für den Apache.
[libdefaults] default_realm = DRUPART.LOCAL # Active Directory Domain # The following krb5.conf variables are only for MIT Kerberos. kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true# The following encryption type specification will be used by MIT Kerberos # if uncommented. In general, the defaults in the MIT Kerberos code are # correct and overriding these specifications only serves to disable new # encryption types as they are added, creating interoperability problems. # # The only time when you might need to uncomment these lines and change # the enctypes is if you have local software that will break on ticket # caches containing ticket encryption types it doesn't know about (such as # old versions of Sun Java). # default_tgs_enctypes = des3-hmac-sha1 # default_tkt_enctypes = des3-hmac-sha1 # permitted_enctypes = des3-hmac-sha1 # The following libdefaults parameters are only for Heimdal Kerberos. fcc-mit-ticketflags = true [realms] DRUPART.LOCAL = { kdc = drupal.drupart.local # Active Directory domain controller. admin_server = drupal.drupart.local } [domain_realm] .drupart.local = DRUPART.LOCAL drupart.local = DRUPART.LOCAL
kinit [email protected]
Sie werden nach einem Passwort gefragt.
Geben Sie klist
in das Terminal ein, um das erste Ticket zu sehen, das wir vom KDC erhalten haben.
$ klist Default principal: [email protected] Valid starting Expires Service principal 25/02/2019 13:12 26/02/2019 23:11 krbtgt/[email protected] renew until 25/02/2019 13:12
C:\>ktpass -prince HTTP/[email protected] -mapuser [email protected] -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass 1234567 -out C:\intranetkeytab
Dieser Befehl erstellt eine Intranetkeytab-Datei in C: \ erstellt eine Intranetkeytab-Datei. Kopieren Sie diese Datei und legen Sie sie im Ordner /etc/apache2/ als http_intranet.keytab
auf dem Apache-Server ab. Stellen Sie mit den folgenden Befehlen sicher, dass alles korrekt konfiguriert ist:
$ kvno HTTP/[email protected] HTTP/[email protected]: kvno = 4 $ klist -e Ticket cache: FILE:/tmp/krb5cc_0 Default principal: HTTP/[email protected] Valid starting Expires Service principal 25/02/2019 14:53 25/02/2019 00:52 krbtgt/[email protected] renew until 26/02/2019 14:53, Etype (skey, tkt): aes256-cts-hmac-sha1-96, ... 25/02/20194 15:09 25/02/2019 00:52 HTTP/[email protected] renew until 26/02/2019 14:53, Etype (skey, tkt): arcfour-hmac, arcfour-hmac $ klist -e -k -t /etc/apache2/http_intranet.keytab Keytab name: FILE:http_intranet.keytab KVNO Timestamp Principal ---- ---------------- --------------------------------------------------------- 4 01/01/1970 01:00 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
$ kinit -k -t /etc/apache2/http_intranet.keytab HTTP/[email protected] $ klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: HTTP/[email protected] Valid starting Expires Service principal 25/02/2019 14:11 25/02/2019 00:10 krbtgt/[email protected] renew until 26/02/2019 14:11 Configure Apache for Kerberos Authentication
Dem Apache muss mitgeteilt werden, welche Teile welcher Websites die von mod_auth_kerb bereitgestellte Authentifizierung verwenden sollen. Dies geschieht über die AuthType-Direktive mit dem Wert Kerberos.
Um festzulegen, welche Kerberos-Authentifizierung verwendet werden soll, fügen Sie den folgenden Ausschnitt in die Konfiguration Ihres virtuellen Hosts ein:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html/web ServerName apache.drupart.local <Location /user/login/sso> # /user/login/sso is required for Drupal LDAP SSO module AuthType Kerberos AuthName "Kerberos authenticated intranet" KrbAuthRealms DRUPART.LOCAL Krb5Keytab /etc/apache2/http_intranet.keytab KrbServiceName Any KrbMethodNegotiate on KrbMethodK5Passwd on KrbSaveCredentials on KrbVerifyKDC on Require valid-user </Location> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
sudo service apache2 force-reload
Wenn Sie die Seite apache.drupal.local/user/login/sso besuchen, werden Sie, wenn Ihre LDAP- und LDAP-SSO-Module konfiguriert sind, authentifiziert, ohne dass Sie nach Benutzername und Passwort gefragt werden.
Da es in diesem Blog um Kerberos-Authentifizierung geht, finden Sie online Artikel über die Einstellungen des Drupal LDAP-Moduls. Andererseits sind die Einstellungen für LDAP SSO einfach. Von nun an werde ich davon ausgehen, dass das Drupal LDAP-Modul ordnungsgemäß eingerichtet ist und funktioniert.
composer require 'drupal/ldap_sso:^1.0'
Nach der Installation des LDAP SSO Moduls, gehen Sie zu /admin/config/people/ldap/sso
und überprüfen Sie die folgenden Werte:
Meldet sich automatisch an, wenn Drupal geöffnet wird.
Wenn Ihre Benutzer als user@realm angezeigt werden, müssen Sie dies aktivieren. Dies ist der Standard für mod_auth_kerb, aber nicht für mod_auth_sspi.
Außerdem muss der Wert für die Server-Variable, die den Benutzer enthält, "REMOTE_USER" lauten. Deaktivieren Sie dann die Option "Redirect users on logout", da Sie versuchen werden, sich automatisch anzumelden, wenn wir uns abmelden.
Wenn alles in Ordnung ist, werden wir beim Einloggen in unsere Drupal-Website automatisch eingeloggt, ohne dass wir nach einem Benutzer/Passwort gefragt werden.
GOSB Teknopark Hi-Tech Bina 3.Kat B3 Gebze - KOCAELİ