Last Update: "2010/06/06 08:58:31 makoto"
mail
各 imapd の特徴
server | user admin (authentication) |
---|
mailbox | 振分 |
uw-imapd | | mbox, MH | |
courier | | Maildir | |
dovecot | | Maildir mbox | |
cyrus | SASL,PAM,LDAP,Kerberos,自前(設定可能) | 自前 |
sieve |
cyrus はこの中では速くていいが、設定がちょっと面倒というのがもっぱらの評判。
cyrus-imapd
url
- CyrusでIMAPサーバを構築する (by OBATA Akio 2002)
-
http://www.atmarkit.co.jp/fmobile/rensai/imap03/imap03.html
- Cyrus-IMAPD
-
http://nekojita.org/hiki/Cyrus-IMAPD.html
- Cyrus IMAP4 Serverよるメール環境の構築
-
http://hk-tech.homeip.net/pcserver/imap4.html
- Cyrus IMAP Server, version 2.2
-
http://asg.web.cmu.edu/cyrus/download/imapd/
- Cyrus ImapdとOpenLDAPによるメールサーバー構築
-
http://hp.vector.co.jp/authors/VA029885/software/article/cyrus-imapd-with-openldap.html
- 2.2.8 以前に buffer overflow security vulnerability
-
http://www.ciac.org/ciac/bulletins/p-043.shtml
- FAQ
-
https://bugzilla.andrew.cmu.edu/cgi-bin/cvsweb.cgi/src/cyrus/doc/faq.html?rev=1.33
- メールサーバ (POP3 と IMAP)
-
http://memo.blogdns.net/pop3imap.html
- 本家 (2.3)
-
http://cyrusimap.web.cmu.edu/imapd/
- expire を指定
-
http://blog.livedoor.jp/linuxer2006/archives/54489546.html
pkgsrc の下には次のようにいくつかの違う版の cyrus-imapd があります(2009/05 更新)。
pkgsrc/ | 2009/04 | 2006/11 | 2006/08 | 2005/04 |
---|
mail/cyrus-imapd | 2.2.13 | 2.2.12 | 2.2.10 |
mail/cyrus-imapd21 | 2.1.8 | 2.1.15 |
mail/cyrus-imapd22 | -- | 2.2.10 |
wip/cyrus
| 2.3.14 | -- |
以下の記述は、主として 2005/04 に書いたものですが、一部 2006/08 や 2006/12 頃にも更新しています。
説明
例えば次のようにすると説明が読めます。
% cd mail/cyrus-imapd22/work/cyrus-imapd-2.2.10/doc
% w3m install.html
pkg_info -D
あるいは NetBSD packages の作法として、次のように
情報があるので、これに従って見ても同様です。
ttyZ0:root@s900 0:20:41/061127(~)# pkg_info -D cyrus-imapd
Information for cyrus-imapd-2.2.13nb1:
Install notice:
...
/usr/pkg/share/doc/html/cyrus-imapd/install.html
for more detailed instructions on setting up the environment before
/usr/pkg/share/doc/html/cyrus-imapd/install-upgrade.html
...
これらには次のような項目があります。
色の違うものは後でこの三つが大切とした項目です。
以下では、とにかく imapd が動けばいい。簡単な動かし方を見たい、という観点で設定をします。
pkgsrc を使って mail/cyrus-imapd で make install あるいは make package とすれば、
必要なものは設置してくれるはずです。
しかし例えば、NetBSD/macppc 2.99.15 とか 3.99.3 で試した
ところ、いくつか調整などが必要でした。
このようにして設置が済むと、後は、上の説明の項目の中で、
特に必要な項目は、次の三点です。
bin/master
master process の設定例は次のところにあります。
cd /usr/pkg/share/examples/cyrus-imapd/
ls
-r--r--r-- 1 root wheel 1439 Apr 14 11:27 cmu-backend.conf
-r--r--r-- 1 root wheel 1136 Apr 14 11:27 cmu-frontend.conf
-r--r--r-- 1 root wheel 692 Apr 14 11:27 imapd.conf
-r--r--r-- 1 root wheel 1295 Apr 14 11:27 normal.conf
-r--r--r-- 1 root wheel 1296 Apr 14 11:27 prefork.conf
-r--r--r-- 1 root wheel 908 Apr 14 11:27 small.conf
例えば、次のようにして写します。
# cp /usr/pkg/share/examples/cyrus-imapd/normal.conf /etc/cyrus.conf
master 処理を起動するのは次のものです。
/usr/pkg/cyrus/bin/master
ディレクトリを手で作っておきます (2006/08/02 経験によりこの部分追加)
# mkdir -p /var/imap/db
# mkdir -p /var/imap/proc
# chown -R cyrus /var/imap
上の作業がない時の問題表示等:
IOERROR: opening /var/imap/mailboxes.db: Permission denied
* BYE Fatal error: can't write proc file
..ここは 本来は次のように mkimap を使うものです (が、上の操作はやはり必要そうです)。
$ /usr/pkg/cyrus/bin/mkimap
reading configure file...
i will configure directory /var/imap.
i saw partition /var/spool/imap.
done
configuring /var/imap...
creating /var/spool/imap...
done
$
次のようにするのが一番正しそうです。/var/imap がないところから作業可能です。
/etc/rc.conf に次の行を加えておきます。
cyrus=YES
続いて次のように操作します。
ttyp3:makoto@bwg3 18:22:52/070809(~)> sudo cp -p /usr/pkg/share/examples/rc.d/cyrus /etc/rc.d
ttyp2:makoto@st4200 8:59:52/061216(~)> sudo /etc/rc.d/cyrus mkimap
reading configure file /usr/pkg/etc/imapd.conf...
i will configure directory /var/imap.
i saw partition /var/spool/imap.
done
configuring /var/imap...
creating /var/spool/imap...
done
ttyp2:makoto@st4200 DING!/061216(~)>
/etc/rc.d/
cyrus を起動してくれる rc.d 用の手続が用意されているので、これを
/etc/rc.d に写して /etc/rc.conf に cyrus=YES の一行を追加しておきます。
# cp /usr/pkg/share/examples/rc.d/cyrus /etc/rc.d
# echo cyrus=YES >> /etc/rc.conf
# env cyrys=YES /etc/rc.d/cyrus start
Starting cyrus.
この rc.d/cyrus は次のようなことをしてくれます。
ttyp2:makoto@st4200 8:57:58/061216(~)> /etc/rc.d/cyrus
Usage: /etc/rc.d/cyrus [fast|force|one](start stop restart rcvar mkimap reload status poll)
(通常は make install あるいは pkg_add 時に自動的に作られるはずですが)
次のようになってしまう場合があるかも知れません。
chown: cyrus: invalid user name
chown: cyrus: invalid user name
su: unknown login cyrus
以上を避けるには、
予め username cyrus を作っておきます。もし vipw で編集するなら、次のような行を加えます。
cyrus:xxxxxxxxxxxxx:1001:6::0:0:cyrus-sasl cyrus user:/nonexistent:/bin/sh
/var/log/message: を確認します。
Apr 16 19:04:22 ibook master[370]: process started
あるいは:
Dec 16 08:44:38 st4200 master[10237]: process started
Dec 16 08:44:38 st4200 ctl_cyrusdb[24760]: recovering cyrus databases
Dec 16 08:44:38 st4200 ctl_cyrusdb[24760]: done recovering cyrus databases
Dec 16 08:44:38 st4200 master[10237]: ready for work
Dec 16 08:44:38 st4200 ctl_cyrusdb[22478]: checkpointing cyrus databases
Dec 16 08:44:40 st4200 ctl_cyrusdb[22478]: done checkpointing cyrus databases
telnet でつないで見ます。
ttyp3:makoto@ibook 19:25:50/050417(~)> telnet localhost imap
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK ibook Cyrus IMAP4 v2.2.12 server ready
. logout
* BYE LOGOUT received
. OK Completed
Connection closed by foreign host.
ttyp3:makoto@ibook 19:25:57/050417(~)>
抜ける時には 「. logout 改行」と入力します。
Dec 16 08:46:09 st4200 imap[1443]:
locking disabled: couldn't open socket lockfile
/var/imap/socket/imap-0.lock: Permission denied
というのを見たこともあります(上記は実際には一行)。
認証
次に利用者の認証の設定をします。
この時に
cyradm は単なる imap クライアントなので、imapd が動いている必要があります
( 上の /etc/rc.d/cyrus start で動かしたものです)。
ttyp2:makoto@st4200 8:48:37/061216(~)> cyradm --user cyrus localhost
IMAP Password:
Login failed: generic failure at
/usr/pkg/lib/perl5/vendor_perl/5.8.0/powerpc-netbsd-thread-multi/Cyrus/IMAP/Admin.pm line 119
cyradm: cannot authenticate to server with as cyrus
ttyp2:makoto@st4200 8:48:58/061216(~)>
ということもあります。この時には、/var/log/messages に次のように書いてありました。
Dec 16 08:51:31 st4200 imap[10539]: locking disabled: couldn't open socket lockfile
/var/imap/socket/imap-0.lock: Permission denied
Dec 16 08:51:35 st4200 imap[10539]: badlogin: localhost [::1] plaintext cyrus SASL(-1):
generic failure: checkpass failed
この場合、次のような部分が関係しているはずです。
ttyp2:makoto@st4200 8:53:17/061216(~)> ls -l /var/imap/socket
total 0
srwxrwxrwx 1 root wheel 0 Dec 16 08:44 lmtp=
cyrus-saslauthd
実は、これは
cyrus-saslauthd
が入っていないことが原因でした。
184 11:25 cd /export/pkgsrc/security/cyrus-saslauthd/
188 11:25 sudo make clean && cvs update && make
189 11:27 sudo make package
190 11:27 sudo cp -p /usr/pkg/share/examples/rc.d/saslauthd /etc/rc.d/saslauthd
193 11:28 sudo -s
# echo saslauthd=YES >> /etc/rc.conf
# exit
194 11:28 sudo /etc/rc.d/saslauthd start
password が合わないな、という場合、 /var/log/auth.log を見ると、次のように書いてあるかも
知れません。
Apr 18 00:20:25 ibook saslauthd[20881]: do_auth
: auth failure: [user=cyrus] [service=imap] [realm=] [mech=getpwent] [reason=Unknown]
実際には一行です。
/etc/rc.d/saslauthd には次の部分があるので、何も考えないと sasl は /etc/passwd
の認証を使います。
# Default to authenticating against local password database.
if [ -z "${saslauthd_flags}" ]
then
saslauthd_flags="-a getpwent"
fi
上の場合には getpwent とありますので、この部分が有効になっています。
その場合、cyradm を起動して login する時には、
sudo vipw や、passwd -l cyrus
で設定したパスワードを入力する必要があります。しかも、入力の最後は 「改行」でなく、
C-j (^j, control + j) です。
ttyp3:makoto@ibook 0:21:43/050418(~)> sudo cyradm --user cyrus localhost
IMAP Password:
localhost>
ここで help と入力すると、次の項目にある操作一覧が表示されます。
メール box の管理
この後はメールボックスの管理ということになりますが、それには次のようにします。
メールボックスと言いますが、メールアカウントと同じです。
# cyradm --user cyrus localhost
で接続してから、次のような操作をします。色が付いいているのは良く使うものです。
操作 | 短縮形 | 意味 |
createmailbox | cm | create a mailbox |
deleteaclmailbox | dam | delete an ACL on a mailbox |
deletemailbox | dm | delete a mailbox |
help | | get help on commands |
listaclmailbox | lam | list the ACL on a mailbox |
listmailbox | lm | list mailboxes |
listquota | lq | list quota on root |
listquotaroot | lqr, lqm | list quota roots on mailbox |
quit | | exit program |
renamemailbox | renm | rename a mailbox |
setaclmailbox | sam | set an ACL on a mailbox |
setquota | sq | set quota limits |
これを使って、次のようにします。
localhost> cm user.USERNAME
localhost> sam user.USERNAME USERNAME lrswipcda
localhost> quit
実際には
大文字の部分を自分用の文字列
にして、それ以外の文字はそのまま入力するようにします。
また lrswipcda と書いてある部分は any
で良いはずなのですが、(ある時には) この通りの入力をする必要があるようでした(2006/08/03)
これは、例えば、あるはずの mailbox が、ないと言って、では作る ? とすると、
(mailbox not found, create ?)
今度は既にあるので作れない等と言われるのはそのような可能性が大です。
(Mailbox already there)
例えば、次のようになります (2006/12/16 確認)。
localhost> cm user.makoto
localhost> sam user.makoto makoto any
次のようになってしまうこともあります。
localhost> cm user.makoto
createmailbox: System I/O error
localhost>
この場合、/var/log/messages に次のように書いてあるかも知れません。
Dec 16 11:35:15 st4200 imap[26974]: IOERROR:
creating directory /var/spool/imap/user: Permission denied
/var/spool/imap が次のようになっていないと、上の問題が起きます。今回は手で直してしまいました。
ttyp4:root@st4200 11:44:26/061216(/var/spool)# ls -lag imap/
total 6
drwxr-x--- 3 cyrus mail 512 Dec 16 08:44 ./
drwxr-xr-x 13 root wheel 512 Dec 16 08:44 ../
drwxr-xr-x 2 cyrus mail 512 Dec 16 08:44 stage./
これで
メールボックスが作られます。
実際にメールを受取れるようにするには、他に二つ設定が必要です。
- saslauthd に口座名が有効なことを知らせる
- sendmail などの MTA に local mailer は cyrus だということを設定する
saslauthd は初期設定では getpwent つまり /etc/passwd のような方式
を見に行きます。あるいは NIS データべースでも大丈夫。そこで、もし受取人の
Unix 的な口座(account)を作ってないなら、作っておきます。
login 出来ず、home directory 無でも大丈夫です。
着信(MTA)
メールを
imapd サーバで受取るようにする設定も必要です。
sendmail の場合は、
netbsd-proto.mc などの最後に
次の設定を加えます。
local mailer に cyrus と名前を付けた設定を加えています。これは
cyrus に含まれている lmtp (Local Mail Transfer Protocol 処理系) を起動します。
define(`confLOCAL_MAILER', `cyrus')dnl
Mcyrus, P=[IPC], F=lsDFMnqA@/:|SmXz, E=\r\n,
S=EnvFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix,
A=FILE /var/imap/socket/lmtp
実際の設定方法は
sendmail
を参考にします。
最近 (2006/06 以降)では sendmail が入っていないので、pkgsrc から入れます。
その場合には、
pkgsrc/sendmail
を参照して下さい。
その後、このサーバに対して、メールを出して見ます。
うまく行けば、
/var/spool/imap/user/USERNAME/1.
にメールが到着するはずです。
この後、
squirrelmail
の設定をすれば web の画面でメールの送受が可能になります。
あるいは、振分けをするということであれば
sieveを使うのも一つの方法です。
問題
-
ERROR: Connection dropped by IMAP server.
-
次のように lmtpd が無限ループに陥っている気がする
PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND
23326 cyrus 53 0 1188K 3432K RUN 24:48 99.02% 99.02% lmtpd
syslog err 区分の表示
http://www.mail-archive.com/info-cyrus@lists.andrew.cmu.edu/
msg31138 |
msg31140
YES, removing ~/.sieve (which had some odd line) fixed this problem... Thanks..
-
Apr 17 00:30:52 ibook ctl_cyrusdb[22056]: DBERROR db4: Program version 4.2 doesn't match environment version
-
- cyradm: cannot connect to server
-
これは master プロセスが動いていない時です。動かしているはずだと
いう場合には、何か問題が /var/log/message に表示されていないか調べます。
cyradm -user cyrus localhost
cyradm: cannot connect to server
例えば db4 が 4.3.27 の版だと master がうまく動いていなくて
こうなることがあります。
-
cannot connect to saslauthd server: No such file or directory
-
security/cyrus-sasld is not installed
(以下意味なく覚え)
Apr 16 21:08:19 ibook imapd: could not getenv(CYRUS_SERVICE); exiting
ttyp0:makoto@ibook 22:05:49/050416(/export/pkgsrc)> sudo saslpasswd2 -c makoto
Password: Again (for verification):
ttyp0:makoto@ibook 22:06:09/050416(/export/pkgsrc)> ls -l /usr/pkg/etc/sas*
-rw------- 1 root wheel 16384 Apr 16 22:06 /usr/pkg/etc/sasldb.db
1295 Apr 14 11:27 ./etc/cyrus.conf
1024 Apr 14 11:27 ./share/doc/html/cyrus-imapd
1082 Apr 14 11:27 ./share/doc/html/cyrus-imapd/cyrusv2.mc
1536 Apr 14 10:57 ./share/doc/cyrus-sasl
1870 Apr 14 11:27 ./share/examples/rc.d/cyrus
512 Apr 14 11:27 ./share/examples/cyrus-imapd
1495 Apr 14 07:00 ./share/sendmail/cf/cyrusproto.mc
1133 Apr 14 07:00 ./share/sendmail/mailer/cyrusv2.m4
2802 Apr 14 07:00 ./share/sendmail/mailer/cyrus.m4
6896 Apr 14 11:27 ./man/man5/cyrus.conf.5
4080 Apr 14 11:27 ./man/man8/cyrus-deliver.8
4518 Apr 14 11:27 ./man/man8/cyrus-imapd.8
3538 Apr 14 11:27 ./man/man8/cyrus-pop3d.8
3205 Apr 14 11:27 ./man/man8/cyrus-quota.8
5051 Apr 14 11:27 ./man/man8/cyrus-master.8
3242 Apr 14 11:27 ./man/man8/cyrus-lmtpd.8
2683 Apr 14 11:27 ./man/man8/cyrus-idled.8
3853 Apr 14 11:27 ./man/man8/cyrus-notifyd.8
4298 Apr 14 11:27 ./man/man8/cyrus-nntpd.8
3488 Apr 14 11:27 ./man/man8/cyrus-fetchnews.8
1024 Apr 14 11:27 ./include/cyrus
7035 Apr 14 11:27 ./include/cyrus/cyrusdb.h
512 Apr 14 11:27 ./cyrus
古い cyrus
cyrus-2.0 から cyrus-2.1 へ変更した場合
Aug 10 07:22:16 bwg3 lmtpunix[3255]: skiplist: invalid magic header: /var/imap/mailboxes.db
Aug 10 07:22:16 bwg3 lmtpunix[3255]: DBERROR: opening /var/imap/mailboxes.db: cyrusdb error
Aug 10 07:22:16 bwg3 lmtpunix[3255]: FATAL: can't read mailboxes file
/usr/pkg/share/doc/html/cyrus-imapd/install-upgrade.html
に書いてあります。
/usr/pkg/cyrus/bin/cvt_cyrusdb /var/imap/mailboxes.db berkeley /var/imap/mailboxes.db.new skiplist
Converting from /var/imap/mailboxes.db (berkeley) to /var/imap/mailboxes.db.new (skiplist)
ttyp1:root@bwg3 7:26:35/070810(~)# mv /var/imap/mailboxes.db.new /var/imap/mailboxes.db
IMAP error: System I/O error と画面に表示されますが、
既読管理にも変換が必要です。
Aug 11 08:36:57 bwg3 imap[14654]: skiplist: invalid magic header: /var/imap/user/m/user_name.seen
Aug 11 08:36:57 bwg3 imap[14654]: DBERROR: opening /var/imap/user/m/user_name.seen: cyrusdb error
Aug 11 08:36:57 bwg3 imap[14654]: Could not open seen state for user_name (System I/O error)
ttyp4:root@bwg3 8:44:12/070811(~)# \
/usr/pkg/cyrus/bin/cvt_cyrusdb /var/imap/user/m/user_name.seen flat
/var/imap/user/m/user_name.seen-new skiplist
Converting from /var/imap/user/m/user_name.seen (flat) to
/var/imap/user/m/user_name.seen-new (skiplist)
ttyp4:root@bwg3 8:44:26/070811(~)#
|