• This forum has a zero tolerance policy regarding spam. If you register here to publish advertising, your user account will be deleted without further questions.

Sonderzeichen im Passwort für Dovecot

Spion

New Member
Guten Tag zusammen,

ich habe schon sehr viel in diesem Forum "mit gelesen", bisher wurde mir da schon oft geholfen. An der Stelle schon mal vielen Dank!

Leider habe ich ein Problem, bei dem ich einfach nicht weiterkomme.

Für ein Projekt mit einigen Leuten wird ein Mailserver gebraucht, mit dem wir
"größere" Dateien verschicken können.
Dazu kommt noch, das es relativ einfach sein sollte, zusätzliche Mailzugänge anzulegen. Da ich das nicht alles selber machen werde, wird dazu ein Webinterface benutzt. Das ist aber eine andere Baustelle (noch nichts installiert).

Folgende Software ist installiert:

Debian Wheezy
Dovecot
Postfix
Mysql

(SSH, ...)

Ich ging erst von aus, das es ein Fehler in meiner eigenen Konfig ist,
deswegen habe ich mich dazu entschlossen mal einige "fertige" Konfigurationen zu probieren. Alles mit dem selben Ergebnis.

Wenn ich mich mit Imap oder Pop auf dem Server anmelde, funktioniert das ohne Probleme solange ich ein Passwort wie "123456QWERTZ" habe.
Sobald ich ein Passwort wie "!2§4%6@w€rTz" habe kann ich mich nicht mehr Anmelden.

Ich habe bis jetzt viel gelesen aber nichts brauchbares gefunden.
Mein Problem ist, das ich nicht weiß wo oder nach was ich suchen soll.

Bei Ubuntuusers habe ich einen Hinweis auf Dovecot gefunden:
Code:
password_query = SELECT NULL AS password, ‘Y’ as nopassword, username AS user FROM mailbox WHERE username = ‘%u’ AND ( password = MD5(‘%w’) OR password = MD5(CONVERT(‘%w’ USING latin1)) OR password = MD5(CONVERT(_latin1’%w’ USING utf8)))

Da meine mysql Kenntnisse beschränkt sind, verstehe ich die Zeile nicht zu 100%.
Bin mir auch nicht sicher ob das ein Lösungsweg ist.

Dennoch habe ich “versucht” die Zeile auf meine Konfig anzupassen:

Code:
SELECT password AS password, ‘Y’ as nopassword, username AS user FROM users WHERE username = ‘%u’ AND ( password = MD5(‘%w’) OR password = MD5(CONVERT(‘%w’ USING latin1)) OR password = MD5(CONVERT(_latin1’%w’ USING utf8)))

Anbei noch ein Entschärfter Auszug aus meiner Logfile "mail.log"

Code:
Apr 18 14:53:57 hostname dovecot: auth-worker(28273): mysql(127.0.0.1): Connected to database vmail
Apr 18 14:54:11 hostname dovecot: imap-login: Disconnected (auth failed, 3 attempts in 14 secs): user=, method=PLAIN, rip=ip, lip=ip, TLS, session=


Falls weitere Infos gebraucht werden, kann ich die natürlich nachliefern.
Da ich den Post gerne übersichtlich halten wollte, wollte ich nicht alles mögliche Posten, bei dem wahrscheinlich 70% nicht weiterhelfen.

Grüße

Spion
 
Tja, ein € oder § kann verschieden sein, je nach Betriebssystem und Zeichensatz.
§ und € ist nicht in ASCII enthalten, aber in Latin1 oder UTF... oder Windows-1252 oder ... (such dir was aus) in verschiedener Kodierung .
 
Tja daran hatte ich auch schon gedacht mit dem Zeichensatz. Aber normal speichert man doch die Passwörter verschlüsselt und ich hab grad kein Überblick wie das dann noch mit den Sonderzeichen ist ;)

Grüße
 
