Bug 24281 - NTLM-Authentifizierung bei Windows-Clients, die gegen Samba 4 gejoint wurden
NTLM-Authentifizierung bei Windows-Clients, die gegen Samba 4 gejoint wurden
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Squid
UCS 2.4
Other Linux
: P5 enhancement (vote)
: UCS 3.0-2
Assigned To: Felix Botner
Sönke Schwardt-Krummrich
: interim-3
: 25843 (view as bug list)
Depends on: 25771 25804 26088
Blocks: 18907
  Show dependency treegraph
 
Reported: 2011-11-01 10:01 CET by Moritz Muehlenhoff
Modified: 2012-07-20 15:25 CEST (History)
3 users (show)

See Also:
What kind of report is it?: ---
What type of bug is this?: ---
Who will be affected by this bug?: ---
How will those affected feel about the bug?: ---
User Pain:
Enterprise Customer affected?:
School Customer affected?:
ISV affected?:
Waiting Support:
Flags outvoted (downgraded) after PO Review:
Ticket number:
Bug group (optional):
Max CVSS v3 score:


Attachments
log.samba eines Squid3/ntlm_auth-Zugriffs von einem IE/Win7 Client aus (1.69 MB, text/plain)
2012-01-25 15:50 CET, Arvid Requate
Details
Mit squid/debug/level="ALL,1 29,10 82,10" sieht man im squid3/cache.log: (414.81 KB, text/plain)
2012-01-25 15:51 CET, Arvid Requate
Details
Patch für winbind4 zur Vermeidung von Rekursion wenn "smbd" als File-Server verwendet wird. (3.37 KB, patch)
2012-02-27 15:39 CET, Arvid Requate
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Moritz Muehlenhoff univentionstaff 2011-11-01 10:01:31 CET
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
Comment 1 Arvid Requate univentionstaff 2012-01-16 17:24:03 CET
*** Bug 25843 has been marked as a duplicate of this bug. ***
Comment 2 Arvid Requate univentionstaff 2012-01-16 17:24:40 CET
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.
Comment 3 Stefan Gohmann univentionstaff 2012-01-17 13:32:21 CET
Siehe auch Bug #25771 für UCS@school.
Comment 4 Arvid Requate univentionstaff 2012-01-23 18:26:29 CET
Die Berechtigungen von samba4 ntlm_auth sind angepasst und in der squid_ldap_group Konfiguration wird jetzt das Domain-Prefix von Benutzernamen entfernt.
Comment 5 Arvid Requate univentionstaff 2012-01-25 15:50:14 CET
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.
Comment 6 Arvid Requate univentionstaff 2012-01-25 15:51:30 CET
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.
Comment 7 Arvid Requate univentionstaff 2012-01-31 21:29:44 CET
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
Comment 8 Arvid Requate univentionstaff 2012-01-31 21:36:03 CET
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'
Comment 10 Arvid Requate univentionstaff 2012-02-02 17:49:48 CET
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.
Comment 11 Arvid Requate univentionstaff 2012-02-13 15:59:15 CET
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.
Comment 12 Arvid Requate univentionstaff 2012-02-16 17:23:49 CET
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.
Comment 13 Arvid Requate univentionstaff 2012-02-22 15:41:41 CET
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.
Comment 14 Arvid Requate univentionstaff 2012-02-27 15:39:50 CET
Created attachment 4228 [details]
Patch für winbind4 zur Vermeidung von Rekursion wenn "smbd" als File-Server verwendet wird.
Comment 15 Arvid Requate univentionstaff 2012-02-29 09:47:50 CET
Dieser Patch für source4/winbind kommt noch dazu:

https://gitweb.samba.org/?p=metze/samba/wip.git;a=patch;h=fd3a0bf5345d303e76bcc8ab73b56e3786437cdf
Comment 16 Felix Botner univentionstaff 2012-03-12 13:12:52 CET
Wir sollten hier die Variante aus UCS@school übernehmen Bug #25771.
Comment 17 Felix Botner univentionstaff 2012-03-13 11:43:52 CET
An diesem Bug auch alle Änderung an univention-squid auf ucs@school 3.0 nach 3.0-2 übernehmen.
Comment 18 Arvid Requate univentionstaff 2012-04-19 15:47:13 CEST
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.
Comment 19 Felix Botner univentionstaff 2012-06-01 15:39:03 CEST
Ä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.
Comment 20 Sönke Schwardt-Krummrich univentionstaff 2012-07-05 12:30:38 CEST
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?
Comment 21 Sönke Schwardt-Krummrich univentionstaff 2012-07-05 13:09:22 CEST
Changelog: es wurde ein Hinweis aufgenommen, dass squid/ldapauth{,/children} nach squid/basicauth{,/children} automatisch übernommen wird.
Comment 22 Felix Botner univentionstaff 2012-07-09 15:13:53 CEST
> → 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.).
Comment 23 Sönke Schwardt-Krummrich univentionstaff 2012-07-13 16:01:33 CEST
(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_.
Comment 24 Stefan Gohmann univentionstaff 2012-07-20 15:25:18 CEST
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".