Univention Bugzilla – Bug 24281
NTLM-Authentifizierung bei Windows-Clients, die gegen Samba 4 gejoint wurden
Last modified: 2012-07-20 15:25:18 CEST
Samba 4 beinhaltet zwei Implementierungen aus für Squid nötigen ntlm_auth-Helpers, einmal aus dem source3 und aus dem source4-Verzeichnis. Das ntlm_auth aus source4 funktioniert nicht, es gibt einen ersten Patch, aber der ist sechs Monate später noch nicht integriert: https://lists.samba.org/archive/samba-technical/2011-May/077544.html Die Empfehlung von Upstream ist, die Version aus source3 zu integrieren. Das führte allerdings zu folgendem Segfault: [2011/10/31 16:01:51.764672, 0, pid=818] lib/util.c:1572(log_stack_trace) BACKTRACE: 16 stack frames: #0 /usr/sbin/winbindd(log_stack_trace+0x2d) [0xb7281c6d] #1 /usr/sbin/winbindd(smb_panic+0x2d) [0xb7281d8d] #2 /usr/sbin/winbindd(+0x109dbb) [0xb71fcdbb] #3 /usr/sbin/winbindd(pdb_enum_trusteddoms+0xf) [0xb71fcdef] #4 /usr/sbin/winbindd(+0xca836) [0xb71bd836] #5 /usr/sbin/winbindd(winbindd_dual_list_trusted_domains+0x62) [0xb71ada72] #6 /usr/sbin/winbindd(+0xcf64d) [0xb71c264d] #7 /usr/sbin/winbindd(+0xcfd8c) [0xb71c2d8c] #8 /usr/sbin/winbindd(+0x1a3714) [0xb7296714] #9 /usr/sbin/winbindd(tevent_common_loop_immediate+0xe0) [0xb7294f70] #10 /usr/sbin/winbindd(run_events+0x3d) [0xb729323d] #11 /usr/sbin/winbindd(+0x1a0680) [0xb7293680] #12 /usr/sbin/winbindd(_tevent_loop_once+0x98) [0xb7293d88] #13 /usr/sbin/winbindd(main+0xaaa) [0xb719587a] #14 /lib/libc.so.6(__libc_start_main+0xe6) [0xb6dcdc76] #15 /usr/sbin/winbindd(+0x9fdd1) [0xb7192dd1] [2011/10/31 16:01:51.765014, 0, pid=818] lib/fault.c:326(dump_core) dumping core in /var/log/samba/cores/winbindd
*** Bug 25843 has been marked as a duplicate of this bug. ***
Ein strace auf ntlm_auth weist darauf hin, dass /usr/bin/ntlm_auth setuid root installiert werden muss. Damit läuft dann das Suid-NTLM Helper-Protokoll erfolgreich durch. Irgendwas fehlt aber zusätzlich noch "auf dem letzten Meter", denn squid wertet die Authentisierung weiterhin als nicht erfolgreich.
Siehe auch Bug #25771 für UCS@school.
Die Berechtigungen von samba4 ntlm_auth sind angepasst und in der squid_ldap_group Konfiguration wird jetzt das Domain-Prefix von Benutzernamen entfernt.
Created attachment 4111 [details] log.samba eines Squid3/ntlm_auth-Zugriffs von einem IE/Win7 Client aus Das Verhalten von Winbind/Samba44 scheint hier nicht stabil zu sein, häufig schlagen nachfolgende NTLM-Auth-Zugriffe fehl.
Created attachment 4112 [details] Mit squid/debug/level="ALL,1 29,10 82,10" sieht man im squid3/cache.log: auth_check_password_recv: winbind authentication for user [SCHOOL\Administrator] FAILED with error NT_STATUS_ACCESS_DENIED GENSEC login failed: NT_STATUS_ACCESS_DENIED 2012/01/25 14:55:41.174| authenticateNTLMHandleReply: helper: '0x9686f58' sent us 'BH NT_STATUS_ACCESS_DENIED NT_STATUS_ACCESS_DENIED' Wenn man im cache.log nach authenticateNTLMHandleReply sucht, sieht man, dass zunächst zwei Authentisierungen erfolgreich verlaufen und dann die nächsten zwei anscheinend zeitlich überlappend gestartet werden, von denen dann der erste NT_STATUS_ACCESS_DENIED liefert und der zweite NT_STATUS_IO_TIMEOUT.
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 aber noch nicht relevant ist. Der source3/winbindd verhielt sich hingegen in den ersten Tests stabil. Ggf. sollte man ein paar Winbind-Patches mit übernehmen: * https://bugzilla.samba.org/show_bug.cgi?id=8371 * http://gitweb.samba.org/samba.git/?p=samba.git;h=fbf17489844a5cfc6d1da8c431ce0194ed4c3f72
Irgendwas ist da allerdings noch nicht ganz sauber, der domain-Part ist in der Antwort von ntlm_auth3 leer. Funktional ist das erstmal irrelevant, weil der Teil sowieso im nächsten Schritt der Squid-ACLs abgeschnitten wird. 2012/01/31 05:46:37.900| authenticateNTLMHandleReply: helper: '0x9c4e420' sent us 'AF +user1' 2012/01/31 05:46:37.900| authenticateNTLMHandleReply: Successfully validated user via NTLM. Username '+user1'
Folgende drei Patches sind vielleicht auch sinnvoll mitzunehmen: * http://gitweb.samba.org/samba.git/?p=samba.git;a=commit;h=1e4761d05978b7a495d121acc1deaa7049f3911c * http://gitweb.samba.org/samba.git/?p=samba.git;a=commit;h=5075e565684627dfbd23f715da344b4365351ccb * http://gitweb.samba.org/samba.git/?p=samba.git;a=commit;h=b9d208bdaa9da2a5ae534481865efc881b851b01
univention-samba4 setzt jetzt im postinst die neue UCR Variable samba4/service/winbind?winbindd Durch diese Einstellung wird der Samba4-interne winbind Service deaktiviert und statt dessen der source3/winbindd gestartet. Das 'winbind4' Binärpaket installiert den Daemon dafür jetzt mit und implementiert ntlm_auth als Symlink auf ntlm_auth3. Als Alternative wird ntlm_auth.samba4 weiterhin mit installiert (und lässt sich bei Bedarf per update-alternatives aktivieren). Beim Paketupdate wird einmalig geprüft, ob winbind/autostart=no ist, wie das univention-samba4-Joinscript es bisher gesetzt hat. Falls das so ist, wird die UCR-Variable wieder per unset entfernt. Im univention-samba4-Joinscript wird jetzt entsprechend auch nicht mehr winbind/autostart=no gesetzt sondern statt dessen am Ende des Joinscripts wieder gestartet. Im Changelog ist erklärt, dass man das alte Verhalten beibehalten kann, indem man vor dem Update samba4/service/winbind=s4 setzt. Wenn samba4/service/winbind nicht den Wert 'winbindd' hat, dann startet das Init-Skript den Daemon nicht und in der smb.conf wird der 'winbind' service auch nicht deaktiviert. Falls jemand, warum auch immer, überhaupt keine winbind-Dienste laufen haben will, kann dieser Spezialfall per /etc/init.d/winbind stop ucr set samba4/service/winbind=winbindd winbind/autostart=no erreicht werden.
Die Einstellung samba4/service/winbind?winbindd wird jetzt erst bei Installation von ucs-school-webproxy vorgenommen, im univention-samba4 Paket wird hingegen per default weiter der "s4" winbind verwendet, um in ucs3.0-1 keine unnötig großen Änderungen vorzunehmen. Insbesondere ist Bug 26088 aktuell ein Problem, das für UCS@School noch gefixt werden sollte.
Die interne RPC-Kommunikation zwischen Samba4 und Winbind3 funktioniert aktuell strukturell nicht. Die Anpassungen an univention-samba4 für die source3/winbind sind jetzt wieder zurückgenommen. Bisheriger Changelog-Eintrag ist ebenfalls entfernt.
Für diesen Bug wurden folgende Patches angepasst: 4.0.0~alpha17~git201110100928-5-ucs3.0-1/10_winbind3.patch 4.0.0~alpha17~git201110100928-5-ucs3.0-1/20_fix_missing_files_in_install.patch Durch die Patches wurde 1. source3/winbindd mit installiert 2. ntlm_auth in ntlm_auth.samba4 umbenannt 3. ntlm_auth als Symlink auf ntlm_auth3 erzeugt 4. ntlm_auth3 und ntlm_auth.samba4 setuid installiert Diese Änderungen wurden wieder zurückgenommen indem 10_winbind3.patch wieder entfernt und 20_fix_missing_files_in_install.patch aud den Stand von ucs_3.0-0 reverted wurde.
Created attachment 4228 [details] Patch für winbind4 zur Vermeidung von Rekursion wenn "smbd" als File-Server verwendet wird.
Dieser Patch für source4/winbind kommt noch dazu: https://gitweb.samba.org/?p=metze/samba/wip.git;a=patch;h=fd3a0bf5345d303e76bcc8ab73b56e3786437cdf
Wir sollten hier die Variante aus UCS@school übernehmen Bug #25771.
An diesem Bug auch alle Änderung an univention-squid auf ucs@school 3.0 nach 3.0-2 übernehmen.
10_statoverride_ntlm_auth.patch aus ucsschool ist vermutlich nicht mehr relevant: Da das aktuelle Verfahren ntlm_auth nicht mehr verwendet, sollte es auch nicht mehr setuid installiert werden, siehe Bug 26843.
Änderungen aus ucs@school 3.0 wurden übernommen. Zusätzlich wurde im Postinst für dieses Update ein Test auf squid/ldapauth eingebaut. Ist diese Variable auf "yes" gesetzt, wird statt dessen squid/basicauth=yes gesetzt. Ebenso wird squid/basicauth/children übernommen. squid/ldapauth und squid/basicauth/children werden dann gelöscht. Früher war squid/ldapauth im Squid BASIC mit LDAP Backend und squid/basicauth BASIC mit Winbind als backend. Es gibt jetzt nur noch basic -> ldap ntlm -> ntlm_script kerberos -> squid_kerb_auth 10_statoverride_ntlm_auth.patch hab ich nicht gefunden.
Die Funktionalität wurde im Rahmen von Bug 27401 getestet. (In reply to comment #19) > Änderungen aus ucs@school 3.0 wurden übernommen. Zusätzlich wurde im Postinst > für dieses Update ein Test auf squid/ldapauth eingebaut. Ist diese Variable auf > "yes" gesetzt, wird statt dessen squid/basicauth=yes gesetzt. Ebenso wird > squid/basicauth/children übernommen. squid/ldapauth und > squid/basicauth/children werden dann gelöscht. → REOPEN: für die UCR-Variable squid/basicauth gibt es keine Variablenbeschreibung, weshalb diese bei einem "ucr search squid" nicht auftaucht. > Früher war squid/ldapauth im Squid BASIC mit LDAP Backend und squid/basicauth > BASIC mit Winbind als backend. Es gibt jetzt nur noch > > basic -> ldap > ntlm -> ntlm_script > kerberos -> squid_kerb_auth Die Kerberos-Authentifizierung hatte im Test zusammen mit BASIC-Auth nicht funktioniert. Müsste das gehen? Wenn ja, in welcher Konstellation?
Changelog: es wurde ein Hinweis aufgenommen, dass squid/ldapauth{,/children} nach squid/basicauth{,/children} automatisch übernommen wird.
> → REOPEN: für die UCR-Variable squid/basicauth gibt es keine > Variablenbeschreibung, weshalb diese bei einem "ucr search squid" nicht > auftaucht. hinzugefügt > Die Kerberos-Authentifizierung hatte im Test zusammen mit BASIC-Auth nicht > funktioniert. Müsste das gehen? Wenn ja, in welcher Konstellation? Wenn ein CLient Kerberos kann, wird er auch immer Kerberos machen. Der "Fallback" ist nur für Clients, die kein Kerberos können (w3m etc.).
(In reply to comment #22) > > → REOPEN: für die UCR-Variable squid/basicauth gibt es keine > > Variablenbeschreibung, weshalb diese bei einem "ucr search squid" nicht > > auftaucht. > > hinzugefügt → OK > > Die Kerberos-Authentifizierung hatte im Test zusammen mit BASIC-Auth nicht > > funktioniert. Müsste das gehen? Wenn ja, in welcher Konstellation? > > Wenn ein CLient Kerberos kann, wird er auch immer Kerberos machen. Der > "Fallback" ist nur für Clients, die kein Kerberos können (w3m etc.). → Kerberos-only funktioniert mit Win7 und IE8, FF13 und Chrome 20 sowie mit WinXP und FF13 und Chrome 20; IE6+WinXP funktioniert _nicht_.
UCS 3.0-2 has been released: http://forum.univention.de/viewtopic.php?f=54&t=1905 If this error occurs again, please use "Clone This Bug".