Instalace majordoma pro sendmail


Majordomo

1.94

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ěží.