Bug 22108 - Integration von Heimdal-Patches aus UCS 2.x
Integration von Heimdal-Patches aus UCS 2.x
Status: CLOSED FIXED
Product: UCS
Classification: Unclassified
Component: Kerberos
UCS 2.4
Other Linux
: P5 normal (vote)
: UCS 3.0 - RC
Assigned To: Stefan Gohmann
Felix Botner
:
Depends on:
Blocks:
  Show dependency treegraph
 
Reported: 2011-04-05 15:10 CEST by Moritz Muehlenhoff
Modified: 2011-12-13 15:49 CET (History)
2 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

Note You need to log in before you can comment on or make changes to this bug.
Description Moritz Muehlenhoff univentionstaff 2011-04-05 15:10:49 CEST
Die Heimdal-Patches aus UCS 2.x müssen geprüft und übernommen werden.
Comment 1 Stefan Gohmann univentionstaff 2011-08-02 15:02:39 CEST
Die folgenden vier Patches wurden übernommen:

22_disable-ftp-and-pop-server.patch  
23_disable-telnet.patch  
31_univention-mount-homedir.patch  
35_univention-username-length.patch

Unklar ist derzeit noch, was mit den anderen Patches passieren soll. Das hängt davon ab, wie die Passwort-Richtlinien ausgewertet werden sollen.
Comment 2 Stefan Gohmann univentionstaff 2011-08-08 06:47:16 CEST
(In reply to comment #1)
> Unklar ist derzeit noch, was mit den anderen Patches passieren soll. Das hängt
> davon ab, wie die Passwort-Richtlinien ausgewertet werden sollen.


Verschoben auf MS2.
Comment 3 Stefan Gohmann univentionstaff 2011-08-19 08:39:12 CEST
Die Patches benötigen wir weiterhin, vor allem für nicht Samba 4 Szenarien.

Eine Überlegung ist noch, dass wir im kpasswdd die UDM Schnittstelle zum Setzen des Passworts verwenden. Dann müssen wir nicht den gesamten Passwortänderunsgcode ein zweites Mal in C pflegen.
Comment 4 Stefan Gohmann univentionstaff 2011-08-22 22:55:14 CEST
Aktuell kann das Passwort nicht mehr kpasswd geändert werden.

Das Problem tritt bei allen Heimdal 1.4er Versionen auf. Als Ausgabe erhält man:

# kpasswd daniel
daniel@DEADLOCK4.LOCAL's Password:
New password for daniel@DEADLOCK4.LOCAL:
Verifying - New password for daniel@DEADLOCK4.LOCAL:
Auth error : Authentication failed

Nach einigem Debug konnte ich feststellen, dass der Call krb5_decrypt_ticket in der Funktion krb5_verify_ap_req2 in der Datei lib/krb5/rd_req.c nicht erfolgreich ist. 

Ggf. passen die Keys nicht?
Comment 5 Stefan Gohmann univentionstaff 2011-08-23 08:51:26 CEST
Folgendes konnte ich feststellen. Wenn ich in der kdc.conf das File-Backend aktiviere, beispielsweise
 dbname = /var/lib/heimdal-kdc/heimdal

anschließend per 
 kstash --random-key
 kadmin  -l init --realm-max-ticket-life=unlimited --realm-max-renewable-life=unlimited $REALM
 kadmin -l add me
die Kerbeors Umgebung initialisiere und den Benutzer me anlege, dann kann ich das Passwort ändern.

Wenn ich das gleiche mit dem LDAP-Backend mache
 dbname = ldap:<ldap/base>
dann kann ich zwar für den Benutzer auch ein Ticket bekommen, aber kpasswd für den Benutzer scheitert.

Ein "kadmin -l dump *" sieht für beide Backends identisch aus.
Comment 6 Stefan Gohmann univentionstaff 2011-08-23 16:03:16 CEST
Provides: ftp-server sollte wieder entfernt werden.
Comment 7 Stefan Gohmann univentionstaff 2011-09-08 21:29:31 CEST
(In reply to comment #6)
> Provides: ftp-server sollte wieder entfernt werden.

Provides ftp-server + pop3-server wurde entfernt und
Conflicts ftp-server + pop3-server wurde entfernt und
Comment 8 Stefan Gohmann univentionstaff 2011-10-07 17:07:09 CEST
Der kpasswdd funktioniert soweit. Ein Problem ist noch, dass jetzt unsere password-Lib die Passwörter setzt und auch der Daemon selbst. Dann gibt es die folgende Fehlermeldung:
kadm5_s_chpass_principal_cond: Password reuse forbidden
Comment 9 Stefan Gohmann univentionstaff 2011-10-08 12:15:05 CEST
Es ist jetzt so, dass das Kerberos Passwort auch über die univnetion-lib geändert wird. Der kpasswdd lädt die Python Lib.
Falls es dort Probleme gibt, beispielsweise dass der Benutzer im UCS LDAP nicht gefunden wurde, dann geht die Passwortänderung normal über Kerberos. Der Hauptvorteil ist, dass der Patch deutlich kleiner geworden ist und das Passwort über den gleichen Weg modifiziert wird.
Comment 10 Janek Walkenhorst univentionstaff 2011-10-10 13:30:51 CEST
Das Passwort wird wie folgt an Python übergeben:
   args = Py_BuildValue("ss", client, pwd_data->data);
krb5_data scheint jedoch nicht 0x00-terminiert zu sein:
   typedef struct _krb5_data {
      int length;
      char *data;
   } krb5_data;
darum werden "zufällige" Daten an die Passworte bei der Übergabe angehängt:
   univention26 → univention269
   univention27 → univention27\t\x03
Comment 11 Stefan Gohmann univentionstaff 2011-10-11 10:40:16 CEST
Wurde angepasst.
Comment 12 Moritz Muehlenhoff univentionstaff 2011-10-18 08:43:33 CEST
Folgendes tritt bei der Installation von univention-ftp auf:

0 aktualisiert, 2 neu installiert, 0 zu entfernen und 18 nicht aktualisiert.
Es müssen 2.410 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 4.202 kB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]? y
WARNUNG: Die folgenden Pakete können nicht authentifiziert werden!
  proftpd-basic univention-ftp
Authentifizierungswarnung überstimmt.
Hole:1 http://192.168.0.10/build2/ ucs_3.0-0/amd64/ proftpd-basic 1.3.3a-6.33.201105191052 [2.408 kB]
Hole:2 http://192.168.0.10/build2/ ucs_3.0-0/all/ univention-ftp 5.0.0-3.24.201110051338 [2.678 B]
Es wurden 2.410 kB in 2 s geholt (1.032 kB/s)
Vorkonfiguration der Pakete ...
Vormals abgewähltes Paket proftpd-basic wird gewählt.                                                                                                                               
(Lese Datenbank ... 84953 Dateien und Verzeichnisse sind derzeit installiert.)                                                                                                      
Entpacken von proftpd-basic (aus .../proftpd-basic_1.3.3a-6.33.201105191052_amd64.deb) ...                                                                                          
dpkg: Fehler beim Bearbeiten von /var/cache/apt/archives/proftpd-basic_1.3.3a-6.33.201105191052_amd64.deb (--unpack):                                                               
 Versuch, »/usr/share/man/man5/ftpusers.5.gz« zu überschreiben, welches auch in Paket heimdal-servers 1.4.0+git201110101743~lorikeet-3.197.201110101900 ist                         
configured to not write apport reports                                                                                                                                              
                                      dpkg-deb: Unterprozess einfügen mit Signal (Datenübergabe unterbrochen (broken pipe)) getötet
Vormals abgewähltes Paket univention-ftp wird gewählt.
Entpacken von univention-ftp (aus .../univention-ftp_5.0.0-3.24.201110051338_all.deb) ...
Trigger für man-db werden verarbeitet ...
Fehler traten auf beim Bearbeiten von:
 /var/cache/apt/archives/proftpd-basic_1.3.3a-6.33.201105191052_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Comment 13 Stefan Gohmann univentionstaff 2011-10-18 10:05:37 CEST
Die manpage wurde umbenannt.
Comment 14 Felix Botner univentionstaff 2011-11-22 16:51:20 CET
FAILED - {SASL}... in userPassword überlebt kpasswd nicht

OK - Passwort Änderungen via kpasswd

OK - Passwort Policies:

-> ucr search --brief password/qu
password/quality/credit/digits: 2
password/quality/credit/lower: 2
password/quality/credit/other: 2
password/quality/credit/upper: 2
password/quality/forbidden/chars: abc
password/quality/required/chars: xyz

-> udm policies/pwhistory list

DN: cn=default-settings,cn=pwhistory,cn=users,cn=policies,dc=iii20,dc=zzz10
ARG: None
  length: 3
  _view_referencing_objects: None
  name: default-settings
  emptyAttributes: None
  expiryInterval: None
  fixedAttributes: None
  requiredObjectClasses: None
  pwQualityCheck: TRUE
  prohibitedObjectClasses: None
  pwLength: 8


-> kpasswd felix
felix@III20.ZZZ10's Password: 
New password for felix@III20.ZZZ10: 
Verify password - New password for felix@III20.ZZZ10: 
Soft error : Password does not contain one of required characters: "xyz"

-> kpasswd felix
felix@III20.ZZZ10's Password: 
New password for felix@III20.ZZZ10: 
Verify password - New password for felix@III20.ZZZ10: 
Soft error : Password contains forbidden characters

-> kpasswd felix
felix@III20.ZZZ10's Password: 
New password for felix@III20.ZZZ10: 
Verify password - New password for felix@III20.ZZZ10: 
Soft error : is too simple

...

mit dem Passwort 12QeWrxDzeiy"! hat es dann geklappt.

OK - Passwort Änderungen bei Benutzer mit Umlauten

-> kdestroy 
-> kpasswd möller
möller@III20.ZZZ10's Password: 
New password for möller@III20.ZZZ10: 
Verify password - New password for möller@III20.ZZZ10: 
Success : Password changed

-> kinit möller
möller@III20.ZZZ10's Password: 
-> klist 
Credentials cache: FILE:/tmp/krb5cc_0
        Principal: möller@III20.ZZZ10

  Issued                Expires               Principal
Nov 22 04:24:46 2011  Nov 22 14:24:46 2011  krbtgt/III20.ZZZ10@III20.ZZZ10

OK - Installation (mit proftpd)

OK - Patches wurden soweit nötig übernommen

OK - Passwort-Änderung mit {K5KEY} in userPassword

-> univention-ldapsearch -LLL uid=felix userpassword| ldapsearch-decode64 
dn: uid=felix,cn=users,dc=iii20,dc=zzz10
userPassword: {K5KEY}

-> kpasswd felix

-> univention-ldapsearch -LLL uid=felix userpassword
dn: uid=felix,cn=users,dc=iii20,dc=zzz10
userPassword:: e2NyeXB0fSQ2JGhPcFFjUDZtWloyUHlYalUkNFRzTUlk...
Comment 15 Stefan Gohmann univentionstaff 2011-11-22 21:21:40 CET
(In reply to comment #14)
> FAILED - {SASL}... in userPassword überlebt kpasswd nicht

Bei mir schon:

 root@master61:~# ucr set directory/manager/web/modules/users/user/auth/saslpassthrough=keep
Create directory/manager/web/modules/users/user/auth/saslpassthrough
root@master61:~# univention-ldapsearch -xLLL uid=test0 >test0.ldif
root@master61:~# vim test0.ldif
root@master61:~# eval $(ucr shell)
root@master61:~# ldapmodify -x -D cn=admin,$ldap_base -w $(</etc/ldap.secret) -f test0.ldif 
modifying entry "uid=test0,ou=benutzer,dc=deadlock6,dc=local"

root@master61:~# univention-ldapsearch -xLLL uid=test0 userPassword | grep ^userPassword
userPassword:: e1NBU0x9Zm9vYmFy
root@master61:~# kpasswd test0
test0@DEADLOCK6.LOCAL's Password: 
New password for test0@DEADLOCK6.LOCAL: 
root@master61:~# /etc/init.d/samba4 stop
Stopping Samba 4 daemon: samba..
root@master61:~# ucr set kerberos/autostart=yes
Setting kerberos/autostart
root@master61:~# /etc/init.d/heimdal-kdc restart
Starting Heimdal KDC: heimdal-kdc.
Starting Heimdal password server: kpasswdd.
root@master61:~# kpasswd test0
test0@DEADLOCK6.LOCAL's Password: 
New password for test0@DEADLOCK6.LOCAL: 
Verify password - New password for test0@DEADLOCK6.LOCAL: 
Success : Password changed
root@master61:~# univention-ldapsearch -xLLL uid=test0 userPassword | grep ^userPassword
userPassword:: e1NBU0x9Zm9vYmFy
root@master61:~#
Comment 16 Felix Botner univentionstaff 2011-11-23 13:16:08 CET
(In reply to comment #15)
> (In reply to comment #14)
> > FAILED - {SASL}... in userPassword überlebt kpasswd nicht
> 
> Bei mir schon:
> 

Ja, klappt doch

-> ucr get directory/manager/web/modules/users/user/auth/saslpassthrough
keep

-> univention-ldapsearch -LLLL uid=felix userpassword| ldapsearch-decode64 
dn: uid=felix,cn=users,dc=iii20,dc=zzz10
userPassword: {SASL}felix@III20.ZZZ10

-> kpasswd felix
felix@III20.ZZZ10's Password: 
New password for felix@III20.ZZZ10: 
Verify password - New password for felix@III20.ZZZ10: 
Success : Password changed

-> univention-ldapsearch -LLLL uid=felix userpassword| ldapsearch-decode64 
dn: uid=felix,cn=users,dc=iii20,dc=zzz10
userPassword: {SASL}felix@III20.ZZZ10

Changelog Eintrag vorhanden
Comment 17 Sönke Schwardt-Krummrich univentionstaff 2011-12-13 15:49:28 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"