Majordomo

Majordomo is natuurlijk het stuk code waar het in dit document om draait; het bestaat uit een verzameling Perl-scripts met als enige doel het beheren van discussielijsten.

Voorbereiden van de installatie

Download de met gzip gecomprimeerde broncodedistributie van de laatste versie van Majordomo vanaf Great Circle Associates en decomprimeer het
[jarchie@kes jarchie]$ tar zxvf majordomo-1.94.5.tar.gz
Hiermee zal een subdirectory worden aangemaakt met alle bestanden die nodig zijn om Majordomo te installeren; deze directory kan niet dezelfde directory zijn waarin Majordomo moet worden geïnstalleerd.

Majordomo moet zodanig worden uitgevoerd onder een specifieke UID en GID dat wanneer een van de scripts wordt uitgevoerd, het zal draaien onder Majordomo's UID. Dus is het nodig een besluit te nemen over onder welke UID en GID Majordomo zal draaien. Ook moet Majordomo een toevertrouwde gebruiker van Sendmail zijn (zie paragraaf Toevertrouwde gebruikers van sendmail).

Kijk in de bestanden /etc/passwd en /etc/group om een nog niet in gebruik genomen UID en GID te achterhalen. Voor dit voorbeeld werd gekozen voor UID 16 en GID 16. Je moet een beslissing nemen over de lokatie waar de Majordomo-scripts zullen voorkomen; in deze HOWTO werd gekozen voor de directory /usr/local/majordomo-1.94.5/. Voeg regels vergelijkbaar met
majordomo:x:16:16:Majordomo List Manager:/usr/local/majordomo-1.94.5:
toe aan /etc/passwd als je gebruik maakt van een shadow password bestand en voeg een van toepassing zijnde regel toe aan /etc/shadow.
majordomo:*:10883:0:88888:7:::
Gebruik de andere regels in deze bestanden als een richtlijn voor wat er precies zou moeten worden toegevoegd. Dit zijn slechts de waarden op mijn systeem. Als je geen gebruik maakt van shadow-passwords, dan is alleen een regel nodig in het bestand /etc/passwd.

Voeg voor de aanmaak van een Majordomo groep een regel toe vergelijkbaar met
majordomo:x:16:jarchie
aan het bestand /etc/group. Je gebruikersnaam toevoegen aan het einde van de regel geeft je toegang tot de Majordomo bestanden die schrijfbaar zijn voor de groep.

Bewerken van de installatiebestanden

De Makefile bevat alle informatie nodig om Majordomo te installeren; gewoonlijk moeten regels in de Makefile worden bewerkt die verwijzen naar systeemspecifieke instellingen zodat Majordomo zuiver op je systeem kan worden geïnstalleerd. De meeste standaardinstellingen zijn correct; echter de volgende instellingen, vrijwel onveranderlijk, moeten per systeem worden gewijzigd.
[jarchie@kes majordomo-1.94.5]$ vi Makefile
De instellingen
PERL = /bin/perl
CC = cc
W_HOME = /usr/test/majordomo-$(VERSION)
MAN = $(W_HOME)/man
W_USER = 123
W_GROUP = 45
zouden moeten worden gewijzigd in iets meer geschikt voor je systeem. In mijn setup bijvoorbeeld zijn de waarden gewijzigd in
PERL = /usr/bin/perl
CC = gcc
W_HOME = /usr/local/majordomo-1.94.5
MAN = /usr/man
W_USER = 16
W_GROUP = 16
Ook moet het bestand majordomo.cf worden aangemaakt. Een makkelijke manier om dit bestand aan te maken is door het aangeleverde bestand sample.cf te kopiëren naar majordomo.cf en het te bewerken.
[jarchie@kes majordomo-1.94.5]$ cp sample.cf majordomo.cf
[jarchie@kes majordomo-1.94.5]$ vi majordomo.cf
Nogmaals, de meeste standaardinstellingen zijn correct, maar de volgende regels moeten wellicht voor je systeem worden aangepast van
$whereami = "example.com";
$whoami = "Majordomo\@$whereami";
$whoami_owner = "Majordomo-Owner\@$whereami";
     $homedir = "/usr/test/majordomo";
$digest_work_dir = "/usr/local/mail/digest";
$sendmail_command = "/usr/lib/sendmail";
in iets meer passend zoals
$whereami = "kes.emeraldis.com";
$whoami = "majordomo\@$whereami";
$whoami_owner = "majordomo-owner\@$whereami";
     $homedir = "/usr/local/majordomo-1.94.5";
