Instalace majordoma pro sendmail

Pro informování našich zástupců jsem potřeboval nainstalovat nějaký
systém pro rozesílání mailů a SMSek na určitou skupinu adres. Vytvoření
aliasů pro sendmail jsem zavrhnul, protože bych se pak sám musel starat
o aktualizace souboru `etc/aliases`. Pomocí majordoma by se o zařazování a
vyhazování z mail seznamu starala jiná osoba bez nutnosti mít přístup
jako root (a vůbec hrabat se na serveru). Správu se bude provádět přes
posílání mailů majordomovi.

Majordom jako rpm je např. na adrese http://ftp.ms.cuni.cz. Po stáhnutí
souboru se provede `rpm -i majordomo-1.94.1-4.i386.rpm`. Program se
nainstaluje do `/usr/lib/majordomo/, /usr/man/majordomo/,
/usr/doc/majordomo/`. Poté je potřeba vytvořit skupinu `majordom`,
uživatele `majordom` ($$adduser majordom$$) a adresáře podle
`/etc/majordomo.cf` (`/var/lib/majordomo/archive,
/var/lib/majordomo/digest, /var/lib/majordomo/lists,/var/log/majordomo),
soubor /var/log/majordomo/majordomo.log` ($$touch var/log/majordomo/majordomo.log$$).
Jako vlastnika všech nainstalovaných
a vytvořených souborů a adresářů nastavit na `majordom`, skupina
`majordom`.

Nastavit `chmod /usr/lib/majordomo (770), /var/lib/majordomo (750),
/var/lib/majordomo/lists (770!), /var/lib/majordomo/archive (770!),
/var/lib/majordomo/digest (770), /var/log/majordomo (774)`.

Dále je třeba upravit senmailový soubor `/etc/aliases`.

Příklad:

$$$
# obecne pro majordoma
majordomo: |"usr/lib/majordomo/wrapper majordomo"
owner-majordomo: majordomo-owner
majordomo-owner: majordom
majordom: joe

$$$
# pro kazdy maillist tady "novinky"
novinky: "|/usr/lib/majordomo/wrapper resend -p bulk -M 10000 -l
novinky -f novinky-owner -h vase-domena.cz -s novinky-outgoing"
novinky-owner: owner-novinky
novinky-outgoing: :include:/var/lib/majordomo/lists/novinky, novinky-archive
novinky-archive: /var/lib/majordomo/archive/novinky
novinky-request: "|/usr/lib/majordomo/wrapper request-answer novinky"
novinky-digest: novinky
novinky-approval: novinky-owner
owner-novinky-digest:novinky-owner
owner-novinky-request: novinky-owner
owner-novinky-digest-outgoing:novinky-owner
owner-novinky: bill,

Program funguje tak, že se posílá mail na speciální adresy.
Přihlašování, odhlašování apod. na "majordomo@vase-adresa.cz", příspěvky
na "novinky@vase-adresa.cz". Sendmail pro příchozí mail spustí program
/usr/lib/majordomo/wrapper, který ho dál zpracuje (buď si odchytí řídící
příkazy např. subscribe, unsubscribe, lists, apod.) nebo rozesílá mail
na zaregistrované adresy (novinky-outgoing, sendmail natáhne adresy ze
seznamu udržovaného majordomem :include:/var/lib/majordomo/lists/novinky
a uloží do archívu /var/lib/majordomo/archive/novinky). Pokud se žádá
něco od majordoma (např. lists) tak ty jsou směrovány na
novinky-request, novinky-approval je pro moderátora maillistu.

Tady nastávají problémy s právy. Sendmail běží většinou jako "mail/mail"
(nastavuje se v etc/sendmail.cf O DefaultUser=UID:GID). Musí mít tedy
právo spouštět /usr/lib/majordomo/wrapper, který další zpracování
provádí už jako "majordom/majordom" (logování, údržbu
/var/lib/majordomo/lists/novinky, lockování /usr/lib/majordomo/, apod.).

Spuštění ./wrapper config-test majordomo z /usr/lib/majordomo. Perlový
program vypíše problémy. V manuálu radí spustit ne jako "root" nebo
"majordom", ale mě dával lepší výsledky z "root"a než jako normální
uživatel. Nejlepší by bylo ho spustit jako "mail". Po odstranění
zobrazených chyb (nejsou 100%) přistoupíme k rozchození aliasů
sendmailu.

Posláním mailu na majordomo@vase-domena.cz otestujeme co se stane. Mě se
vytrvale vracela hláška

sh: wrapper not available for sendmail program
554 "|/usr/lib/majordomo/wrapper majordomo" ... service unavailable

Po hodinách zkoumání práv a prohledání webu jsem narazil na vysvětlení,
že sendmail spouští bezpečný shell "smrsh". Všechny soubory, které má
spustit se musí uložit jejich symbolické linky do urs/adm/sm.bin (nebo
/etc/smrsh). Po vložení linku
/etc/smrsh/@wrapper->usr/lib/majordomo/wrapper je to ok. Podobný případ
je pří zapisování do archívu /var/lib/majordomo/archive/novinky (udělat
link /etc/smrsh/@archive-novinky->/var/lib/majordomo/archive/novinky).

Nyní by mělo jít zadat povel majordomovi "subscribe novinky". A zkusit
poslat zkušební zprávu na "novinky". Teďko se pro změnu vrací chyba
"Group writable directory" znamenající, že sendmail nepoužije z
bezpečnostních důvodů include, protože chmod má nastavený skupinový
write. Je nutno buď předělat vlastníky, práva nebo v /etc/sendmail.cf
nastavit "O UnsafeGroupWrites=False", "O
DontBlameSendmail=groupwritabledirpathsafe,includefileinunsafedirpath,
includefileinunsafedirpathsafe" a restartovat sendmail). Teď ještě
chvíli vzdoroval hláškou "Permision denied" a pak se rozběhl a běží.

Product
Majordomo
Version
1.94