lsm ist ein leichtgewichtiger Ersatz für sendmail, um Nachrichten an lokale Benutzer zu schicken.
Wer Nachrichten von fehlgeschlagenen Cron-Jobs empfangen oder die eigenen Webmailer lokal testen will, kennt das Problem: Wer opfert gerne 11.264 KB Plattenplatz für einen MTA wie sendmail und 72.704 KB für das Paket mailutils mit einem MUA, nur um ab und zu eine Warn-Mail vom eigenen System zugestellt zu bekommen? Das ist das Gegenteil von einem schlanken System und unnötig, da 99 % der Mail-Funktionalität nicht genutzt wird.
Aus diesem Grund gibt es lsm, das nur 14 KB groß ist und E-Mails rein an lokale Nutzer ausliefert. Es ersetzt hierin MTA und MDA und bietet sich für Desktop-Rechner oder Home-Server an; für Einsätze unter Produktiv-Servern ist das Programm nicht gedacht:
lsm nimmt dazu in der Rolle eines MTA eine (meist gemäß RFC-2822 [1] vorformatierte) Nachricht von stdin entgegen und stellt sie als MDA im Mbox-Format [2] unter /var/mail/ in die Inbox des Adressaten, von wo sie später mit mail abgeholt werden kann:
jane$ ls -la /var/mail drwxrwsr-x 2 root mail 4096 Feb 4 21:22 . drwxr-xr-x 11 root root 4096 Sep 7 16:30 .. -rw------- 1 jane mail 149 Feb 4 21:45 jane -rw------- 1 sue mail 90 Feb 4 21:24 sue -rw------- 1 root mail 151 Feb 4 21:45 root
Es versteht die wichtigsten Aufrufoptionen von sendmail und kann wie dieses direkt von der Kommandozeile eine einfache Nachricht senden (das Shell-Script mailtest im Installationspaket von lsm nutzt diese Funktion). Ermittelt lsm keinen Empfänger, schickt es die Nachricht an root. Empfänger können jedoch wie bei sendmail durch einen Eintrag in der Datei /etc/aliases umgesteuert werden (kein Aufruf von newaliases erforderlich). Im nachfolgenden Beispiel werden alle Nachrichten an root und sue an jane umgeleitet:
# /etc/aliases root: jane sue: jane
Hierbei sind auch Joker möglich, so daß z. B. alle Nachrichten – egal an wen – zu einem anderen Nutzer umgeleitet werden können:
# /etc/aliases *: jane
Der Empfänger wird über die Kommandozeile festgelegt oder durch lsm mit der Option -t aus der Nachricht (To:) ermittelt. Ohne Absender auf der Kommandozeile wird MAILER-DAEMON als Absender eingesetzt. Wird die Nachricht direkt auf der Kommandozeile eingegeben, kann sie mit einem einzelnen Punkt auf einer Zeile beendet werden; mit der Option -i ist die Nachricht hingegen nur durch EOT (Ctl-D) beendbar. Die Option -? druckt eine Hilfe:
lsm/0.2 - Local Sendmail Replacement Usage: sendmail [-itv?] [-oi] [-bm] [-f sender] [recipient] -bm Ignored -i Ignore single dots in message -oi Like -i -t Scan message for recipient -v Verbose -? This help
Im Archiv enthalten sind zudem 3 (optionale) Shell-Skripte:
1. mailtest schickt an den aktuellen Benutzer eine Testnachricht.
2. mailcheck meldet neue Nachrichten bei textbasierten Logins: You have mail. Der Aufruf vom Skript muß dazu in die Startdatei ~/.profile eingetragen werden.
Anm: Bei aktuellen Systemen mit PAM wird mailcheck nicht benötigt, da diese Meldung bereits systemseitig durch den Eintrag session optional pam_mail.so standard in der Datei /etc/pam.d/login erfolgt.
3. mail zeigt Nachrichten der Inbox /var/mail/$USER an und verschiebt diese danach in die lokale Mailbox ~/mbox. Damit bildet es die Empfangsfunktion eines MUA nach:
Das Programm benötigt Linux. Falls die Gruppe mail nicht existiert, ist sie anzulegen, z. B. mit sudo groupadd mail oder sudo addgroup mail. Existieren make oder gcc nicht, können sie mit apt install build-essential nachinstalliert werden.
Empfehlenswert ist anschließend die Prüfung auf Virusfreiheit und Authentizität.
Das Archiv wird in ein beliebiges Benutzerverzeichnis ausgepackt:
root# tar -xvf lsm.tgz lsm.c mail mailcheck mailtest makefile
In diesem Verzeichnis wird mit make install die Installation gestartet (dafür braucht es administrative Rechte, also entweder sudo make install, oder su - und dann make install).
Die Installation erstellt das Programm lsm und kopiert es nach /usr/local/bin. Zudem wird eine Verknüpfung /usr/sbin/sendmail zum Programm angelegt, da andere Programme sendmail genau mit diesem Pfad aufrufen. Das Programm bekommt bei der Erstellung die Rechte SETUID und SETGID, um die Inboxen für andere Benutzer so anzulegen, daß jeder Benutzer nur seine Inbox lesen kann, sowie CHOWN und FOWNER, um falsche Berechtigungen der Inboxen ggf. zu korrigieren:
root# make install # Compiling lsm ... cc -s -Os -olsm lsm.c chown root:mail lsm mail mailcheck mailtest setcap cap_setuid,cap_setgid,cap_chown,cap_fowner=ep lsm # Installing lsm ... mv lsm /usr/local/bin/ cp -p mail mailcheck mailtest /usr/local/bin/ ln -fs /usr/local/bin/lsm /usr/sbin/sendmail
Ein Test mit dem Shell-Skript mailtest, ob das Programm funktioniert:
root# mailtest Delivering mail from MAILER-DAEMON to inbox /var/mail/root. Now run 'mail' to see if this message found its way into your inbox ...
Das Shell-Skript mail zeigt die Inbox an. Da es less nutzt, ist es mit q zu quittieren:
root# mail From MAILER-DAEMON Thu Feb 6 19:31:28 2024 Subject: Test Hello root, if you can read this it means lsm was successfully installed. q New mails moved from /var/mail/root to ~/mbox.
lsm wird im Regelfall nicht direkt vom Nutzer aufgerufen, sondern von Cron-Jobs oder Web-Mailern. Wer dennoch direkt anderen Nutzern eine Nachricht schreiben will, kann dies dennoch tun (Ende mit Punkt):
jane$ /usr/sbin/sendmail -v -fjane sue Hallo Sue, dies ist eine Textnachricht. Viele Grüße Jane . Delivering mail from jane to inbox /var/mail/sue.
mail hingegen wird durch Benutzer aufgerufen, um die Post abzuholen:
login: sue password: **** You have mail. sue$ mail From jane Thu Feb 6 20:24:06 2024 Hallo Sue, dies ist eine Textnachricht. Viele Grüße Jane q New mails moved from /var/mail/sue to ~/mbox.
Über make uninstall erfolgt die Deinstallation. Es werden wie bei der Installation adminstrative Rechte benötigt.