$digest_work_dir = "/usr/local/majordomo-1.94.5/digest";
$sendmail_command = "/usr/sbin/sendmail";
$whoami en $whoami_owner hoeven voor de werking van Majordomo niet te worden gewijzigd; ik wijzigde ze omdat ik het intikken van hoofdletters graag wil voorkomen. $digest_work_dir is een tijdelijke directory waarin de digest bestanden zouden moeten worden geplaatst; aan deze directory zou moeten worden toegekend de directory waarin je wilt dat de digests worden opgeslagen. Maak je niet druk om deze optie als je niet van plan bent om digest lijsten te gebruiken. $whereami, $homedir, en $sendmail_command zouden moeten worden gewijzigd in de van toepassing zijnde waarden voor je systeem. In tegenstelling tot de Makefile, kunnen deze opties altijd worden gewijzigd nadat Majordomo is geïnstalleerd door het bewerken van majordomo.cf in de directory waarin Majordomo werd geïnstalleerd. (Het configuratiebestand wordt simpelweg gekopieerd tijdens de setup.)

Majordomo installeren

De volgende stap bestaat uit het compileren van de Majordomo wrapper. De wrapper is de enige Majordomo component die moet worden gecompileerd, omdat al het andere bestaat uit een verzameling perl-scripts en daarom niet wordt gecompileerd.
[jarchie@kes majordomo-1.94.5]$ make wrapper
Geef voor de installatie van de Majordomo bestanden de opdrachten:
[root@kes majordomo-1.94.5]# make install
[root@kes majordomo-1.94.5]# make install-wrapper
De eerste opdracht kan als de Majordomo gebruiker (in de veronderstelling dat majordomo $home_dir kan aanmaken of hier toegang toe heeft), maar de tweede opdracht moet worden gegeven als root zodat het installatiescript kan SUID root de Majordomo wrapper. (Aangezien, majordomo werd aangemaakt zonder loginshell of wachtwoord, zul je als root de opdracht su majordomo moeten geven om majordomo te worden als je de eerste opdracht als majordomo uit wilt voeren.)

Aanmaken van de Majordomo aliassen

Sendmail aliassen moeten voor Majordomo worden aangemaakt zodat opdrachten verzonden naar Majordomo kunnen worden verwerkt door majordomo, en een alias voor de eigenaar van Majordomo moet worden aangemaakt, zodat mensen je kunnen mailen via het standaardadres owner-majordomo. Voeg de volgende regels toe aan het bestand aliases (zie paragraaf Aliassen).
majordomo:       "|/usr/local/majordomo-1.94.5/wrapper majordomo"
owner-majordomo: jarchie
majordomo-owner: jarchie

Testen van de configuratie

Start als reguliere gebruiker (niet als majordomo of als root)
[jarchie@kes jarchie]$ /usr/local/majordomo-1.94.5/wrapper config-test
Dit programma kan de meeste problemen in de Majordomo installatie detecteren.

Lijsten aanmaken

Voor het aanmaken van een lijst, maak je een bestand aan met de naam van de lijst in de Majordomo-directory lists. Voor bijvoorbeeld het aanmaken van een lijst met de naam test, maak je als Majordomo een bestand test aan
[root@kes /]# su majordomo
[majordomo@kes /]$ touch /usr/local/majordomo-1.94.5/lists/test
en voeg de gerelateerde aliassen toe
test:	       :include:/usr/local/majordomo-1.94.5/lists/test
owner-test:    jarchie
test-request:  "|/usr/local/majordomo-1.94.5/wrapper request-answer test"
test-approval: jarchie

Verder testen van de configuratie

Test nu de werking van de lijst door een lists opdracht aan Majordomo uit te voeren.
[jarchie@kes jarchie]$ echo lists | mail majordomo
Het zou slechts een seconde moeten duren eer majordomo antwoordt met een bericht waarin alle lijsten die thans zijn opgesteld zijn opgesomd. Probeer vervolgens de opdracht help uit te voeren.
[jarchie@kes jarchie]$ echo help | mail majordomo
Majordomo zou moeten reageren met een lijst met alle opdrachten die Majordomo accepteert. Het is wellicht een goed idee om het bericht voor toekomstige referenties te bewaren.

Probeer jezelf in- en uit te schrijven op de lijst om te achterhalen of de aliassen correct werken.
[jarchie@kes jarchie]$ echo subscribe test | mail majordomo
Je zult een E-mailbericht ontvangen met instructies hoe je de aanmelding kunt bevestigen als ook een melding bevestigend dat je opdracht succesvol was. Na het terugsturen van je bevestiging, zou Majordomo twee meldingen terug moeten sturen, één melding waarin staat dat je aanmeldingsverzoek succesvol was en een andere melding die je welkom heet op de lijst test. Aan de eigenaar van de lijst zal ook een bericht worden gezonden waarin staat aangegeven dat je je hebt aangemeld op de lijst.

