Cyrus IMAP mit SASL, PAM, SSSD und LDAP – Opensuse 12.3/13.1 – III

In den letzten beiden Beiträgen
Cyrus IMAP mit SASL, PAM, SSSD und LDAP – Opensuse 12.3/13.1 – I
Cyrus IMAP mit SASL, PAM, SSSD und LDAP – Opensuse 12.3/13.1 – II
unserer kleinen Serie zur Implementierung eines Cyrus IMAP-Dienstes mit LDAP-Authentifizierung über PAM und SSSD hatten wir uns mit den IMAP-Konfigurationsdateien sowie der PAM, SSSD- und partiell auch der LDAP-Konfiguration herumgeschlagen. Getestet haben wir bereits den "saslauthd"-Authentifizierungsmechanismus.

Den IMAP-Service selbst hatten wir dagegen noch gar nicht gestartet oder benutzt. Wir holen dies nun nach und testen dann den Zugriff zunächst rein per "telnet" (oder "imtest") und expliziten IMAP-Komandos. Ich finde es lehrreich, unabhängig von echten Mail-Clients auch mal die Kommandozeile zu nutzen.

Starten des Cyrus- IMAP-Servers

Wir starten den IMAP-Dienst:

systemctl start cyrus.service

Das sollte nach den Konfigurationsvorbereitungen der letzten Artikel anstandslos funktionieren ! Also etwa so:

mycyrus:~ # systemctl start cyrus.service
mycyrus:~ # systemctl status cyrus.service
cyrus.service - LSB: The cyrus-imapd mail system
Loaded: loaded (/etc/init.d/cyrus)
Active: active (running) since Wed 2014-03-12 19:56:23 CET; 7s ago
Process: 9392 ExecStop=/etc/init.d/cyrus stop (code=exited, status=0/SUCCESS)
Process: 9404 ExecStart=/etc/init.d/cyrus start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/cyrus.service
├─9412 /usr/lib/cyrus/bin/master -p /var/run/cyrus.pid -d
└─9417 idled
Mar 12 19:56:23 mycyrus master[9418]: about to exec /usr/lib/cyrus/bin/ctl_cyrusdb
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: checkpointing cyrus databases
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving log file: /var/lib/imap/db/log.0000000001
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving log file: /var/lib/imap/db/log.0000000001
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving log file: /var/lib/imap/db/log.0000000001
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving database file: /var/lib/imap/annotations.db
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving database file: /var/lib/imap/mailboxes.db
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: archiving log file: /var/lib/imap/db/log.0000000001
Mar 12 19:56:23 mycyrus ctl_cyrusdb[9418]: done checkpointing cyrus databases
Mar 12 19:56:23 mycyrus master[9412]: process 9418 exited, status 0

Danach "enablen" wir den Service mal prophylaktisch:

mycyrus:~ # systemctl enable cyrus.service

Anlegen von Mailverzeichnissen für unsere Test-Userin "tarja"

Wir legen nun gezielt eine Mailbox mit Subfoldern für unsere Testuserin "tarja" an. Dazu benutzen wir die "cyradm"-Umgebung:

mycyrus:/etc/pam.d # su - cyrus
cyrus@mycyrus:~> cyradm
cyradm> connect localhost
Password:
localhost> cm user.tarja
localhost> cm user.tarja.Drafts
localhost> cm user.tarja.Sent
localhost> cm user.tarja.Spam
localhost> cm user.tarja.Junk
localhost> cm user.tarja.Archive
localhost> lm user.tarja.*
user.tarja.Archive (\HasNoChildren) user.tarja.Sent (\HasNoChildren)
user.tarja.Drafts (\HasNoChildren) user.tarja.Spam (\HasNoChildren)
user.tarja.Junk (\HasNoChildren)
localhost> exit
cyrus@mycyrus:~> exit
Abgemeldet
mycyrus:/etc/pam.d #

Test des Remote-Zugangs

Nun testen wir von einem Remote-Host "tux" aus, ob wir den IMAP-Dienst auf "mycyrus" erreichen können. Ich setze voraus, dass alle Firewall-Einstellungen so gesetzt sind, dass ein Zugang über den Standard Imap-Port 143 möglich ist. Mehr benötigen wir bei Anwendung von STARTTLS nicht. Erstmal remote über "telnet" von einem anderen Linux-System "tux" aus :