Die Verschlüsselung hat mit der Kodierung nichts zu tun.
In Kodierung Y kann das A (nur als Beispiel) durch FF repräsentiert sein.
In Kodierung X ist es dann durch FB repräsentiert (auch hier: nur ein Beispiel).

Und da das unterschiedliche Eingaben sind (aus Systemsicht) wird selbstverständlich auch der Hash anders ausfallen.
Für den Anwender sieht das Ganze natürlich absolut identisch aus.

Mit der Verschlüsselung hat das also rein gar nichts zu tun, die kann dich also nicht vor falschen Kodierungen "schützen".
 
Abgesehen davon, dass der OP dank copy&paste wohl falsche "Hochkommata" verwendet und damit die Query kaputt ist, dürfte auch die Query selbst suboptimal bis falsch sein. Hinzu kommt dann das Inkompatibilitätsproblem bei MD5 und der Schwachfug mit den Charsets.

Wenn diese Fehlerquellen/Stolpersteine ausgeräumt sind, kann man sich den erlaubten Sonderzeichen widmen, aber nicht vorher...
 
Schonmal danke für die Tipps,

die Query sieht bei mir so aus:

Code:
password_query = SELECT username, domain, password \
 FROM users WHERE username = '%n' AND domain = '%d'


Ein "locale" bringt auf dem Server bringt ein:

Code:
LANG=de_DE.UTF-8

die Datenbank habe ich auf

Code:
utf8_general_ci

Dovecot arbeitet mit sha-512, falls das von Bedeutung sein sollte.
 
Woher weißt du, ob jeder Mailclient immer Passworte als UTF versendet und nicht lokale Kodierung nimmt?

Ich würde nicht allemöglichen Zeichen für Logins zulassen.

Aber das musst du wissen, was du willst.
 
Naja, ich wäre froh wenn zumindest ein "Sonderzeichen" funktioniert.

Zumindest ein ! oder % oder sowas.

Momentan geht ja leider nur ABC und 0-9.
 
Dovecot arbeitet mit sha-512, falls das von Bedeutung sein sollte.
Jetzt mal Butter bei die Fische:
Wie genau werden die Passworte in die MySQL-DB eingetragen?
Wie genau sieht die Dovecot-Konfiguration für userdb/passdb aus?
Wie genau sieht die entsprechende Postfix-Konfiguration aus?
Wie genau sieht das Datenbank-Shema aus?
 
Ich sollte noch dazu sagen, das ich wie schon erwähnt momentan eine "fertige"
Konfiguration verwende. Da ich erst wissen möchte wo der Fehler ist.
Danach möchte ich mich wieder an meine Konfig setzen. Will es ja lernen.
Der Dovecot läuft momentan nur, wenn ich daran werkel.

Außerdem kann es sein das unter der Woche meine Antworten etwas verzögert kommen.

Jetzt aber zu den Informationen.

Wie genau werden die Passworte in die MySQL-DB eingetragen?

Code:
insert into users (username, domain, password) values ('benutzer', 'domain.irgendwas', '$6laleluusw');

Wie genau sieht die Dovecot-Konfiguration für userdb/passdb aus?

Code:
# Authentication for SQL users. Included from auth.conf.
#
# <doc/wiki/AuthDatabase.SQL.txt>

passdb {
  driver = sql

  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /etc/dovecot/dovecot-sql.conf.ext
}

# "prefetch" user database means that the passdb already provided the
# needed information and there's no need to do a separate userdb lookup.
# <doc/wiki/UserDatabase.Prefetch.txt>
#userdb {
#  driver = prefetch
#}

userdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}

# If you don't have any user-specific settings, you can avoid the user_query
# by using userdb static instead of userdb sql, for example:
# <doc/wiki/UserDatabase.Static.txt>
#userdb {
  #driver = static
  #args = uid=vmail gid=vmail home=/var/vmail/%u
#}

Wie genau sieht die entsprechende Postfix-Konfiguration aus?

Code:
smtpd_banner = $myhostname ESMTP $mail_name         
biff = no

append_dot_mydomain = no

