Bug 17519 - Anonymous Bind unterbinden
Anonymous Bind unterbinden
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: LDAP
UCS 2.3
Other Linux
: P5 normal (vote)
: UCS 3.0 - RC
Assigned To: Arvid Requate
Stefan Gohmann
:
Depends on:
Blocks: 17520 22633 23176 23178 23180 23274 23490 31768
  Show dependency treegraph
 
Reported: 2010-02-01 08:40 CET by Stefan Gohmann
Modified: 2019-11-05 22:13 CET (History)
4 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
Simple Bind Failed: NT_STATUS_LOGON_FAILURE (73.93 KB, text/plain)
2011-11-15 18:47 CET, Florian Best
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Stefan Gohmann univentionstaff 2010-02-01 08:40:14 CET
Wir sollten mit UCS 3.0 den Anonymous Bind per Default abschalten. Über eine UCR Variable sollte das alte Verhalten wieder aktivierbar sein.
Comment 1 Arvid Requate univentionstaff 2010-02-01 19:01:15 CET
Es gibt jetzt im Scope ucs_2.3-0-restrictedbind ein geforktes Source Paket univention-ldap, in dem univention-ldap-acl-{master,slave} so erweitert sind, dass zwei neue UCR Variablen ausgewertet werden:
 ldap/acl/read/anonymous
 ldap/acl/read/ips

Durch univention-ldap-config.postinst werden in ldap/acl/read/ips alle aktuell gesetzten interfaces/.*/address Werte eingetragen, wenn diese Variable noch nicht gesetzt ist. Dadurch haben alle Anfragen, die von einem lokalen Interface kommen, Leseberechtigung auf LDAP-Daten, die nicht durch andere ACLs reglementiert sind.

Das alte Verhalten kann man dadurch wiederherstellen, dass man ldap/acl/read/anonymous auf 'yes' oder 'true' setzt und den slapd neu startet.

In der QA sollten alle Systemrollen mit lokalem LDAP getestet werden (Master, Backup, Slave), sowie ein Memberserver. Die IP des Memberservers muss bei dem System zusätzlich in UCR:ldap/acl/read/ips eingetragen werden, der für ihn als UCR:ldap/master festgelegt ist. Neben der Replikation muss univention-policy-result und die libnss-ldap Anbindung funktionieren.
Comment 2 Arvid Requate univentionstaff 2010-02-01 19:03:27 CET
Fixed in Scope
Comment 3 Arvid Requate univentionstaff 2010-02-02 09:53:31 CET
Um über diese erste Einschränkung hinaus anonymous binds zu vermeiden, müssten wohl zusätzlich zumindest folgende Dateien angepasst werden:

/usr/share/univention-directory-manager/uniconf/modrelogin.py
/etc/univention/templates/files/etc/libnss-ldap.conf
ln -sf /etc/some.secret /etc/libnss-ldap.secret
/etc/univention/templates/files/etc/dhcp3/dhcpd.conf
/usr/lib/univention-directory-listener/system/bind.py
/etc/univention/templates/files/etc/postfix/main.cf.d/40_ldap
/etc/univention/templates/files/etc/imapd/imapd.conf (auth_ldap_group)
/etc/horde/horde3/conf.php und /etc/horde/horde3/kolab.php
/etc/init.d/slapd
sowie univention-policy-result

Man kann root zusätzlich die Angabe eines standard-BaseDN dadurch abnehemen, dass man ihn in /root/.ldaprc einträgt, das BindPW lässt sich dort nicht hinterlegen, sondern müsste bei den ldap-utils separat übergeben werden.
Comment 4 Stefan Gohmann univentionstaff 2011-05-06 09:30:27 CEST
Ich würde vorschlagen, dass wir in UCS 3.0 es folgendermaßen umsetzen:

ldap/acl/read/anonymous auf yes oder true erlaubt global den anonymen Lesezugriff. Wenn der Wert auf no oder false gesetzt ist (defualt), so wird der anonyme Zugriff nur von den in ldap/acl/read/ips erlaubt. Per default setzen wir den Wert auf 127.0.0.1.

Alle lokalen Dienste, die LDAP benötigen, sollten dann localhost verwendent.
Comment 5 Arvid Requate univentionstaff 2011-05-12 20:49:39 CEST
Auf Systemen, die für nss, pam und ldapsearch nicht einen lokalen LDAP-Server verwendet, müssen bind-Credentials hinterlegt sein:

A) Falls machine.secret existiert, können Prozesse, die mit root-Privilegien laufen diese verwenden.