tarja@tux:~> telnet mycyrus 143
Trying 192.168.0.88...
Connected to mycyrus.
Escape character is '^]'.
* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID STARTTLS AUTH=PLAIN AUTH=LOGIN SASL-IR COMPRESS=DEFLATE] mycyrus Cyrus IMAP v2.3.16 server ready
starttls login tarja TARJAPWD
starttls OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID LOGINDISABLED COMPRESS=DEFLATE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT SORT=MODSEQ THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE CATENATE CONDSTORE SCAN IDLE X-NETSCAPE URLAUTH] User logged in
r list all "*"
r OK Completed (0.000 secs 1 calls)
r list "" "*"
* LIST (\Noinferiors) "." "INBOX"
* LIST (\HasNoChildren) "." "Archive"
* LIST (\HasNoChildren) "." "Drafts"
* LIST (\HasNoChildren) "." "Junk"
* LIST (\HasNoChildren) "." "Sent"
* LIST (\HasNoChildren) "." "Spam"
* LIST (\HasNoChildren) "." "Trash"
r OK Completed (0.000 secs 8 calls)
s select Drafts
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)]
* 2 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1394475578]
* OK [UIDNEXT 3]
* OK [NOMODSEQ] Sorry, modsequences have not been enabled on this mailbox
* OK [URLMECH INTERNAL]
s OK [READ-WRITE] Completed
t search all
* SEARCH 1 2
t OK Completed (2 msgs in 0.000 secs)
E fetch 1 (body[text])
* 1 FETCH (BODY[TEXT] {6}
test
)
E OK Completed (0.000 sec)
. logout
* BYE LOGOUT received
. OK Completed
Connection closed by foreign host.
tarja@tux:~>

Man erkennt nach der Initiierung des Dialogs, dass der Cyrus IMAP-Server zunächst seine Fähigkeiten - u.a. STARTTLS- ausweist. Das explizit abgesetzte "starttls"-Kommando funktioniert entsprechend problemlos.

Ferner sieht man, dass habe ich danach einige IMAP-Kommandos an den Server abgesetzt habe. Welche IMAP-Kommandos es gibt und wie man mit ihrer Hilfe unter "telnet" oder "imtest" direkt mit dem IMAP-Server kommunizieren kann, erfährt man z.B. hier:

http://www.skytale.net/blog/archives/23-Manual-IMAP.html
http://www.tcpipguide.com/free/t_IMAPOverviewHistoryVersionsandStandards.htm
http://donsutherland.org/crib/imap
http://adityo.blog.binusian.org/?tag=telnet-imap-command
http://busylog.net/telnet-imap-commands-note/
http://help.notify.net/TechDocs/enterprise/Troubleshooting/NetHelp/index.html?turl=WordDocuments%2Fotherimapcommands.htm

Jedes IMAP-Kommando wird durch einen Klein- oder Groß-Buchstaben oder einen "." am Anfang der Zeile mit anschließendem Blank eingeleitet. Dieser Buchstabe ist syntaktisch erforderlich; er erleichtert die Orientierung im Kommandoablauf und zeigt anhand abschließender Bestätigungsmeldungen zu gleichen Startbuchstaben am Anfang der Zeile an, welche Antworten zu welchem Kommando gehören.

Einen ähnlichen Dialog mit dem IMAP-Dienstes hätte man auch im Rahmen des Testkommando "imtest" führen können:

imtest -v -t "" -a tarja -u tarja -m login mycyrus

Das Absetzen des imtest-Kommandos erlaubt es einem zudem, den Austausch von TLS-Informationen direkt zu verfolgen. Das kann jeder mal selbst testen. Zu "imtest"findet man weitere Infos auf der man-Seite:
http://linux.die.net/man/1/imtest
http://www.cyrusimap.org/docs/cyrus-imapd/2.3.16/man/imtest.1.php

Der aufmerksame Leser wird beim Studieren des obigen IMAP-Dialogs unter "telnet" natürlich mitbekommen haben, dass ich dort im Ordner Drafts zwei Mails gefunden und eine davon sogar geöffnet habe. Natürlich muss man sich fragen, wie das vor sich gehen soll, wenn der Folder "Drafts" doch gerade erst angelegt wurde. Keine Sorge: Die Mails kommen nicht aus dem Nirwana; ich hatte sie dort vorab händisch reinkopiert, um zeigen zu können, dass man Mails auch über telnet öffnen kann.

Im nächsten Teil
Cyrus IMAP mit SASL, PAM, SSSD und LDAP – Opensuse 12.3/13.1 – IV
kümmere ich mich dann um eine Kmail-Anbindung an unseren offenbar funktionstüchtigen IMAP-Server, der unsere Testuserin "tarja" erfolgreich über ein LDAP-System authentifiziert hat.