<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Apache_mit_Kerberos</id>
	<title>Apache mit Kerberos - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Apache_mit_Kerberos"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Apache_mit_Kerberos&amp;action=history"/>
	<updated>2026-10-21T14:41:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Apache_mit_Kerberos&amp;diff=73803&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite (Kurs Linux - Samba)</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Apache_mit_Kerberos&amp;diff=73803&amp;oldid=prev"/>
		<updated>2026-10-18T16:46:21Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite (Kurs Linux - Samba)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:Samba]]&lt;br /&gt;
&amp;lt;!-- Ablauf: Block &amp;quot;Dienste mit Kerberos&amp;quot;, Rechner www --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Kurs !! Lab !! Rechner !! Domäne&lt;br /&gt;
|-&lt;br /&gt;
| [[Linux - Samba]] || [[Linux - Samba Lab]] || www · 10.2XX.1.32 || ad.it2XX.int&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*Ein Intranet soll seine Benutzer kennen, ohne eigene Anmeldeseite.&lt;br /&gt;
*apache2 prüft mit dem Modul '''mod_auth_gssapi''' das Kerberos-Ticket, das der Browser per Negotiate schickt.&lt;br /&gt;
*Der Benutzername steht danach in der Variablen '''REMOTE_USER''' und kann von der Anwendung benutzt werden.&lt;br /&gt;
*Das Prinzip ist dasselbe wie bei [[Squid mit Kerberos]]: SPN '''HTTP/www.ad.it2XX.int''' und eine Keytab für den Webserver.&lt;br /&gt;
&lt;br /&gt;
=Vorbereitung=&lt;br /&gt;
*www tritt der Domäne bei wie ein [[Samba Mitgliedsserver]].&lt;br /&gt;
*In der smb.conf:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sync machine password to keytab = /etc/krb5.keytab:spn_prefixes=host:account_name:sync_spns:sync_kvno:machine_password, /etc/apache2/http.keytab:spn_prefixes=HTTP:sync_kvno:machine_password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt install apache2 libapache2-mod-auth-gssapi&lt;br /&gt;
net ads setspn add HTTP/www.ad.it201.int -U administrator&lt;br /&gt;
net ads keytab create&lt;br /&gt;
chgrp www-data /etc/apache2/http.keytab&lt;br /&gt;
chmod 640 /etc/apache2/http.keytab&lt;br /&gt;
a2enmod auth_gssapi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
*/etc/apache2/conf-available/intern.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Location /intern&amp;gt;&lt;br /&gt;
    AuthType GSSAPI&lt;br /&gt;
    AuthName &amp;quot;Intranet&amp;quot;&lt;br /&gt;
    GssapiCredStore keytab:/etc/apache2/http.keytab&lt;br /&gt;
    GssapiAllowedMech krb5&lt;br /&gt;
    GssapiLocalName On&lt;br /&gt;
    Require valid-user&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zeile !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| AuthType GSSAPI || Anmeldung per Negotiate&lt;br /&gt;
