Copyright ©2003.-2017. CARNet. Sva prava pridržana.
Mail to portal-team(at)CARNet.hr
Ova online knjiga je skup pojedinačnih članaka objavljenih kao pomoć sistemcima u konfiguraciji i korištenju Dovecot POP3/IMAP poslužitelja.
Ovaj članak se odnosi na inačicu dovecota 0.9. U novijim inačicama neki parametri se drugačije zovu, ili imaju malo drugačiji kontekst. Molimo provjerite dokumentaciju dovecota!
S vremena na vrijeme moramo se oprostiti od starih stvari i otići dalje. Tako se uskoro opraštamo i od CARNetovog paketa uw-imap-ssl-cn u korist novog, dovecot-cn.
Što je Dovecot? Dovecot je relativno novi (prvi public release je bio 2002. godine) POP3/IMAP poslužitelj, s određenim poboljšanjima u odnosu na druge poslužitelje. Dovecot zadržava kompatibilnost sa starim UW-IMAP-om, ali donosi poboljšanja u vidu sigurnosti, brzine, manjeg zauzimanja memorije i jednostavnosti konfiguriranja. Program podržava i module za proširenje funkcionalnosti, samooptimirajuće indekse te mnoge načine autentikacije uključujući i razne baze podataka.
Prvo je odmah uočljivo: jedan program umjesto dva zasebna, svaki sa svojim konfiguracijskim datotekama. Dovecot sve definira u datoteci /etc/dovecot/dovecot.conf, i gotovo da ne treba dodatnu konfiguraciju, sve radi odmah nakon instalacije.
Potrebno je napomenuti da paket uw-imap-ssl-cn_1.0 izdan 6. lipnja 2007. više ne sadrži UW-IMAP, nego je samo dummy paket napravljen s ciljem da donese dovecot-cn na sustav. Nakon toga paket uw-imap-ssl-cn možete slobodno obrisati sa sustava. Isto napravite i ako uopće ne želite dovecot na svom sustavu, jer tako nećete ni dobiti ovaj dummy paket, ali imajte na umu da podršku za WU imapd i ipopd nećemo još dugo pružati.
Od konfiguracije, skoro da nije ništa potrebno učiniti. Jedino treba provjeriti varijablu default_mail_env, jer možda na vašem sustavu nije postavljena kako treba. Ona je bitna, jer određuje gdje Dovecot traži vašu elektroničku poštu.
Preporučena (default) vrijednost varijable default_mail_env je:
default_mail_env = mbox:~/mail/:INBOX=/var/mail/%u
Ukoliko su Vaši mail folderi direktno u $HOME svakog korisnika i ne želite to mijenjati, promijenite varijablu default_mail_env u
default_mail_env = mbox:~:INBOX=/var/mail/%u
Nakon toga, naravno, treba napraviti
# /etc/init.d/dovecot restart
Pravi, i u konačnici uredniji, način je prebaciti sve mail foldere unutar $HOME/mail (/home/korisnik/mail) direktorija svakog korisnika. Kod ovog načina bi se mogli pojaviti određeni problemi, a pokušat ćemo ih raščlaniti i objasniti.
Kroz godine su se mijenjali IMAP i POP3 poslužitelji, koji su donosili svaki svoje default postavke. Tako u korisnikovom direktoriju može postojati jedan ili dva mail direktorija ($HOME/mail, $HOME/Mail), ili se mboxovi nalaze direktno u $HOME. Treba utvrditi koji su mboxovi aktualni, što možete učiniti preko datuma ili pregledom same datoteke. Da ne bi narušavali privatnost korisnika, možda je najbolje to učiniti preko datuma same datoteke.
Svakako prije daljnjih akcija napravite backup korisničkih podataka kako bi mogli vratiti eventualne greškom obrisane mailove.
Najjednostavniji backup /home direktorija možete napraviti ako napravite:
# tar cf /dev/st0 /home # backup na traku
ili
# tar czf /negdje/homes.tgz /home # backup u datoteku
1. Rješenje prvog problema, koji se javlja kod jednog dijela korisnika koji su u nekom trenutku rabili neki mail klijent iz shella, pine, elm ili mutt se može provesti bez opasnosti.
Mail shell korisnika je nakon čitanja obično bio premještan u $HOME/mbox, umjesto u direktorij $HOME/mail. Ovaj problem će riješiti donja skripta, i neće prouzrokovati probleme korisnicima koji nemaju tu datoteku:
cd /home
/etc/init.d/postfix stop
for user in *; do
if [ -d $user -a -e $user/mbox ]; then
cat $user/mbox >> /var/mail/$user
mv $user/mbox $user/mbox.backup
fi
done
/etc/init.d/postfix start
Najgore što se može dogoditi kod pokretanja ove skripte je da će pojedini korisnici možda dobiti stare poruke, ali njih mogu lako obrisati.
2. Drugi problem se javlja ukoliko vam se mailbox folderi (datoteke INBOX.Drafts, INBOX.Sent i slično) ne nalaze u $HOME/mail, nego primjerice u $HOME ili $HOME/Mail.
Sljedeća skripta prebacuje sve mailbox datoteke iz $HOME u $HOME/mail, i ujedno čuva sve stare datoteke tog imena u $HOME/mail, ako postoje (uz nastavak .old). Skripta kreira direktorij $HOME/mail ukoliko ga nema, te prepravlja .mailboxlist popis foldera i kopira ga/preimenuje u $HOME/mail/.subscriptions. Nadalje, skripta kreira simbolički link Mail -> mail, kako bi svi budući programi spremali svoje mboxove baš u $HOME/mail. Skripta se može više puta pokretati, jer neće dirati već obrađene direktorije.
#!/bin/sh
/etc/init.d/dovecot stop
cd /home
export SIMPLE_BACKUP_SUFFIX=.old
for user in *
do
if [ -d "$user" -a -e "$user/.mailboxlist" ]; then
if [ -d "$user/Mail" -a -d "$user/mail" ]; then
echo "UPOZORENJE: korisnik $user ima i direktorij Mail i mail!"
echo "Prebacite (ili ostavite) novije mboxove u \$HOME/mail i"
echo "obrisite Mail i napravite 'ln -s mail Mail'"
fi
if [ -d "$user/Mail" -a ! -d "$user/mail" ]; then
echo "Preimenujem direktorij $user/Mail -> $user/mail..."
mv --backup=existing $user/Mail $user/mail
fi
if [ ! -d "$user/Mail" -a -d "$user/mail" ]; then
echo "Kreiram simbolicki link $user/Mail -> $user/mail..."
cd $user
ln -s mail Mail
cd ..
fi
if [ ! -d "$user/mail" -a ! -d "$user/Mail" ]; then
echo "Kreiram direktorij $user/mail..."
mkdir $user/mail
fi
# konvertiramo .mailboxlist
sed 's#[mM]ail/##g' < $user/.mailboxlist \
> $user/mail/.subscriptions.tmp
while read line
do
# izuzeci
if [ "$line" = "MailINBOX.Drafts" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Drafts
continue
fi
if [ "$line" = "MailINBOX.Sent" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Sent
continue
fi
if [ "$line" = "MailINBOX.Trash" ]; then
mv --backup=existing "$user/$line" $user/mail/INBOX.Trash
continue
fi
# premjestamo mboxove...
if [ -e "$user/$line" ]; then
mv --backup=existing "$user/$line" $user/mail
fi
done < $user/mail/.subscriptions.tmp
sed 's#MailINBOX\.#INBOX\.#g' < $user/mail/.subscriptions.tmp \
> $user/mail/.subscriptions
rm -f $user/mail/.subscriptions.tmp
mv --backup=existing $user/.mailboxlist $user/mailboxlist.old
# postavljamo pravo vlasnistvo
uid=`getent [2]passwd $user | awk -F: '{print $3}'`
gid=`getent [2]passwd $user | awk -F: '{print $4}'`
chown -R $uid:$gid $user/mail
fi
done
/etc/init.d/dovecot start
(više o naredbi getent pročitajte u ovom članku [2])
Kako bi se svi folderi prikazali u mail klijentu, možda će biti potrebno resetiranje popisa IMAP mapa u klijentima. U OE je to Tools -> IMAP folders -> Reset list. Za Squirrelmail, potrebno je definirati sljedeće u /etc/squirrelmail/config.php:
$default_folder_prefix = '';
Ovo će omogućiti da Squirrelmail prikaže sve foldere na koje ste pretplaćeni, u protivnom, kreirat će se direktorij $HOME/mail/Mail (s INBOX.* datotekama), a dostupan će biti samo /var/mail/korisnik.
3. Sljedeći do sad detektirani problem je problem koji leži u klijentskoj strani. Outlook Express bi se mogao zbuniti nakon prelaska na novi POP3/IMAP poslužitelj. Ako je broj poruka neodgovarajući, ili se mailbox ne može otvoriti, probajte obrisati te ponovo dodati korisnika u OE. Ako se pronađe bolje rješenje od ovog, bit će objavljeno. Dodatno, ukoliko korisnik rabi "leave messages on server" opciju, morat će ponovo skinuti sve poruke. Razlog tomu je što su i stari qpopper i ipop3d rabili malo drugačiji format POP3 UIDL zastavice, koji dovecot ne prepoznaje. Nakon preuzimanja svih poruka toga problema više neće biti.
Alternativno, u dovecot.conf možete upisati
pop3_uidl_format = %08Xv%08Xu
što će omogućiti Dovecotu da rabi UIDL zastavice u UW-POP3 formatu, pa se ovaj problem neće javiti.
Ukoliko u vašoj mreži ima miješanih starijih i novijih Outlook klijenata, možda bi bilo dobro ubaciti u dovecot.conf i ovaj redak:
client_workarounds = oe6-fetch-no-newmail outlook-idle outlook-pop3-no-nuls
Za kraj, u dovecot je izuzetno lagano dodati certifikat, dovoljno je imati ove tri postavke:
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/mojserver.pem
ssl_key_file = /etc/ssl/certs/mojserver.key
Ne treba napominjati da je potrebno datoteku s vašim ključem zaštititi od čitanja tako da je čitljiva samo vlasniku (obično root).
Dodatne informacije potražite na adresi http://www.dovecot.org [3]. Na kraju ćemo kao kuriozitet spomenuti da autor Dovecota nudi 1000 EUR bilo kome tko otkrije sigurnosni propust u njegovom programu! Pa, navalite....
Nakon nadogradnje na izdanje wheezy, neki kolege su prijavili probleme poput duplih mailova u sandučićima svoje e-pošte, nemogućnost brisanje mailova iz Inboxa i slične čudne pojave. Iako problem podsjeća na situaciju s POP3 UIDL-ovima, koju smo opisali u članku http://sistemac.carnet.hr/node/380 [7], uzrok nije ni u najmanju ruku jednak.
Problem nastaje ukoliko rabite format mbox (dakle klasični /var/mail) umjesto Maildir, što je slučaj kod velike većine kolega. Dovecot mora kreirati lock datoteku, kako ne bi neki drugi proces pokušao pisati u vaš inbox (npr. postfix) dok ga Dovecot drži otvorenim za čitanje i pisanje. Da bi to mogao, mora imati dovoljne privilegije, ili ovlasti root korisnika ili biti član grupe mail, u kojoj bi trebao biti svaki inbox unutar direktorija /var/mail.
Uzroci ovih simptoma se mogu pronaći u /var/log/mail.log:
Sep 1 08:49:51 server dovecot: imap(korisnik): Error: file_dotlock_create(/var/mail/korisnik) failed:
Permission denied (euid=1033(korisnik) egid=1033(korisnik) missing +w perm: /var/mail,
we're not in group 8(mail), dir owned by 0:8 mode=0775) (set mail_privileged_group=mail)
Ne, nije dovoljno samo staviti korisnika dovecot u grupu "mail" (zapravo, uopće ne treba). Potrebno je negdje u kofiguraciju Dovecota upisati sljedeći redak (baš onako kako poruka u logu i savjetuje):
mail_privileged_group = mail
Ali, gdje je to "negdje u konfiguraciju Dovecota"? Dovecot, kao i sve više drugih paketa u Debianu, rabi konfiguracijski direktorij conf.d, gdje se smještaju dijelovi konfiguracije. Prije se to sve nalazilo u jednoj velikoj datoteci (u ovom slučaju) dovecot.conf. Razlog je taj što je tako jednostavnije maintainerima konfigurirati tuđe pakete, jednostavno dodajući dijelove konfiguracije koje se tiču njihovih paketa.
Za sistemce situacija sada više nije tako jednostavna, ali zato postoji naredba grep:
# grep mail_privileged_group * 10-mail.conf:#mail_privileged_group = 95-cn7-upgrade.conf:mail_privileged_group = mail
Vidimo da se navedena opcija nalazi u datoteci 10-mail.conf i da nije postavljena ni na koju vrijednost (zakomentirana je). Isto tako, vidimo da je naknadno postavljana kako treba, ali u drugoj datoteci, koju je kreirala CARNetova instalacijska procedura. Funkcionalno je svejedno gdje ćete je upisati, ali kod nadogradnji ćete dobiti čuveno pitanje "želite li zamijeniti ili zadržati konfiguraciju" ukoliko je upišete u 10-mail.conf.
Inače, preporučujemo da promjene u tim direktorijima upišete u vlastite datoteke, tipa 99-local.conf, ili da budete sigurni da je to vaša konfiguracija, 99-lokalno.conf ili nešto što inače rabite. Tako ćete odmah prepoznati da datoeka ne pripada paketu.
Ostalo je napraviti još nešto:
# cd /var/mail # chmod 600 /var/mail/* # chgrp mail /var/mail/*
# ls -ld /var/mail
drwxrwsr-x 2 root mail 4096 Sep 3 13:42 /var/mail/
Ukoliko nije tako i kod vas, napravite sljedeće i restartajte dovecot:
# chmod 2775 /var/mail # (2775 je ekvivalent drwxrwsr-x)
# chown root:mail /var/mail
# /etc/init.d/dovecot restart
Ovom operacijom smo osigurali da Dovecot ima pristup do svakog korisničkog mailboxa, a ujedno riješili još jedan problem koji se u logovima mogao vidjeti ovako:
imap(korisnik): Error: chown(/home/korisnik/mail/.imap/INBOX, group=12(mail)) failed:
Operation not permitted (egid=1000(korisnik), group based on /var/mail/korisnik -
see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
Ovo je drugi problem, kojeg niste tako lako mogli primjetiti zbog patcha kojeg su primijenili u Debianu, ali se lako rješava s onim "chmod 600".
Više o ovoj problematici možete naći na sljedećim linkovima:
/usr/share/doc/dovecot-core/README.Debian.gz
http://wiki2.dovecot.org/Errors/ChgrpNoPerm [8]
http://wiki2.dovecot.org/BasicConfiguration [9]
Trenutno jedan od najboljih POP3/IMAP poslužitelja, Dovecot, brzo se proširio CARNetovim poslužiteljima. Pouzdan, brz, jednostavan za konfiguriranje, zaslužio je da bude default na svim računalima. No, kako ništa nije savršeno, tako i Dovecot nije bez mana.
Kod prijelaza na Dovecot, obično se javlja problem duplih mailova kod korisnika koji rabe "Leave messages on server" (ili sličnu postavku). Naime, ova funkcija se oslanja na POP3 UIDL indekse kako bi poslužitelj znao koje poruke su već prebačene na klijenta. Svaki poslužitelj ima svoju shemu označavanja, pa bi instalacijom Dovecota ova informacija bila izgubljena.
S inačicom dovecota 0.99 nažalost nije bilo pomoći, korisnik je morao pokupiti svu poštu na lokalno računalo. No, za razliku od starije inačice gdje nije bilo moguće promijeniti UIDL format, u trenutnim inačicama (1.0rc15 i višim, dostupnim u Etch distribuciji) postoji pomoć u vidu dodatne konfiguracijske opcije "pop3_uidl_format".
Postavka omogućava "emuliranje" drugih POP3 poslužitelja i na taj način bezbolniji prijelaz na Dovecot. Dakle, osnovni format koji se rabio u dovecotu 0.99 je bio (da ga je bilo moguće vidjeti u konfiguracijskoj datoteci):
pop3_uidl_format = %v.%u
dok je u novoj inačici (1.0 i više) default:
pop3_uidl_format = %08Xu%08Xv
Kao da to nije dovoljno, default u UW POP3/IMAP poslužiteljima je:
pop3_uidl_format = %08Xv%08Xu
Dakle, razlika je vrlo mala, ali bitna. Zašto su uopće mijenjali format? Zato jer su navodno Outlook klijenti imali problema s formatom "%v.%u". Nismo mogli potvrditi tu informaciju, dakle ne treba pod svaku cijenu mijenjati ovu postavku.
Koji format odabrati? Ukoliko prelazite na dovecot sa WU IMAP/POP3 poslužitelja, preporučujemo zadržati stari format, dakle "%08Xv%08Xu". Jednostavno upišite ovu vrijednost u /etc/dovecot/dovecot.conf i restartajte servis odmah nakon inicijalne instalacije.
Ako prelazite sa dovecota 0.99, zadržite format "%v.%u". Slično tomu, ukoliko već radite na dovecotu 1.0 i korisnici nemaju primjedbi, zadržite novi default format "%08Xu%08Xv".
CARNet paket dovecot-cn će pokušati zadržati bilo koji format odaberete, a vama preostaje za razmisliti kako prebaciti "leave messages on server" korisnike na IMAP protokol, koji nema ovakvih problema.
KEYWORDS: dovecot UIDL POP3
Links
[1] https://sysportal.carnet.hr./sysportallogin
[2] https://sysportal.carnet.hr./node/846
[3] http://www.dovecot.org/
[4] https://sysportal.carnet.hr./taxonomy/term/17
[5] https://sysportal.carnet.hr./taxonomy/term/22
[6] https://sysportal.carnet.hr./taxonomy/term/28
[7] https://sysportal.carnet.hr./node/380
[8] http://wiki2.dovecot.org/Errors/ChgrpNoPerm
[9] http://wiki2.dovecot.org/BasicConfiguration
[10] https://sysportal.carnet.hr./taxonomy/term/11