readme_directory = no

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mydestination =
mailbox_size_limit = 51200000
message_size_limit = 51200000
recipient_delimiter =
inet_interfaces = all
myorigin = domain.irgendwas 
inet_protocols = all

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

###### SASL Auth ######
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes


###### Use Dovecot LMTP Service to deliver Mails to Dovecot ######
virtual_transport = lmtp:unix:private/dovecot-lmtp

### Only allow mail transport if client is authenticated ######
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination


###### MySQL Connection ######

virtual_alias_maps = mysql:/etc/postfix/virtual/mysql-aliases.cf
virtual_mailbox_maps = mysql:/etc/postfix/virtual/mysql-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/virtual/mysql-domains.cf
local_recipient_maps = $virtual_mailbox_maps

Die cf Files sind nach diesem Schema:

Code:
user = mail
password = strenggeheim
hosts = 127.0.0.1
dbname = mail
query = SELECT * FROM domains WHERE domain='%s'

Wie genau sieht das Datenbank-Shema aus?

Wie mache ich das am besten Ersichtlich...

Ich habe drei Tabellen

Domain
User
Aliases

Erstellt habe ich die Tabellen in der Konsole, phpmyadmin hatte ich erst später drauf.

Code:
# Benutzerkonten
create table users (id INT UNSIGNED AUTO_INCREMENT NOT NULL, username VARCHAR(128) NOT NULL, domain VARCHAR(128) NOT NULL, password VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (username, domain) );

# Domains
create table domains (id INT UNSIGNED AUTO_INCREMENT NOT NULL, domain VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (domain));

# Aliase
create table aliases (id INT UNSIGNED AUTO_INCREMENT NOT NULL, source VARCHAR(128) NOT NULL, destination VARCHAR(128) NOT NULL, UNIQUE (id), PRIMARY KEY (source, destination) );

Danke schonmal für die Hilfe!

Ich habe noch eine Frage am Rande.
Derzeit habe ich als Unterstützung das "Linux-Server" Buch von Galileo.
Das Thema Mailserver ist zwar drin, ich bezweifle aber, das es dort vollständig behandelt wird.
Könnt ihr mir dazu noch Fachliteratur empfehlen?
Bin bei sowas eher der Nostalgiker und habe lieber was zum blättern.

Grüße

Spion
 
Bitte nochmal genau http://wiki2.dovecot.org/AuthDatabase/SQL lesen, insbesondere den Abschnitt "Password database lookups" (Absatz 2 ist sehr wichtig).

Ansonsten erstmal Dokus lesen und verstehen, dann die Zusammenhänge begreifen, dann erst ein Konzept erarbeiten und ganz zum Schluss an die Umsetzung machen.
 
an /etc/dovecot/dovecot-sql.conf.ext etwas verändert?

Du kannst auch mal in dein Passwort-Feld sowas wie

Code:
{PLAIN}passwort!

per PMA eintragen, um die Passwort-Encodierung als Problem auszuschließen.
 
An der Config habe ich nichts geändert.

Helf mir bitte auf die Sprünge, was bedeutet PMA?
Irgendwo habe ich das glaube ich schon gelesen.

Grüße
 
phpmyadmin oder ähnliches, womit du Einträge in der mysql Datenbank editieren kannst. Wenn du das auch per Shell kannst, solls auch recht sein.
 
Ok, ich habe gerade einfach "password!" eingetragen, habe PHPmyadmin benutzt. Ich hoffe das ich da nichts besonderes zusätzlich einstellen musste.
Jedenalls klappt es nicht.
 
Ok, ich habe zum Test einen neuen User erstellt:

Code:
insert into users (username, domain, password) values ('test', 'lala.de', '{PLAIN}passwort!');

Geht leider nicht.

Code:
dovecot: imap-login: Disconnected (auth failed, 3 attempts in 14 secs): user=<test@lala.de>, method=PLAIN, rip=ip, lip=ip, TLS, session=<id>

Oder habe ich etwas falsch verstanden?
 
Back
Top