Kerberos/Saml Login funktioniert noch nicht

Hallo Leute,

CheckMK Version 1.6.0-p10

hab mich an die Anleitung gehalten: https://checkmk.de/cms_kerberos.html
Weiters habe ich mich hier eingelesen: https://help.univention.com/t/working-with-kerberos-principals-and-keytabs/30
Keytab ist draußen. Hier ist meine Authconfig:

<IfModule !mod_auth_kerb.c>
  LoadModule auth_kerb_module /usr/lib/apache2/modules/mod_auth_kerb.so
</IfModule>

<Location /home>
  Order allow,deny
  Allow from all

  AuthType Kerberos
  AuthName "CheckMK Enterprise Login"
  KrbServiceName HTTP
  KrbMethodNegotiate on
  KrbMethodK5Passwd off
  KrbLocalUserMapping on
  KrbSaveCredentials on

  # Use Kerberos auth only in case there is no Check_MK authentication
  # cookie provided by the user
  # Require expr %{HTTP_COOKIE} =~ /auth_/
  Require expr %{REQUEST_URI} = "/home/check_mk/register_agent.py"
  Require expr %{QUERY_STRING} =~ /(_secret=|auth_|register_agent)/
  Require valid-user

  # Environment specific: Path to the keytab and the realm
  Krb5Keytab /etc/apache2/krb5.keytab.f-mk-mon-p01
  KrbAuthRealm OSIT.CC

  # When Kerberos auth fails, show the login page to the user
  ErrorDocument 401 /home/check_mk/login.py
</Location>

# These files are accessible unauthenticated (login page and needed ressources)
<LocationMatch /home/(omd/|check_mk/(images/.*\.png|login\.py|.*\.(css|js)))>
  Order allow,deny
  Allow from all
  Satisfy any
</LocationMatch>

Nur tut es noch nicht. In der ApacheErrorlog kommt dann das:

[Mon Apr 13 01:41:05.513269 2020] [mpm_prefork:notice] [pid 20828] AH00163: Apache/2.4.29 (Ubuntu) mod_wsgi/4.6.4 Python/2.7 mod_fcgid/2.3.9 mod_auth_kerb/5.4 configured -- resuming normal operations
[Mon Apr 13 01:41:05.513417 2020] [core:notice] [pid 20828] AH00094: Command line: '/usr/sbin/apache2 -f /omd/sites/home/etc/apache/apache.conf'

Ich hab das ganze dann so konfiguriert das beim Aufruf von CheckMK nur Kerberos möglich ist. Als Error direkt auf der Seite kommt dann nur “ERR_TOO_MANY_REDIRECTS”.

Vielleicht habe ich das mit der Keytab auch noch nicht ganz verstanden. Also hab keine SPN oder so angelegt. Die Keytab für die Hosts wird ja automatisch am Domänencontroller angelegt. Diese hab ich laut Anleitung exportiert.

Generell funktioniert Kerberos/Saml bei anderen Seiten im Browser. So als Gegencheck das dieser Part past.

Vielen Dank und glg

sieht bei uns auf einer aktuellen 1.6 und debian buster so aus:
<Location /test>
AuthType Kerberos
AuthName “check_mk SSO Login”
Krb5Keytab /etc/apache2/krb5.keytab
KrbAuthRealm TEST.LOCAL
KrbServiceName HTTP
KrbMethodNegotiate on
KrbMethodK5Passwd off
KrbLocalUserMapping on
KrbSaveCredentials on
Require expr %{REQUEST_URI} =~ m#^/test/check_mk/login.py#
Require expr %{REQUEST_URI} =~ /(register_agent)/
Require expr %{REQUEST_URI} =~ /(webapi)/
Require expr %{QUERY_STRING} =~ /(secret=|auth|register_agent|auto_reg
Require expr %{HTTP_USER_AGENT} =~ /(^Nagstamon)/
Require valid-user
#ErrorDocument 401 /test/check_mk/login.py

<LocationMatch /test/(omd/|check_mk/(images/..png|login.py|..(css|js)))>

Require all granted

1 Like

Vielen Dank für deine Antwort. Es irgendwas zu differieren, weil hier schreit CheckMK:

Starting apache...AH00526: Syntax error on line 25 of /omd/sites/home/etc/apache/conf.d/auth.conf:
Cannot parse expression in require line: syntax error, unexpected $end, expecting T_REGEX or T_REGEX_I
..........ERROR

Ich denke mal c&p Fehler…es scheint hinten ein “)/” zu fehlen…

