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
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.