Univention Bugzilla – Bug 25771
Squid und Samba 4
Last modified: 2012-06-11 06:29:53 CEST
Squid in UCS@school 3.0 muss SSO unterstützen, auch wenn Samba 4 verwendet wird. Siehe auch: Bug #24281 Bug #24277
*** Bug 25804 has been marked as a duplicate of this bug. ***
Bei der Authentifikation per Samba4-ntlm_auth muss ntlm_auth aktuell mit setuid root installiert sein, sonst erhält man folgende Fehlermeldungen: Unable to setup messaging listener for '/var/lib/samba/private/smbd.tmp/msg/msg.0:193676647.0':NT_STATUS_ACCESS_DENIED Ein Test mit ntlm_auth3 schlägt hingegen direkt fehl: 2012/01/18 16:09:03.654| authenticateNTLMHandleReply: Failed validating user via NTLM. Error returned 'NT_STATUS_WRONG_PASSWORD' Mit setuid Samba4-ntlm_auth scheitert der Proxy-Zugriff dann allerdings wegen der ldap_group ACL, da der ntlm_auth-Prozess als Benutzernamen "DOMAIN+user" zurückliefert und squid das dann so weiterverwendet. Das sieht man ich cache.log, wenn man in der squid3/squid.conf die Option "debug_options ALL,1 29,10 82,10" setzt: 2012/01/18 16:07:23.887| externalAclLookup: lookup in 'ldap_group' for 'ARUCSSCHOOL3+user1 www-access' Vielleicht ist hier eine Option, einen python-Wrapper um ntlm_auth zu bauen, der den Gruppen-Teil abschneidet. Versuche, die Ausgabe von ntlm_auth über die smb.conf-Option "winbind use default domain = yes" zu ändern, waren leider erfolglos, vermutlich wird dieser Parameter nur von winbind3 (bzw. ggf. ntlm_auth3) ausgewertet. Tests mit Kerberos stehen noch aus.
Hier gibt es noch ein Problem mit dem Template: univention-squid (5.1.3-1.149.201201242307) wird eingerichtet ... File: /etc/squid3/squid.conf File "<stdin>", line 100 if configRegistry['squid/ntlmauth'] == 'yes'
Der Template-Fehler ist behoben.
Tests mit Kerberos auf einem Samba4DC waren erfolgreich. Die Authentifikation per NTLM/Winbind/Samba4 ist hingegen aktuell nicht stabil, siehe Bug #24281.
Authentifikation per NTLM gegen windbind4 funktioniert bisher nicht stabil, sie Bug #24281. Eine Alternative ist der Einsatz des source3/winbindd unter Samba4. Laut upstream-Aussage ist winbind4 auf Samba4-DCs insbesondere für Forest-Szenarien notwendig, was aktuell nicht relevant ist. Der source3/winbindd verhielt sich in den ersten Tests stabil. Authentifikation per Kerberos funktioniert mit den Anpassungen aus Bug #24277 auch mit Firefox. Auch mit Squid3 auf Memberservern, die in eine Samba4-Domäene gejoint sind, funktionierte das. Wenn das benötigt wird, muss hier noch univention-python-heimdal Version 4.0.3-2 per Cherrypick in den ucsschool Scope übernommen werden, damit der Code zum Anlegen der Keytab ohne Samba4 funktioniert.
NTLM-Authentifikation ist jetzt über Bug #24281 umgesetzt. Der Bug bleibt noch offen bis entschieden ist, ob Kerberos-Suuport wegen IP-basiertem Caching und Performance wieder herausgenommen wird. Falls es drin bleibt, wäre es sinnvoll für den Fall gleichzeitiger Verwendung von Kerberos und NTLM den http://sourceforge.net/projects/squidkerbauth/files/negotiate_wrapper in das squid3-Paket mit aufzunehmen. negotiate_wrapper ist vom gleichen Autor wie der squid_kerb_auth Helper in squid3 und wird als Teil von squid-3.2 standardmäßig mit ausgeliefert (siehe http://bugs.debian.org/656304).
Wir werden nun ein eigenes Python Skript "squid_ldap_ntlm_auth" mitbringen, welches die NTLM Authentifizierung umsetzt. Dieses Skript fungiert als Authentifizierungs-Modul für den Squid, ähnlich wie ntlm_auth. Der Unterschied ist, dass das Python Skript die NT Hashes aus dem LDAP bezieht, die Authentifizierungs-Hashes damit selbst erzeugt und diese mit den Hashes vom Client vergleicht. Vorteil: * Authentifizierung ohne winbind/samba/ntlm_auth * squid auth_param children können beliebig gesetzt werden Nachteil: * wir müssen uns um die NTLM Authentifizierung kümmern Unterstützt werden im Skript nur NTLM, NTLM2 und NTLMv2 (keine Hashes auf Basis den LM Hash!). Damit sollte die NTLM Authentifizierung gegen den Squid unabhängig von der eingesetzten Samba Version funktionieren (samba bzw winbind etc werden gar nicht mehr verwendet). "squid_ldap_ntlm_auth" holt sich die NT Password Hashes über den Maschinen-Account. Zusätzlich gibt es einen Passwort "Cache" in dem Passwörter standardmäßig 1h gespeichert werden um die LDAP Anfragen zu minimieren. Die Parameter für "squid_ldap_ntlm_auth" sind folgende: -d DOMAIN, --domain=DOMAIN domain in ntlm authentication -c CACHELIFETIME, --cache-lifetime=CACHELIFETIME password cache lifetime (3600) -t, --debug debug modus (Attention, cleartext password hashes!) -f, --debug-file debug file (/tmp/squid-ntlm-auth.log) Mit "-d" wird die Domäne angegeben, aus der sich Benutzer anmelden können. Ist keine Domäne angegeben, wird diese auch nicht geprüft (dann können z.B. ungejointe Clients eine NTLM Authentifizierung durchführen.) Tests: Getestet wurde das ganze bisher mit Win7 (NTLMv2), WinXP (NTLM2), jeweils mit IE und Firefox und curl (NTLM, falls NTLM 2 Message die Negotiate Flags entsprechend gesetzt hat). Die Geschwindigkeit scheint ausreichend (wurde mit dem angehängten Testscript ermittelt). 15 children in squid.conf und 40x60 curl Prozesse im Testscript (1) 2.4 ntlm_auth mit ipauth -> 10s (2) 2.4 ntlm_auth ohne ipauth -> 33s (3) 3.0 mit py ntlm (ohne ipauth) -> 15s (4) 3.0 mit py ntlm (return dummy user) -> 14s Die 2.4 Version mit dem ipauth Cache ist zwar trotzdem noch etwas schneller, jedoch kann man im Python Script wahrscheinlich nicht mehr viel rausholen. In Test (4) wurde in der "Hauptschleife" einfach nur den ein fester Benutzername zurückgegeben (also keine LDAP Lookup, keine Berechnung der Hashes etc.)und dieser war ungefähre genauso schnell wie Test (3). Ein Äquivalent zu ipauth in den Squid3 einzubauen scheint mir daher nicht sinnvoll. univention-squid: Das Skript wird von univention-squid nun als /usr/lib/squid3/squid_ldap_ntlm_auth mitgebracht und bei der NTLM Authentifizierung standardmäßig verwendet. Über die UCR Variable "squid/ntlmauth/tool" kann man jedoch konfigurieren, welches Tool (welche Optionen) der squid bei der der NTLM Authentifizierung einsetzt. Zusätzlich wurde die basic -> ntlm_auth (früher squid/basicauth), die squid/ldapauth und die squid/ipauth Konfiguration entfernt. Es gibt jetzt noch folgende Möglichkeiten für die Authentifizierung am Squid: negotiate -> /usr/lib/squid3/squid_kerb_auth (squid/krb5auth) ntlm -> /usr/lib/squid3/squid_ldap_ntlm_auth (squid/ntlmauth) basic -> /usr/lib/squid3/squid_ldap_auth (squid/basicauth) QA: Zunächst sollte nochmal kurz geschaut werden, ob die Berechnung der Hash in /usr/lib/squid3/squid_ldap_ntlm_auth sinnvoll ist oder ob es hier irgendwelche groben Schnitzer gibt. Zusätzlich müssten man nochmal diverse (NTLM) Clients bzw. Windows Versionen getestet werden um sicherzugehen, das die NTLM Authentifizierung prinzipiell funktioniert. Mit dem angehängten Testscript sollten dann noch "Belastungstests" gemacht werden. Ebenso mit einem Windows Client (hier kann man beispielsweise viele Anfragen erzeugen, wenn man im Firfox die History komplett neu öffnet). Bei den Tests sollte auch immer mit einem 2.4 mit ntlm_auth verglichen werden, da der Squid bei zu vielen Anfragen die Authentifizierungstools einfach neu startet, in /var/log/squid3/cache.log sieht man dann folgendes: FATAL: Too many queued ntlmauthenticator requests Squid Cache (Version 3.1.6): Terminated abnormally.
Created attachment 4262 [details] curl-ntlm-test.sh
Auf einem UCS@school Salve (nicht gejoint) bekomme ich bei der Installation folgende Meldung: univention-squid (5.0.8-1.169.201203121107) wird eingerichtet ... File: /etc/squid3/squid.conf Traceback (most recent call last): File "<stdin>", line 62, in <module> TypeError: cannot concatenate 'str' and 'NoneType' objects File: /etc/security/packetfilter.d/20squid File: /etc/default/squid3 adduser: Die Gruppe »winbindd_priv« existiert nicht. Not updating squid/transparentproxy Create squid/cache Create squid/debug/level File: /etc/squid3/squid.conf Traceback (most recent call last): File "<stdin>", line 62, in <module> TypeError: cannot concatenate 'str' and 'NoneType' objects
Auf einem Slave: RUNNING 98univention-squid-samba4.inst ERROR(ldb): Failed to add user 'http-proxy-slave102': - ../source4/dsdb/samdb/ldb_modules/ridalloc.c:494: No RID Set DN - Remote RID Set allocation needs refresh ERROR: samAccountName not found for service account http-proxy-slave102 EXITCODE=1
(In reply to comment #10) > Auf einem UCS@school Salve (nicht gejoint) bekomme ich bei der Installation > folgende Meldung: > > univention-squid (5.0.8-1.169.201203121107) wird eingerichtet ... > File: /etc/squid3/squid.conf > Traceback (most recent call last): > File "<stdin>", line 62, in <module> > TypeError: cannot concatenate 'str' and 'NoneType' objects > File: /etc/security/packetfilter.d/20squid > File: /etc/default/squid3 > adduser: Die Gruppe »winbindd_priv« existiert nicht. > Not updating squid/transparentproxy > Create squid/cache > Create squid/debug/level > File: /etc/squid3/squid.conf > Traceback (most recent call last): > File "<stdin>", line 62, in <module> > TypeError: cannot concatenate 'str' and 'NoneType' objects Das Template ist repariert.
(In reply to comment #11) > Auf einem Slave: > > RUNNING 98univention-squid-samba4.inst > ERROR(ldb): Failed to add user 'http-proxy-slave102': - > ../source4/dsdb/samdb/ldb_modules/ridalloc.c:494: No RID Set DN - Remote RID > Set allocation needs refresh > ERROR: samAccountName not found for service account http-proxy-slave102 > EXITCODE=1 Damit der Benutzer zukünftig direkt im UCS LDAP angelegt wird gibt es Bug #26508.
In UCS@school wird standardmäßig NTLM und BASIC Authentifizierung am Squid unterstützt.
Verified: * Die NTLM-Authentifikation funktioniert, auch wenn man den Client auf NTLMv2 only umschaltet. * Basic Auth funktioniert ebenfalls. * Changelog OK. Bekannte Einschränkungen: * Falls squid/ntlmauth=yes, dann gibt es keinen Fallback auf basic. D.h. Authentifizierung von Benutzern ohne samba-Option scheitert dann dauerhaft. Verbesserungsvorschläge: * Changelog Eintrag * chmod 500 auf das debug logfile * ggf. python logging Modul verwenden * Copyright Notiz sollte angepasst werden.
> Verbesserungsvorschläge: > * Changelog Eintrag ergänzt > * chmod 500 auf das debug logfile wird jetzt auf 0600 gesetzt > * ggf. python logging Modul verwenden hab ich jetzt nicht gemacht, jedoch wurde in den Funktionen jetzt selbst die debug Option geprüft, teilweise wurden debug Meldungen zusammengefasst, so dass nun nicht mehr so viele Tests auf die debug Option gemacht werden sollte. > * Copyright Notiz sollte angepasst werden. ok
Verified.
UCS@school 3.0 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer neueren Version von UCS@school erneut auftreten, so sollte dieser Bug dupliziert werden: "Clone This Bug"