Da in ldap.conf anscheinend keine Datei angegeben werden kann, müssten die Aufrufe des ldapsearch-Binaries durch einen Wrapper ersetzt werden, der "ldapsearch -D $binddn -y $pwd_file" mit den besten Credentials aufruft, die für den Aufrufer lesbar sind.

B) Für Thinclients müsste ein Weg geschaffen werden, pseudo-anonym zu Suchen, z.B. durch Verwendung eines gemeinsamen Bind-DNs, dessen Passwort im Thin-Client-root hinterlegt ist und das regelmäßig automatisch rotiert wird. Damit das domänenweit funktioniert, müsste dieses Passwort vermutlich auch im Klartext im LDAP hinterlegt sein.

C) Da unprivilegierte Benutzer nicht an machine.secret herankommen, funktioniert getent passwd für sie nur, wenn der nscd läuft (der für nss_ldap den "rootbinddn" aus libnss_ldap.conf verwendet). Wenn es den in B) angesprochenen BindDN für pseudo-anonyme Suche gibt, dann könnte man diesen für normale Benutzer konfigurieren ( libnss_ldap.conf und pam_ldap bieten hierfür extra die Optionen "binddn" und "bindpw", letzteres ist dann aber für alle lokalen Benutzer lesbar ).
Comment 6 Stefan Gohmann univentionstaff 2011-05-16 06:48:33 CEST
Als Alternative könnten die Adressen der Thin Clients und Memberserver per Listener in eine UCR-Variable geschrieben werden, so das der Zugriff anonym erlaubt ist. Das sollte dann aber de-aktivierbar sein, so dass der Administrator die IPs manuell pflegen kann.
Comment 7 Arvid Requate univentionstaff 2011-05-30 18:05:21 CEST
Für Thinclients ist jetzt Bug 22633 angelegt.
Comment 8 Arvid Requate univentionstaff 2011-06-29 11:08:41 CEST
Der aktuelle Stand der Anpassungen für diesen Bug ist:

 * LDAP-ACLs erlauben anonyme Suche nur noch von 127.0.0.1 und den IPs des lokalen Systems (per UCR:ldap/acl/read/ips)

 * libnss-ldap verwendet bei Zugriffen durch root die machine credentials, das Gleiche gilt für libpam-ldap. Diese Anpassung ist für Memberserver vorgenommen worden, auf denen dadurch eine Benutzer/Gruppenauflösung per nscd möglich wird. Durch diese Lösung wird eine neue Abhängigkeit eingeführt: Falls der nscd nicht läuft, können nicht-privilegierte Benutzer keine Benutzer/Gruppen auflösen.

 * Es gibt ein Skript univention-ldapsearch, das die machine credentails verwendet, falls keine anderen angegeben sind. Leider ließ sich das nicht analog zu libnss-ldap.conf per /etc/ldap/ldap.conf regeln, da man in der ldap.conf keine Passwortdatei angeben kann --Eine Alternative wäre, das in ldap-tools zu erweitern und den Patch upstream zu schicken.
Comment 9 Stefan Gohmann univentionstaff 2011-07-07 07:04:58 CEST
Die schema-Suche im slapd-Initskript erfolgt jetzt per ldapi-Interface.
Comment 10 Stefan Gohmann univentionstaff 2011-08-05 11:30:35 CEST
Per Default wird jetzt ein anonymer Bind nicht mehr zugelassen. Auch nicht von den lokalen IP-Adressen. Im Wiki sind Lösungen aufgeführt:

http://wiki.univention.de/index.php?title=UCS_3.0_LDAP

Etwas problematisch war die Umstellung in univention-join. Problem ist, dass der Benutzername in eine DN umgewandelt werden muss. Das wird jetzt folgendermaßen versucht:

- auf dem Master wird versucht per udm users/user list die DN zu bekommen. Der Join User muss dann Zugriff auf die ldap.secret haben

- auf dem Master wird als zweites versucht per ldapi-Interface zu suchen. Dafür muss der Join User Zugriff auf die ldapi-Socketdatei haben

- als letztes wird versucht anonym zu suchen
Comment 11 Arvid Requate univentionstaff 2011-08-08 18:42:46 CEST
In folgenden Paketen wurden die Aufrufe für univention_policy_result so angepasst, dass per '-D'/'-y' Maschinen-Credentials übergeben werden:

 * univention-updater
 * univention-samba
 * univention-printclient
 * univention-quota
 * univention-server
 * univention-home-mounter
 * univention-directory-manager-modules
 * univention-kde

Dabei wurde auch wo nötig das Wording für baseconfig angepasst.