Sehr cool. Jetzt bekomme ich endlich mal en Fehlermeldung. Das ist schon viel mehr als bisher. Ist eben ein wenig allgemein:


Unauthorized

This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn’t understand how to supply the credentials required.

Der Server hat ja die Keytab. Sowas wie einen SPN account habe ich selbst nicht angelegt. Kennst du dich vielleicht damit auch aus? Ich hab mich das hier noch nicht getraut. Aber wenn ich das richtig verstehe ist der SPN Account noch ne Erweiterung zum Compuerkonto vom Hostobjekt, damit der Host trotz Computerkonto den Kerberos überhaupt lesen darf, sehe ich das richtig?

Anpassungen AD

Serviceuser ohne Exchangepostfach im AD erstellen.
Format svckrb z.B. svckrbfvs46
Account Options:

User cannot change password
Passwort never expires
User logon name: HTTP/<servername>.domain.local

Usermapping auf Servername mittels SPN einrichten: (setspn.exe muss über Supportools installiert sein)

C:>setspn -a HTTP/.domain.local svckrb
C:>setspn -a HTTP/ svckrb

So macht das mein Windowsadmin.
Such dir einfach eine Anleitung im I-Net, es gibt da einige, kommt auch auf dein AD Version an…

Sehr cool, ich mach mir ne Testdomäne und check(MK) das ab :wink:

glg

Hallo,

Wie schon erwähnt is best practise dafür einen user im AD anzulegen mit den ServicePrincipalNames (SPN)

HTTP/fqdnhostname@MY.DOM
HTTPS/fqdnhostname@MY.DOM
http/fqdnhostname@MY.DOM
https/fqdnhostname@MY.DOM

Bitte nicht den host account und dessen keytab für Webserver Auth benutzen. Wenn die einer in die Hände bekommt kann er den Host übernehmen.

Danach muss auf einem prim DC die keytab exportiert werden und auf den Webserver transportiert werden. Achtung, das keytab file ist besonders schützenswert, da es die keys zum entschlüsseln enthält. Also nicht ma eben so per mail versenden.

Unter Linux sollte mit den entsprechende Berechtigungen auch folgendes Kommando funktionieren:

msktutil --update --use-service-account --keytab /tmp/my.keytab --realm my.dom --no-pac --account-name myusername --server myDC --user-creds-only --dont-expire-password --service HTTP/myhostname

Siehe https://linux.die.net/man/1/msktutil

Das keytab file lässt sich mit dem Kommando 'klist -k ansehen. Dort solltest Du mehrere Einträge für http & https finden (etwas detaillierter mit ‘klist -k -t -e -K’)

Auf der client Seite kannnst Du mit dem Kommando ‘kvno HTTP/fqdnhostname@MY.DOM’ dann versuchen ein Ticket für den Service zu ziehen. Der client muss natürlich kerberized sein und der account auch.

Du solltest dann mit dem Kommando klist das Ticket sehen:

Ticket cache: FILE:/tmp/krb5cc_422134822
Default principal: user@MY.DOM

Valid starting Expires Service principal
05/07/20 16:02:11 05/08/20 02:02:11 krbtgt/MY.DOM@MY.DOM
renew until 05/14/20 16:02:11
05/07/20 16:02:11 05/08/20 02:02:11 host/fqdnhostname@MY.DOM
renew until 05/14/20 16:02:11
05/07/20 16:03:16 05/08/20 02:02:11 HTTP/fqdnhostname@MY.DOM
renew until 05/14/20 16:02:11

Unter Windows geht das wohl mit ‘klist get HTTP/fqdnhostname@MY.DOM’. Du solltest dann folgendes sehen:
A ticket to HTTP/fqdnhostname@MY.DOM has been retrieved successfully.

Das sind die Basics was Kerberos und die Integration in AD angeht. Wenn die keytab stimmt, der web server sie auch lesen kann (vorsicht mit den Berechtigungen) und das ticket mit kvno bezogen werden kann sollte der Integration in apache nix mehr im Wege stehen.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.