|-&lt;br /&gt;
| GssapiCredStore keytab: || welche Keytab apache benutzt&lt;br /&gt;
|-&lt;br /&gt;
| GssapiAllowedMech krb5 || nur Kerberos, kein NTLM&lt;br /&gt;
|-&lt;br /&gt;
| GssapiLocalName On || REMOTE_USER ist max statt max@AD.IT201.INT&lt;br /&gt;
|-&lt;br /&gt;
| Require valid-user || jeder mit gültigem Ticket&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /var/www/html/intern&lt;br /&gt;
echo '&amp;lt;?php echo &amp;quot;Hallo &amp;quot; . $_SERVER[&amp;quot;REMOTE_USER&amp;quot;]; ?&amp;gt;' &amp;gt; /var/www/html/intern/index.php&lt;br /&gt;
a2enconf intern&lt;br /&gt;
apache2ctl configtest&lt;br /&gt;
systemctl reload apache2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Ohne PHP reicht zum Test eine einfache HTML-Datei, den Namen sieht man dann im access.log.&lt;br /&gt;
&lt;br /&gt;
==Nur bestimmte Benutzer==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Require user max erika&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Für AD-Gruppen braucht es zusätzlich mod_authnz_ldap oder eine Prüfung in der Anwendung.&lt;br /&gt;
&lt;br /&gt;
==Passwort als Notlösung==&lt;br /&gt;
*Clients ohne Ticket, z.B. von außerhalb der Domäne, können sich mit Benutzer und Passwort anmelden:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GssapiBasicAuth On&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Dann geht das Passwort im Klartext zum Server. '''Nur mit HTTPS.'''&lt;br /&gt;
&lt;br /&gt;
=Testen=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kinit max&lt;br /&gt;
curl --negotiate -u : http://www.ad.it201.int/intern/&lt;br /&gt;
klist&lt;br /&gt;
tail /var/log/apache2/access.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*klist zeigt danach ein Ticket für HTTP/www.ad.it201.int, im access.log steht max.&lt;br /&gt;
*Im Browser: wie bei squid, siehe [[Squid mit Kerberos#Im Browser|Browser]].&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''Aufruf per IP''' oder über einen anderen Namen als www.ad.it2XX.int: kein Ticket, 401.&lt;br /&gt;
*'''Keytab nicht lesbar für www-data''': im error.log ein Fehler von gss_acquire_cred.&lt;br /&gt;
*'''Virtueller Host mit anderem Namen''', z.B. intranet.ad.it2XX.int: Für jeden Namen braucht es einen eigenen SPN, und der Name muss in der Keytab stehen.&lt;br /&gt;
*'''GssapiBasicAuth ohne HTTPS''': Passwörter lassen sich mitlesen.&lt;br /&gt;
&lt;br /&gt;
=Übungen=&lt;br /&gt;
==Grundübungen==&lt;br /&gt;
#Tragen Sie den SPN HTTP/www.ad.it2XX.int ein und erzeugen Sie die Keytab für apache.&lt;br /&gt;
#Schützen Sie /intern mit mod_auth_gssapi und testen Sie mit curl.&lt;br /&gt;
#Lassen Sie sich auf der Seite den angemeldeten Benutzer anzeigen.&lt;br /&gt;
#Erlauben Sie nur max den Zugriff.&lt;br /&gt;
#Rufen Sie die Seite von win11 aus im Browser auf. Was ist nötig, damit kein Anmeldefenster kommt?&lt;br /&gt;
==Vertiefung==&lt;br /&gt;
#Richten Sie einen zweiten Namen intranet.ad.it2XX.int als DNS-Alias ein. Was müssen Sie tun, damit Kerberos auch dafür geht?&lt;br /&gt;
#Stellen Sie auf HTTPS um und schalten Sie GssapiBasicAuth ein.&lt;br /&gt;
#Begrenzen Sie den Zugriff auf eine AD-Gruppe mit mod_authnz_ldap. Denken Sie an LDAPS, siehe [[Anwendungen an die Domäne anbinden]].&lt;br /&gt;
==Fehlersuche==&lt;br /&gt;
;1. curl --negotiate bekommt 401, klist zeigt kein Ticket für HTTP/www&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
Der Client hat kein Service-Ticket bekommen: SPN fehlt im AD oder die Seite wurde per IP aufgerufen. kvno HTTP/www.ad.it2XX.int auf lx.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
;2. klist zeigt ein Ticket für HTTP/www, apache antwortet trotzdem mit 401&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
apache kann das Ticket nicht prüfen. Keytab fehlt, ist nicht lesbar oder enthält eine alte kvno. Im error.log nachsehen, klist -k /etc/apache2/http.keytab&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Vertiefung=&lt;br /&gt;
*https://github.com/gssapi/mod_auth_gssapi&lt;br /&gt;
*[[Kerberos für Dienste]]&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Windows-DC durch Samba ablösen]]&lt;br /&gt;
*[[Linux - Samba|Zurück zur Kursseite]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>