(2007-07-08)
eisfair :: HowTo – Mutt und GnuPG – Installation und Konfiguration
Wer gleich loslegen will, kann die ersten beiden Abschnitte überspringen und bei Punkt 3 weiterlesen.
Die Motivation
Noch ein HowTo über Mutt und GnuPG? Warum? Dazu muss man sagen, das war alles ganz anders geplant, doch zunächst, wieso überhaupt mutt?
Mein eisfair-Server läuft Tag und Nacht rund um die Uhr. Wenn ich gerade nicht direkt am PC arbeite, wozu benötige ich dann einen Rechner? Er spielt Musik ab, Mail-Programm und Browser sind an und der Instant Messenger läuft während vielleicht noch ein Chatroom offen ist. Nebenbei lese ich, bastel oder tue ähnliche Sachen, wo die Aufmerksamkeit nicht primär dem Rechner gilt. Warum also nicht die verbliebenen Aufgaben einem Rechner übertragen, der sowieso läuft? Musik ist kein Problem für eisfair dank des Music Player Daemon, Instant Messenger wird super durch mICQ und centericq abgedeckt, wobei letzterer auch IRC-Chat unterstützt (irssi hab ich wegen fehlerhaftem Perl leider noch nicht komplett kompilieren können). Wenn man mal ein paar Stunden auf den Browser verzichten kann, schaltet man alle anderen Rechner aus und bräuchte nur noch E-Mail, da die Mails sowieso auf dem Server liegen, fehlt nur noch das passende Programm: mutt! Daneben kann das auch noch ein zusätzlicher Vorteil sein, weil ein Kommandozeilenprogramm auch noch über eine langsame SSH-Verbindung bedienbar bleibt, wenn der fette Webmailer schon schnauft.
Die Motivation für GnuPG lasse ich hier mal außen vor. Warum es sinnvoll ist, seine Mails zu verschlüsseln und zu signieren wurde an vielen anderen Stellen erläutert. Gesagt sei hier nur, dass aktuelle Versionen der beteiligten Programme zum Einsatz kommen und sich daher die Einrichtung nicht mehr ganz so wie in den klassischen HowTos gestaltet. Zudem gehe ich noch speziell auf Eigenheiten von eisfair ein, deshalb ein neues HowTo.
Verwendete Versionen
Für die Einrichtung war es für mich zunächst notwendig einige Programme neu zu kompilieren. Da ich das zuvor auch bereits bei anderen so gehandhabt hatte, hab ich gleich eisfair-Pakete draus gemacht. Ich hatte darüber nachgedacht ähnlich wie beim muttrc builder auch was für das eisfair Setup-Menü zu basteln, aber da sich mutt sowieso eher an fortgeschrittene Nutzer wendet, die eigentlich gar nicht die Zielgruppe von eisfair sind, fand ich dort Aufwand und Nutzen in einem zu schlechten Verhältnis. Die vorkompilierte Software ist dennoch in Pakete gewandert, weil es das erstens einfacher macht, mein Produktivsystem sauber zu halten und zweitens dieses HowTo leichter nachzuvollziehen ist.
eisfair-Pakete (Mindestanforderungen)
- mutt 0.1.4 (intern 1.5.16)
- gnupg 0.3.4 (intern 1.4.7)
- gnupg2 0.1.1 (intern 2.0.4)
- pinentry 0.1.0 (intern 0.7.2)
Zu diesen Paketen kommen noch zahlreiche, die durch Paketabhängigkeiten abgedeckt und automatisch mit installiert werden. Ich habe bewusst aktuelle Pakete verwendet und beim Kompilieren von Mutt die native Unterstützung für S/MIME und PGP abgestellt, weil das durch GPGME übernommen wird. Das Problem daran: es gibt kaum brauchbare HowTos dazu im Internet, also war Doku lesen und ausprobieren angesagt. Ich fasse alles wichtige, um mutt mit GnuPG einzurichten nun zusammen.
GnuPG einrichten
Da mutt gegen GPGME kompiliert ist, erfolgt die Eingabe der Passphrase für GnuPG stets über gpg-agent und pinentry. gpg-agent ist Teil des Paketes gnupg2. Die Einrichtung wird nicht bei der Installation durchgeführt, sondern muss von Hand vorgenommen werden. Dazu muss im Homeverzeichnis (z.B. /home/nutzer/ ) in die Datei .profile folgendes eingefügt werden. Wenn .profile nicht existiert, einfach neu anlegen.
if /usr/bin/test -f ${HOME}/.gpg-agent-info && \ /bin/kill -0 `/usr/bin/cut -d: -f 2 ${HOME}/.gpg-agent-info` 2>/dev/null then GPG_AGENT_INFO=`/bin/cat ${HOME}/.gpg-agent-info` export GPG_AGENT_INFO else eval `/usr/bin/gpg-agent --daemon` /bin/echo ${GPG_AGENT_INFO} >${HOME}/.gpg-agent-info fi
Dann ist es noch nötig pinentry zu installieren und in /home/nutzer/.gnupg/gpg.conf die Zeile # use-agent in use-agent zu ändern. Sollte die Datei nicht vorhanden sein, einfach mal gpg benutzen, dann wird die erzeugt. Pinentry selbst bringt nur die ncurses Version mit und ist praktisch fertig eingerichtet.
Automatisch öffentliche Schlüssel runterladen
Wenn man Mailinglisten wie die von Debian oder GnuPG abonniert, bekommt man recht viele signierte Mails. Damit man nicht jeden öffentlichen Schlüssel einzeln suchen und importieren muss, kann man GnuPG so einrichten, dass die automatisch von einem Keyserver bezogen werden. Dazu müssen folgende Zeilen in der gpg.conf auskommentiert oder eingefügt werden:
keyserver hkp://subkeys.pgp.net keyserver-options auto-key-retrieve
Das war's auch schon, GnuPG ist damit für mutt fertig konfiguriert.
Mutt einrichten
Konzept für ein- und ausgehende Mails
Bei eisfair und bei mir gibt es besondere Gegebenheiten, auf die ich in diesem HowTo Rücksicht nehme. Das ist zum einen die bereits skizzierte Einrichtung von GnuPG, zum anderen läuft auf vielen eisfair-Servern das Paket mail. Ich benutzte Beispielsweise den Server als IMAP-Server, um mit verschiedenen Clients von verschiedenen Rechnern meine Mails lesen zu können. Der Mail-Server sollte also der einzige sein, der Zugriff auf die Mail-Dateien hat. Daher wird mutt mit IMAP eingerichtet. Das ermöglicht zusätzlich die leichte Anpassung der Konfiguration, wenn gerade kein Mail-Paket installiert ist.
Für ausgehende Mail käme zunächst die Standardvariante mit sendmail in Frage, das Teil des Mail-Paketes ist. Das funktioniert, aber wenn jetzt doch kein Mailserver läuft, kommt man nicht weiter. Glücklicherweise unterstützt mutt seit einiger Zeit SMTP und das wird für dieses HowTo auch genutzt. Somit unterscheidet sich die Server-Konfiguration zwar von klassischen mutt-Installationen, dafür aber weniger von der meist bekannten Einrichtung z.B. eines Thunderbird.
Das dritte Augenmerk liegt auf der Konfiguration des Farbschemas für mutt. Da ich sehr häufig mit SSH unterwegs bin und mir oft nicht aussuchen kann (oder will) ob das Schema des SSH-Clients »schwarz auf weiß« oder »weiß auf schwarz« ist, sollte die Einrichtung der Farben dies berücksichtigen – dazu später mehr.
Struktur der Konfiguration
Theoretisch kann man die ganze Konfiguration von mutt in eine Datei $HOME/.muttrc packen. Praktisch kann man das auch besser strukturieren. Ich habe also in meinem Home-Verzeichnis das Unterverzeichnis .mutt angelegt. Die Kernteile der Konfiguration wandern dann in die Datei muttrc in diesem Ordner. Daneben habe ich noch folgende Dateien angelegt, die dann so nach und nach mit Inhalt gefüllt werden. Kleine Erinnerung: Ordner anlegen mit mkdir, Dateien anlegen mit touch, editieren auf eisfair mit joe, vi oder mcedit, wenn man den Midnight Commander installiert hat.
alex@poldy:alex> cd .mutt/ alex@poldy:.mutt> ls aliases certificates colors lists muttrc send-hooks
Datei $HOME/.mutt/muttrc
Ich habe mir die Hauptdatei der Konfiguration (die muss übrigens genau so (!) heißen, damit mutt die findet) in verschiedene Abschnitte gegliedert. Im folgenden werden diese Abschnitte zunächst jeweils zitiert und dann besprochen. Man erhält seine muttrc, indem man den Inhalt jedes einzelnen Blocks nacheinander in die Datei schreibt… ;-) Wie die Konfiguration selbst funktioniert, d.h. was set und unset bedeuten, wann man welche Gänsefüßchen benutzt usw. kann man in der Doku von mutt nachlesen.
##### aliases ########################################################## set alias_file= ~/.mutt/aliases set sort_alias= alias source $alias_file
Aliases sind im Grunde Abkürzungen für Kontakte, man könnte das auch einfach als Adressbuch bezeichnen. Wenn mutt beim Starten wegen der Datei mault, einfach mit touch ~/.mutt/aliases anlegen. Einträge hinzufügen kann man später von mutt aus.
##### mail stuff ####################################################### set reverse_name set realname = 'Alexander Dahl' set from = "post@lespocky.de" set use_from = yes alternates "post@alexander-dahl.de|lespocky@web.de" set forward_format = "Fwd: %s"
Dies hier dient der Handhabung von mehreren E-Mail-Adressen. Zunächst wird der Realname und die Adresse angegeben, die ich standardmäßig für ausgehende Nachrichten verwende. Allerdings bekomme ich auch Mails an post@alexander-dahl.de und lespocky@web.de. Damit beim Antworten gleich mal die Mail-Adresse als Absender angegeben ist, an die die urspüngliche Nachricht ging, gibt man diese alternates an. Die letzte Zeile setzt das Format der Betreff-Zeile für weitergeleitete Nachrichten. Muss man nicht setzen, der Default-Wert von mutt gefällt mir aber nicht.
##### encryption ####################################################### ### crypto set crypt_autoencrypt = no set crypt_autopgp = yes set crypt_autosign = yes # default: no set crypt_autosmime = no # default: yes set crypt_replyencrypt = yes set crypt_replysign = yes # default: no set crypt_replysignencrypted = yes # default: no set crypt_timestamp = yes set crypt_use_gpgme = yes # default: no set crypt_verify_sig = yes set pgp_auto_decode
Dies sind die Optionen für das Zusammenspiel mit GnuPG. Es
werden (bis auf eine Ausnahme) keine Optionen gebraucht, die
mit 'pgp' oder 'smime' anfangen, da alles durch die Bibliothek
GPGME abgewickelt wird, daher auch:
set crypt_use_gpgme = yes
Die anderen Optionen sagen so sinngemäß aus, dass alle
ausgehenden Mails mit PGP (nicht aber mit SMIME) signiert aber
nicht verschlüsselt werden. Antworten auf verschlüsselte Mails
werden auch verschlüsselt und unterschrieben und alle
Unterschriften (egal ob PGP/MIME oder klassisch inline) werden
automatisch geprüft.
set certificate_file = ~/.mutt/certificates unset ssl_starttls
Will man die Mails verschlüsselt zu IMAP- oder SMTP-Server übertragen, wird es ein wenig kniffelig. Wenn man mutt auf der gleichen Maschine wie IMAP- und SMTP-Server laufen hat, ist das nicht unbedingt nötig. Da mutt aber per default erstmal versucht eine verschlüsselte Verbindung aufzubauen, muss man die Parameter wie oben setzen, um die Verschlüsselung auszuschalten. Ich selbst benutze ein Konfiguration mit Verschlüsselung. Bei Interesse bitte per Mail melden!
##### server ########################################################### set imap_user = alex unset imap_pass set folder = imap://alex@localhost/ set spoolfile = +INBOX set record = +Sent set postponed = +Drafts unset imap_passive # Don't wait to enter mailbox manually # Automatically poll subscribed mailboxes for new mail (new in 1.5.11) unset imap_check_subscribed mailboxes =Lists/debian =Lists/eisfair =Lists/exfa =Lists/impuls-svn \ =Lists/impuls-team =Lists/micq =Lists/micq-cvs =Lists/mtk \ =Lists/mutt +INBOX save-hook .* +Junk # Reduce polling frequency to a sane level set mail_check=90 set timeout=30 set move=no set smtp_url = smtp://alex@localhost
Die Konfiguration für den Zugriff auf den IMAP-Server erfordert einige Zeilen. Zunächst wird der Nutzer gesetzt. Passwort kann man auch in diese Konfigurationsdatei eintragen, ist aber natürlich ein Sicherheitsrisiko, deshalb hier nicht drin. Mit folder, spoolfile, record und postponed setzt man die wichtigsten IMAP-Ordner. Falls man auf eisfair das Paket archimap verwendet, ist unset imap_check_subscribed besonders wichtig. Das hindert mutt daran in allen Ordnern, also auch den archivierten, nach neuen Mails zu schauen. Das macht mutt deutlich schneller! Hinter mailboxes gebe ich dann die Ordner explizit an, die mutt regelmäßig auf neue Nachrichten checken soll.
Das save-hook danach ermöglicht mir mit zwei schnellen Tastendrücken eine Mail in den Junk-Ordner zu verschieben. Eigentlich dient die Taste 's' dazu, Mails in einen anderen Ordner zu verschieben, als Vorschlag für den Zielordner wird hier halt Junk ausgewählt, das lässt sich natürlich in mutt wieder ändern, letztlich also eine Bedienungsfrage.
Die zeile mit smtp_url ist selbsterklärend, sorgt darüber hinaus aber noch dafür, dass sendmail nicht verwendet wird. Die Zeilen darüber sind noch wichtig, damit regelmäßig nach neuen Mails geschaut wird und damit gelesene Mails in ihren Ordnern bleiben und nicht einfach verschoben werden.
##### appearance ####################################################### set sort=threads set pager_index_lines = 5 set index_format = "%4C %Z %{%b %d} %-15.15F (%?l?%4l&%4c?) %s" source ~/.mutt/colors set history = 10 set history_file = ~/.mutt/history ignore * unignore from date subject to cc unignore user-agent hdr_order from date subject to cc user-agent
Kommen wir zum spannenden Teil der Config, dem
Look&Feel. Mutt macht schon sinnvolle Vorgaben, aber das
lässt sich optimieren… ;-)
Die erste Zeile hier veranlasst mutt Mails in Baumstruktur
anzuzeigen, gerade bei Mailinglisten ein unverzichtbares
Feature. Die Zeile danach sorgt dafür, dass beim Anschauen
einer Mail (der Teil der Bedienoberfläche heißt Pager in mutt)
darüber noch ein Ausschnitt des Index, also der Liste mit den
Mails im Ordner angezeigt wird. Danach habe ich den Teil
verändert, der bestimmt, was in der Liste der Mails angezeigt
wird. Im Grunde hab ich hier die Default-Einstellung nur in
einem winzigen Punkt geändert. Da ich für Mails von
Mailinglisten jeweils eigene Ordner habe, muss ich mir in
einer Index-Zeile den Namen der Mailingliste nicht anzeigen
lassen, sondern hab das auf den Absender korrigiert. D.h. im
Grunde wird jetzt immer, auch bei Mails an Mailinglisten, der
Absender angezeigt.
Nach der Zeile, die die Einstellung für die Farben einbindet (kommen wir gleich noch drauf), noch eine kleine Einstellung für die Bedienung von internen Eingabezeilen in mutt und dann der letzte Absatz: hier stelle ich ein, welche Header-Zeilen der Mail mutt mir anzeigen soll. Zunächst sag ich ihm mit ignore *, dass er gar keine Header-Zeile anzeigen soll. Danach sind die Header angegeben, die ich sehen will und dann nochmal in welcher Reihenfolge die angezeigt werden sollen.
##### mailing lists #################################################### source ~/.mutt/lists ##### print ############################################################ set print_cmd = "a2ps"
Dies sind noch die letzten Beiden Kommandos. Hier sieht man auch nochmal, wie weitere Dateien (mit dem gleichen Format) in die Konfiguration eingebunden werden und dann ist noch ein Kommando zum Drucken angegeben. An meinem Eis hängt am Parallelport direkt ein Postscript fähiger Laserdrucker, sodass es zum Drucken von Mails genügt, die nochmal durch a2ps zu jagen.
Farben in mutt
Mutt liefert in seinem Quellarchiv zwei »Farbschemen« mit. Das eine ist optimal für helle Schrift auf dunklem Grund, das andere für dunkle Schrift auf hellem Grund. Da man über SSH auf den unterschiedlichsten Konsolen arbeitet, bräuchte man ein Schema für beides und genau das hab ich versucht umzusetzen:
color index green default "~N|~O" color index cyan default "~g !~N !~O" color index brightdefault default "~G !~N !~O" color index magenta default "~P" color index red default "~D" ### header color hdrdefault black cyan color header brightyellow cyan ^From: #color header black cyan ^To: #color header black brightcyan ^Reply-To: #color header black brightcyan ^Cc: color header brightyellow cyan ^Subject: ### quoted text color quoted green default color quoted1 cyan default color quoted2 green default color quoted3 cyan default color quoted4 green default color quoted5 cyan default color quoted6 green default color quoted7 cyan default color quoted8 green default color quoted9 cyan default ### stuff color signature brightmagenta default color attachment black white #color message default default color error red white #color indicator black red color status brightgreen blue #color tree white black #color normal white black #color markers red black #color search white black #color tilde brightmagenta black #color index blue black ~F #color index red black "~N|~O" ### higlighting color body brightdefault default ' \*+[^*]+\*+ ' color body brightdefault default ' _+[^_]+_+ ' color body brightdefault default ' /+[^/]+/+ ' #color bold brightwhite default #color underline brightwhite default
In diesem Block steckt alles, was man an Farben konfigurieren kann. Ich persönlich komme damit sehr gut klar. Da der Rest beinahe selbsterklärend ist, noch kurz die Erklärung für den ersten Block: Im Index sind ungelesene Nachrichten grün, gelöschte Nachrichten rot. Von allen anderen sind signierte Nachrichten cyan, Nachrichten von mir selbst magenta und verschlüsselte Nachrichten hervorgehoben. Letzteres sieht auf jeder Konsole anders aus, so dass diese Hervorhebung auf einigen Konsolen nicht zu sehen ist, aber das ist nicht so wild.
Abschließende Worte
Zu guter letzt nochmal die Sache mit den Mailinglisten, ich will ja keinen dumm sterben lassen:
subscribe ^mutt-users@mutt\\.org$ lists @lists\\.sourceforge.net$ subscribe ^impuls-svn@lists\\.sourceforge\\.net$ subscribe ^dml@lists\\.solnet\\.ch$ subscribe ^micq-list@micq\\.org$ subscribe ^micq-cvs@micq\\.org$ lists @lists\\.debian\\.org$ subscribe ^debian-user-german@lists\\.debian\\.org$ subscribe ^gnupg-de@gnupg\\.org$
So das reicht dann aber auch hier. Wer Fehler findet, oder Anregungen und Kritik loswerden möchte, schreibt's mir per Mail, am besten mit mutt ;-)