Cyruse kasutamine Postfixi ja Debianiga
Sisukord
- 1 Sissejuhatus
- 2 Cyrus tarkvara paigaldamine
- 3 Cyruse seadistamine
- 4 PostgreSQL andmebaasi ettevalmistamine
- 5 PAM komponendi ettevalmistamine
- 6 SASL komponendi ettevalmistamine
- 7 Cyruse administratiivne kasutaja ja kasutajate haldus
- 8 Kirjade automaatne jagamine postkastidesse
- 9 Cyruse seadistamine käima koos Postfixiga
- 10 Cyrus tarkvara uuendamine
- 11 Kontorist väljas teadete saatmine
- 12 TLS kasutamine
- 13 Kasutaja autentimine Kerberosega
- 14 Kasulikud lisamaterjalid
- 15 Kommentaarid
Sissejuhatus
Postkastihalduse tarkvara Cyrus sisaldab muu hulgas selliseid komponente
- haldusvahendid (cyradm programm)
- imap server
- pop3 server
- testkliendid (IMAP serveri testklientprogramm imtest)
Cyrus tarkvaraga saab pealnäha sarnase tulemuse, so postkastide pidamise saavutada üsna mitmel erineval moel. Käesolev tekst kirjeldab järgmisete omadustega juhtumit
- kõik Cyruse protsessid töötavad ühes ja samas operatsioonisüsteemi eksemplaris
- Cyruse imap klientide andmed tulevad välisest PostgreSQL andmebaasist SASL ja omakorda PAM abil
- Postfix kasutab PostgreSQL andmebaasi, millest saab teada millistele aadressidele tuleb teha local delivery Cyruse abil
- Cyruse postkastidesse saabuvad kirjad Postfix MTA'st LMTP protokolli kasutamise teel
- Cyruse postkastidele on ligipääs IMAP ja POP3 serverite kaudu, krüptitud ja krüptimata andmevahetust võimaldades
Sellisel moel käivitatud Cyruse kasutuselevõtmiseks tuleb sooritada näiteks selline tegevuste järgnevus
- paigaldada vajalik hulk Cyrus'e komponent
- valmistada ette PostgreSQL andmebaas
- valmistada ette PAM komponent
- valmistada ette SASL komponent
- seadistada Cyrusele administratiivne kasutaja ning tekitada tavakasutajale postkast
- seadistada Cyrus käima koos Postfixiga
Cyrus tarkvara paigaldamine
Cyrus'e paigaldamiseks tuleb öelda
# apt-get install cyrus-pop3d-2.2 cyrus-imapd-2.2 cyrus-doc-2.2 cyrus-clients-2.2 cyrus-admin-2.2 libsasl2-modules libsasl2-2 sasl2-bin
Cyrus tarkvara seadistamine toimub peaasjalikult seadistusfaili /etc/imapd.conf muutmise teel. Selleks, et Cyrus kasutaks SASLi antud juhtumi jaoks sobival moel, peavad failis /etc/imapd.conf sisalduma read
sasl_mech_list: PLAIN sasl_pwcheck_method: saslauthd
Cyrus käivitusskript on
# /etc/init.d/cyrus2.2
Cyruse tööd kontrollivad lisaks olulised failid seadistusfailide kataloogist (ingl. k. configuration directory), vaikimisi /var/lib/cyrus
- /var/lib/cyrus/proc - kataloogis asuvad teenust parasjagu kasutavate kasutajate protsessiinfo failid
- /var/lib/cyrus/quota - kataloogis asuvad kasutajate kvootide määratlused
- /var/lib/cyrus/user - kataloogis asuvad kasutajate .seen ja .sub failid
- /var/lib/cyrus/mailboxes.db -
- /var/lib/cyrus/deliver.db -
- /var/lib/cyrus/tls_sessions.db -
- /var/lib/cyrus/annotations.db -
Cyruse seadistamine
Cyruse tööd juhivad põhiliselt kaks seadistufaili
- /etc/cyrus.conf - üldine seadistusfail
- /etc/imapd.conf - imapi ja ka muude üldiste seadistuse seadistamise fail
PostgreSQL andmebaasi ettevalmistamine
PostgreSQL andmebaasi tabelit kasutatakse kahel eesmärgi
- Cyruse IMAP ja POP3 kasutajate autentimiseks vajalikud andmed
- Postfix'i jaoks kirjade postkastidesse kopeerimiseks vajalikud andmed
CREATE TABLE skeeminimi.cyrus_auth ( cyrus_auth_id serial NOT NULL, username character varying(20), passwd character varying(32), expire_status character(1), newtok character(1), asutus character varying(60), alias character varying(60), rcpt character varying(60), eesnimi character varying(60), perenimi character varying(60), isikukood character varying(11), CONSTRAINT cyrus_auth_id_pkey PRIMARY KEY (cyrus_auth_id) )
PAM komponendi ettevalmistamine
PostgreSQLi andmebaasi kasutamiseks peab paigaldama paketi üldotstarbelise paketi libpam-pgsql
# apt-get install libpam-pgsql
PAM komponendi ettevalmistamine toimub failide /etc/pam.d/imap, /etc/pam.d/pop ning /etc/pam_pgsql.conf abil
# cat /etc/pam.d/imap (sama ka failis /etc/pam.d/pop) auth required pam_pgsql.so account required pam_pgsql.so password required pam_pgsql.so
ning
# cat /etc/pam_pgsql.conf host = andmebaasi.hostname database = andmebaasinimi user = cyrus_auth password = cyrus_auth_parool table = skeeminimi.tabelinimi user_column = username pwd_column = passwd expired_column = expire_status newtok_column = newtok debug pw_type = md5
Iseenesest ei ole see vajalik Cyruse kasutamise seisukohalt, aga andmebaasi ühenduse katsetamiseks võib paigaldada ka PostgreSQL kliendi
# apt-get install postgresql-client
SASL komponendi ettevalmistamine
SASL kompoenendi seadistamine toimub faili /etc/default/saslauthd abil, antud juhtumil on oluline, et SASL deemon oleks käivitatav
START=yes
ning et SASL töötaks vastu PAM'i
MECHANISMS="pam"
Cyruse administratiivne kasutaja ja kasutajate haldus
Cyrus töö käigus kasutatakse mitmeid nö andmebaase
- kirjade andmebaas - failisüsteemis salvestatakse iga kiri eraldi faili, vaikimisi asub see kataloogis /var/spool/cyrus/mail; igas postkasti kataloogis on lisaks kirjadele alati kolm faili, cyrus.cache, cyrus.index ja cyrus.header
- postkastide andmebaas - failis /var/lib/cyrus/mailboxes.db on kirjas süsteemi Cyrus kasutajate ja nende postkastide andmebaas ning mida redigeeritakse cyradmin programmiga
- duplikaatide andmebaas - failis /var/lib/cyrus/deliver.db on andmebaas, mida Cyrus kasutab topelt-sõnumite avastamiseks (nt kui saabub sama message id ja ümbriku väärtusega kiri mitu korda; käsuga '/usr/sbin/ctl_deliver -d' näeb selle baasi sisu)
- Cyruse kasutajate andmebaas - antud juhul asub PostgreSQLi andmebaasis
Cyruse administratiivse kasutaja kasutajanimi on kirjas seadistusfailis /etc/imapd.conf, näiteks võiks selleks olla 'cyrus'
admins: cyrus
Administratiivne kasutaja saab kasutada cyradmin programmi teistele kasutajatele Cyruse postkastide moodustamiseks. Enne kui kasutajana cyrus saab cyradmin programmi kasutada, peab olema see kasutaja PostgreSQL andmebaasi lisatud.
Postisüsteemi kasutaja moodustamiseks tuleb kasutaja administratiivse kasutajana cyrus moodustada esmalt sellele kasutajale postkast öeldes
$ cyradm --user cyrus localhost IMAP Password: localhost.localdomain> cm user.mart localhost.localdomain> sq user.mart 200000 localhost.localdomain> quit
kus
- cm user.mart - create mailbox
- sq user.mart 200000 - set quota 200 MB kasutajale
Lisaks tuleb kasutaja mart lisada ka PostgreSQL andmebaasi. Seejärel saab kasutaja mart üle IMAP protokolli süsteemi logida. Testimiseks sobib kasutada Cyrus tarkvaraga kaasa tulevat imap klienti imtest, näiteks selliselt
$ imtest -a mart -u mart localhost -w mardiparool S: * OK smtp2a Cyrus IMAP4 v2.2.13-Debian-2.2.13-14+b3 server ready C: C01 CAPABILITY S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE S: C01 OK Completed C: L01 LOGIN mart {7} S: + go ahead C: <omitted> S: L01 OK User logged in Authenticated. Security strength factor: 0 . list "" "*" * LIST (\HasChildren) "." "INBOX" . OK Completed (0.000 secs 6 calls) . logout * BYE LOGOUT received . OK Completed Connection closed.
Postkastide haldamise üheks eesmärgiks on seada õigused, millised kasutajad saavad kasutada milliseid postkaste. Vaikimisi on ainult kasutajal endal piiranguteta ligipääs enda postkastile ja seal all olevatele kataloogidele. Cyrus võimaldab ühe kasutaja postkastile või selle mõnele kataloogile lisaks tekitada ligipääsu teise kasuja jaoks. Nt selleks, et kasutaja mart postikasti kataloogi user.mart.bugtraq näeks ka kasutaja priit tuleb öelda cyruse administraatoril
localhost.localdomain> sam user.mart priit lr localhost.localdomain> lam user.mart mart lrswipcda priit lr
Ühe kasutaja postkastile teisele kasutaja jaoks ligipääsu võimaldamise abil saab moodustada nn shared foldereid ja bulletin board'e, mis sisuliselt on nö pseudokasutajale kuuluvad postkastid. Tavaliselt on vastavatele postkastidele antud lugemisõigus mitmetele kasutajatele ning mõnele lisaks rohkem õigusi, nt seal kirjade või sinna kirjade kopeerimine kustutamine. Näiteks võiks sellise shared folderi kasutamine toimuda eesmärgiga, et nii ei pea iga üksik kasutaja oma personaalsele aadressile tellima listi kirju. Et kasutaja saaks ligi teise kasutaja välja jagatud postkasti kataloogile tuleb tal enda postiprogrammi abil sinna ennast subskribeerida.
2008 aasta kontekstis võib tunduda selline IMAP tarkvara kasutamine grupitöövahendina suhteliselt kohmakas, kuid teatud tingimustel võib olla see ka jätkuvalt asjakohane.
Kasutaja kustutamiseks peab olema kustutajal piisavalt õigusi, nt võiks sobida selline järgnevus, postkasti user.mart kustutab kasutaja priit
localhost.localdomain> sam user.mart priit lrswipcda localhost.localdomain> dm user.mart
Kirjade automaatne jagamine postkastidesse
Cyrus tarkvara koosseisu kuuluv sieve (ingk. k. sõel) võimaldab nt kirja päise ridade alusel korraldada kirjade salvestamist kasutaja postkasti erinevatesse kataloogidesse (ingl. k. folder).
Selleks tuleb esmalt moodustada tekstifail, nt
$ cat /var/spool/sieve/m/mart/default require "fileinto"; if header :contains "List-Id" "debian-mirrors.lists.debian.org" { fileinto "INBOX.d-m";} elsif header :contains "To" "mart.kask@loomaaed.tartu.ee" { fileinto "INBOX.@loomaaed.tartu.ee";} else { fileinto "INBOX";}
Antud juhul ütleb sieve fail, et
- kirjad, mille päises List-Id: rida sisaldab väärtust debian-mirrors.lists.debian.org tuleb kopeerida kataloogi d-m
- kirjad, mille päises To: rida sisaldab väärtust mart.kast@loomaaed.ee tuleb kopeerida kataloogi @loomaaed.ee
- ülejäänud kirjad kopeeritakse lihtsalt inboxi
Tööks tuleb tekstifaili alusel moodustada nn byte-code fail öeldes
$ /usr/lib/cyrus/bin/sievec /var/spool/sieve/m/mart/default /var/spool/sieve/m/mart/defaultbc
Subject kasutamisel tuleb arvestada, et nn täpitähtede puhul on subject kodeeritud.
Cyruse seadistamine käima koos Postfixiga
Selleks, et Postfix annaks LMTP (Local Mail Transport Protocol) protokolli abil kirjad edasi Cyrusele sobib kasutada Postfixi transport'i. Transport moodustatakse tekitades tekstifail
# cat /etc/postfix/transport loomaaed.tartu.ee lmtp:unix:/var/run/cyrus/socket/lmtp
ning öeldes
# postmap /etc/postfix/transport
mille tulemusena tekib Berkeley DB andmebaasi formaadis fail
/etc/postfix/transport.db
Moodustatud transporti kasutamiseks peab /etc/postfix/main.cf failis sisalduma rida
transport_maps = hash:/etc/postfix/transport
Kusjuures, selleks, et kasutaja postfix saaks sellesse unixi soketisse kirjutada, peab nt lisama postfix kasutaja gruppi mail ning nt kontrollima /etc/postfix/master.conf failis, et lmtp juures ei oleks chroot kirjeldatud.
Kui Cyruse kasutajate andmed on kirjas nt PostgreSQL andmebaasis, siis tuleb lisaks paigaldada postfix-pgsql pakett, mille lisamisel tehakse sissekanne faili /etc/postfix/dynamicmaps.cf ning lisada seadistusfaili main.cf rida
virtual_alias_maps = pgsql:/etc/postfix/cyrus.cf relay_domains = loomaaed.tartu.ee
kus /etc/postfix/cyrus.cf sisu on
user = cyrus_auth password = parool hosts = baas.loomaaed.tartu.ee dbname = postisysteem table = loomaaed.cyrus_auth select_field = rcpt where_field = alias
Tööks peab olema /var/run/cyrus/socket kataloogil sobivad loabitid ja omanikud, nt selline variant töötab, kasutaja peab ise hindama, kas see on talle sobiv
# groupadd lmtp # id postfix uid=102(postfix) gid=105(postfix) groups=105(postfix),107(lmtp) # dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket # ls -ld /var/run/cyrus/socket drwxr-x--- 2 cyrus lmtp 4096 Jun 22 18:11 /var/run/cyrus/socket
Selleks, et Postfix saaks kirjutada nö absoluutsesse /var/run/cyrus/socket/lmtp soketisse peab /etc/postfix/master.cf failis olema rida
# ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== ... lmtp unix - - n - - lmtp
Cyrus tarkvara uuendamine
Cyrus tarkvara järgmised versioonid sisaldavad reeglina vigade parandusi ja uut funktsionaalsust kusjuures tavaliselt säilib olemasolev funktsionaalsus. Reeglina Cyrus tarkvara uuendamisel kasutajate andmed säilitatakse asendades Cyruse nn mootori uuema versiooni vastu. Üldiselt tuleb vanast versioonist võtta kaasa sellised andmed
- andmete partitsioonile vastav kataloog (nt 'partition-default: /srv/cyrus/mail'), st kasutajate kirjad
- uusi seadistusfaile tuleb kohendada olemasolevate alusel, /etc/cyrus.conf ja /etc/imapd.conf
- kopeerida cyrus deemonite sertifikaadid
- andmed kasutajate autoriseerimiseks, pam seadistused /etc/pam_pgsql.conf, /etc/pam.d/{imap,pop}, andmebaas kasutajate nimede/paroolidega
- postkastide andmebaas, /var/lib/cyrus/mailboxes.db
- kasutajate quotad, /var/lib/cyrus/quota
- kasutajate sieve'id, /var/spool/sieve
- kasutajate postkastide olekud, loetud/lugemata kirjade eristused jms, /var/lib/cyrus/user, nn *.seen andmebaasid
Uuenduse tegemisel tuleb tutvuda cyrus-doc-* paketist upgrade'i juhendiga. Tavaliselt juhitakse seal tähelepanu lisaks muudele asjaoludele sellele, et andmebaaside (mailboxes.db, *.seen jt) formaadid oleksid sobivad. Vajadusel saab neid baase teisendada, nt
$ /usr/sbin/cvt_cyrusdb /var/lib/cyrus/mailboxes.db skiplist \ /var/lib/cyrus/mailboxes.db-berkeley berkeley
teisendab skiplist foraadis baasi berkeley formaati.
Lisaks, tundub, et kui uude süsteemid kopeerida mailboxes.db, siis samal ajal tuleks kustutada sellised failid, samal ajal peab Cyrus seisma
$ ls -ld annotations.db deliver.db tls_sessions.db db/* db.backup*/* proc/* socket/*
Need moodustatakse käivitamisel uuesti.
Kontorist väljas teadete saatmine
Kuna Postfix + Cyrus kasutamisel kasutajal ei ole postimasinas oma Unixi kasutajat ega kodukataloogi, siis ei saa kasutada nn ~/.forward faili vacationi abil kontorist väljas teadete saatmiseks.
Alternatiiv programmi vacation kasutada oleks tekitada nt selline asjakorraldus
- paigaldada vacation programm
# apt-get install vacation
- lisada süsteemi kasutaja:grupp kkp:kkp ('kasutaja kes puhkab')
# groupadd kkp # useradd -g kkp -m -d /home/kkp kkp
- tekitada /etc/aliases faili sissekanne
kkp: "/dev/null" mart-vacation: mart-loomaaed@loomaaed.tartu.ee, "|/usr/bin/vacation -a mart -a mart.kask \ -f /home/kkp/mart/.vacation.db -m /home/kkp/mart/.vacation.msg -r infinite kkp"
kus faili .vacation.msg sisu on nt selline
Subject: Out of Office From: Mart Kask <mart@loomaaed.tartu.ee> Content-Type: text/plain; charset=ISO-8859-15 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Tere Olen puhkusel, tagasi tööle saabun 21. jaanuaril. Kiireloomuliste küsimuste puhul palun helistada. Mart Kask Tartu Loomaaed
ning failide loabitid ja omanikud võiksid olla nt sellised
find /home/kkp/ -ls 303138 4 drwxr-xr-x 4 kkp kkp 4096 Dec 31 14:09 /home/kkp/ 303145 4 drwxrwxrwx 2 root root 4096 Dec 31 14:30 /home/kkp/mart 303146 12 -rw------- 1 nobody nogroup 12288 Dec 31 16:03 /home/kkp/mart/.vacation.db 303147 4 -rw-r--r-- 1 root root 314 Dec 31 14:30 /home/kkp/mart/.vacation.msg
- kasutaja kontorist väljas teadete sisselülitamiseks kasutada virtual maps andmebaasis sissekandeid
mart@loomaaed.tartu.ee -> mart-vacation@localhost mart.kask@loomaaed.tartu.ee -> mart-vacation@localhost mart-loomaaed@loomaaed.tartu.ee -> mart@cyrus.loomaaed
Süsteemi töö kontrollimiseks peab kasutajale kirja saatmisel tulema üks kord vastus automaatselt tagasi faili .vacation.msg sisuga ning kiri ise jõudma kasutajale siiski kohada, esimesel ja järgnevatel kordadel.
Faili .vacation.db sisu saab esitada öeldes
# vacation -l -f /home/kkp/mart/.vacation.db priit@loomaaed.tartu.ee Thu Dec 31 14:26:44 2009 tiit.kask@eesti.ee Thu Dec 31 14:26:45 2009
TLS kasutamine
TLS sisselülitamiseks sobib kasutada seadistusfailis /etc/cyrus.conf rida
imaps cmd="imapd -s -U 30" listen="imaps" prefork=0 maxchild=10
ning seadistusfailis /etc/imapd.conf ridu, kusjuures on oluline, et need failid oleksid cyrus kasutajale loetavad
tls_cert_file: /etc/ssl/certs/cyrus-imap.pem tls_key_file: /etc/ssl/private/cyrus-imap.key
Seejärel saab postikliendis valida nt IMAP puhul kas TLS (port 143) või SSL (port 993) ühenduseks ning andmevahetus toimub üle krüptitud kanali.
Kasutaja autentimine Kerberosega
Kerberose kasutaja autentimiseks peab olema kasutada Kerberose infrastruktuur, nt selline nagu kirjeldatud tekstis MIT Kerberose kasutamine Debianiga. Seejuures tuleb arvestada, et kuigi autentimine on iseenesest turvaline ei ole andmevahtus üle avatekstina töötava IMAPi turvaline.
IMAP teenuse seadistamiseks peab Kerberose andmebaasis ning IMAP serveris olema /etc/krb5.keytab'is sissekanne
imap/imap.loomaaed
ning /etc/imapd.cyrus seadistusfailis rida
auth_mech: krb5
Testimiseks sobib öelda
$ kinit ... $ imtest -m GSSAPI imap.loomaaed S: * OK debian-testing-2 Cyrus IMAP4 v2.2.13-Debian-2.2.13-19 server ready C: C01 CAPABILITY S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT \ CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE \ AUTH=CRAM-MD5 AUTH=NTLM AUTH=DIGEST-MD5 AUTH=GSSAPI SASL-IR S: C01 OK Completed C: A01 AUTHENTICATE GSSAPI YIICVwYJKoZIhvcSAQICAQBuggJGMIICQqADAgEFoQMCAQ6iBwMFACAAAACjggFiYY\ IBXjCCAVqgAwIBBaEGGwRBVVVMoigwJqADAgEDoR8wHRsEaW1hcBsVZGViaWFuLXRl\ c3Rpbm ... S: + YIGZBgkqhkiG9xIBAgICAG+BiTCBhqADAgEFoQMCAQ+iejB4oAMCARKicQRvf8PRKuAnsQUIbT3\ VyCy+hm6iw4uAMff6Hd87N8Jf81pKpQr7riO1CtDsD2HKy5Bjm9pcZJxEAmUjPgvU8G+YK4+i2c\ uwPXMF9ORM5B5/1A3+i3CpsxxEeOMtJ8fdjS9hwRqRZ9b6XE7a3 C: S: + BQQF/wAMAAAAAAAANJN8hAcAEAAHt7QZz1bRXL7igCM= C: BQQE/wAMAAAAAAAAINorkwQABACOTW3utgQb8RQO/Pg= S: A01 OK Success (privacy protection) Authenticated. Security strength factor: 56
Selliselt ettevalmistatud Cyrus IMAP serverit saab kasutada nt Icedove ehk Thunderbird postikliendiga, kusjuures konto juures tuleb valida
Server Settings -> User secure authentication
Kasulikud lisamaterjalid
- Tarkvara kodulehekülg - http://cyrusimap.web.cmu.edu/
- IMAP protokolli kasutamise näited - http://bobpeers.com/technical/telnet_imap.php
- apt-get install cyrus-docs-2.2 ja seejärel vaadata brauseriga file:///usr/share/doc/cyrus-doc-2.2/html/index.html
Kommentaarid
See asi vajaks minuarust mingit mõnusat haldusliidest ka, praegu tundub see kasutajate halduse osa pisut segaseks ,et mis featuure debian ja cyrus pakub selles osas .......
jne