Bug 23201 wurde absepariert, da der Aufruf aus Skripten mit Benutzerrechten noch nicht in RC1 funktionieren muss.
Comment 12 Stefan Gohmann univentionstaff 2011-08-09 06:53:19 CEST
Configure 20univention-directory-policy.inst
Traceback (most recent call last):
  File "/usr/lib/univention-directory-policy/univention-policy-set-repository-server", line 100, in <module>
    main()
  File "/usr/lib/univention-directory-policy/univention-policy-set-repository-server", line 82, in main
    new_server, update = query_policy()
  File "/usr/lib/univention-directory-policy/univention-policy-set-repository-server", line 66, in query_policy
    return (server, update)
UnboundLocalError: local variable 'update' referenced before assignment
run-parts: /usr/lib/univention-directory-policy/univention-policy-set-repository-server exited with return code 1
Comment 13 Arvid Requate univentionstaff 2011-08-10 10:55:00 CEST
Der Fehler aus Comment 12 ist behoben.

Folgende Quell-Pakete wurden so angepasst, dass der hostaccount bei der LDAPsuche verwendet wird:

univention-lib   ## reicht jetzt zusätzliche Argumente -D/-y durch
univention-quota
univention-nagios-servicechecks
univention-nfs
univention-bind
univention-squid
univention-printserver
univention-samba
univention-pkgdb
univention-printquota
univention-ldap-overlay-memberof
univention-ldap
univention-join
univention-directory-manager-modules
univention-system-setup

Dabei wurden einige Python-Skripte das ConfigRegistry-Wording angepasst und ucslint konforme Anpassungen vorgenommen.
Comment 14 Janek Walkenhorst univentionstaff 2011-08-10 16:57:18 CEST
Die Änderung r26004 fügt Bash-Spezifika zu joinscripthelper.lib hinzu, diese muss aber sh-kompatibel sein. (Siehe auch Bug #23006)
Comment 15 Arvid Requate univentionstaff 2011-08-10 17:00:59 CEST
Die Änderung r26004 ist jetzt entfernt, Paket univention-join baut gerade neu.
Changelog Eintrag ist jetzt auch eingecheckt.
Comment 16 Stefan Gohmann univentionstaff 2011-08-16 06:48:13 CEST
Wie du irgendwann schon vorgeschlagen hast, sollten pam_ldap und libnss-ldap auch nach dem Update den Host Account verwenden, also pamldap/auth und nssldap/auth auf yes.
Comment 17 Arvid Requate univentionstaff 2011-08-16 12:04:11 CEST
Die UCR-Variablen werden jetzt im postinst per ucr?default auf true gesetzt, sowohl bei Update als auch bei Neuinstallation.
Comment 18 Stefan Gohmann univentionstaff 2011-08-17 07:19:31 CEST
OK, das funktioniert soweit.
Comment 19 Florian Best univentionstaff 2011-11-15 18:47:15 CET
Created attachment 3811 [details]
Simple Bind Failed: NT_STATUS_LOGON_FAILURE
Comment 20 Stefan Gohmann univentionstaff 2011-11-15 19:15:20 CET
(In reply to comment #19)
> Created an attachment (id=3811) [details]
> Simple Bind Failed: NT_STATUS_LOGON_FAILURE

Dort wird der S4 LDAP Server gefragt (Port 389).
Comment 21 Sönke Schwardt-Krummrich univentionstaff 2011-11-16 08:50:06 CET
(In reply to comment #20)
> (In reply to comment #19)
> > Created an attachment (id=3811) [details] [details]
> > Simple Bind Failed: NT_STATUS_LOGON_FAILURE
> 
> Dort wird der S4 LDAP Server gefragt (Port 389).

Ohne Korrektur funktioniert die automatische Quotaübernahme über 
/usr/sbin/univention-user-quota nicht.
Comment 22 Arvid Requate univentionstaff 2011-11-16 11:39:01 CET
Comment 19 betraf eigentlich Bug 23231, das Problem sollte jetzt gefixt sein, Paket ist neu gebaut.
Comment 23 Stefan Gohmann univentionstaff 2011-11-22 06:35:25 CET
Funktioniert, die Quota Einstellungen werden jetzt auch auf einem S4 System übernommen.
Comment 24 Sönke Schwardt-Krummrich univentionstaff 2011-12-13 15:51:19 CET
UCS 3.0-0 wurde veröffentlicht. Sollte der hier beschriebene Bug mit einer
neueren Version von UCS erneut auftreten, so sollte dieser Bug dupliziert
werden: "Clone This Bug"