Stuur de opdracht unsubscribe om je uit te schrijven van een lijst
[jarchie@kes jarchie]$ echo unsubscribe test | mail majordomo
Je zou een melding terug moeten krijgen waarin staat dat je opdracht succesvol was.

Betere aliassen aanmaken

Bij een aantal lijsten kan het wenselijk zijn om Majordomo de berichten te laten verwerken, voordat ze de lijst bereiken. Majordomo heeft bijvoorbeeld een resend script om berichten gebaseerd op inhoud (zoals woorden die taboe zijn) automatisch te filteren om te voorkomen dat mensen Majordomo opdrachten naar de lijst sturen, en nog andere features. Voor het gebruik van deze opties is het nodig een betere set aliassen te gebruiken, zoals
test:        "|/usr/local/majordomo-1.94.5/wrapper resend -l test test-list"
test-list:   :include:/usr/local/majordomo-1.94.5/lists/test
owner-test:  jarchie
test-owner:  jarchie
test-request:  "|/usr/local/majordomo-1.94.5/wrapper majordomo -l test"
De laatste regel maakt het iemand mogelijk om simpelweg een bericht te sturen naar test-request@kes.emeraldis.com met de tekst subscribe in plaats van het versturen van een bericht naar majordomo@kes.emeraldis.com met de tekst subscribe test. Als sendmail gebruik maakt van smrsh, dan zou de bovenstaande aliases verwijzen naar de kopie van de wrapper in het veilige pad, gewoonlijk /etc/smrsh/wrapper.

Fouten opsporen

Het gebeurt regelmatig dat de permissies van Majordomo niet correct worden ingesteld wat veroorzaakt dat Majordomo niet naar behoren werkt. Gelukkig geven Sendmail en Majordomo kenmerkend fatsoenlijke foutmeldingen die een probleem aanduiden. De directory lists bijvoorbeeld moet uitvoerbaar zijn voor de gebruiker sendmail setuids naar, typisch mail of daemon. Als sendmail lists niet kan uitvoeren, dan moeten de permissies wat minder strict zijn.
[root@kes root]# chmod +x /usr/local/majordomo-1.94.5/lists
Een ander gebruikelijk probleem wordt veroorzaakt doordat de directory lists schrijfbaar is door de groep. Als oplossing van dit probleem kan men de schrijfbare bit van de groep verwijderen of de sendmailoptie IncludeFileInGroupWritableDirPath gebruiken (zie paragraaf Schrijfpermissies van de groep en paragraaf Consequenties van onveilige te beschrijven groepen voor meer details).

Majordomo beveiligingskwesties

Majordomo is bedoeld te worden uitgevoerd op een geïsoleerd systeem; er bestaan een paar welbekende beveiligingslekken in de scripts waarmee elke lokale gebruiker wrapper kan draaien om code als de gebruiker majordomo uit te voeren. Als Majordomo op een systeem moet worden uitgevoerd die voorziet in gebruikers met toegang tot een shell, dan is het aan te raden de permissies op de wrapper te verscherpen. Dit kan worden bewerkstelligd door de uitvoerbare bit voor alle overige gebruikers te verwijderen en de groep van de wrapper met chgrp te wijzigen in de gebruiker die de Majordomo-scripts moet uitvoeren. Als bijvoorbeeld Sendmail en MajorCool beiden worden gebruikt om de wrapper uit te voeren, gebruik dan de opdrachten
[root@kes root]# cp /usr/local/majordomo-1.94.5/wrapper /etc/smrsh/wrapper
[root@kes root]# chmod 4750 /usr/local/majordomo-1.94.5/wrapper
[root@kes root]# chown root:nobody /usr/local/majordomo-1.94.5/wrapper
[root@kes root]# chmod 4750 /etc/smrsh/wrapper
[root@kes root]# chown root:mail /etc/smrsh/wrapper
om het systeem te beveiligen. Dit laat toe dat sendmail (onderwijl onder mail draaiend) /etc/smrsh/wrapper uit te voeren terwijl het toestaat dat de webserver's MajorCool (draaiend onder nobody) /usr/local/majordomo-1.94.5/wrapper uitvoert. Deze oplossing zal echter toestaan dat iedereen met het UID of GID mail of nobody ook toegang tot het majordomo account kan verkrijgen. Ter bescherming van het nobody account, is het van belang normale gebruikers niet toe te staan gebruik te laten maken van serversite includes of cgi-scripts, tenzij die services niet onder nobody draaien.