認証は、3つのパートに分けられます:認証メカニズムとパスワードデータベースと ユーザーデータベースです。 現在、サポートしている認証のメカニズムは: - PLAIN: それだけでは、安全ではありませんが、 安全な SSL/TLS 接続と使えば、 良くなります。 - DIGEST-MD5: それ自身はとても安全だと思います。これは他のコミュニケーショ ンの暗号化と保護の完全性もサポートしていますが、しかし、 Dovecot では、そ れをまだサポートしていません。 - CRAM-MD5: 盗聴者から通信中の秘密を守ります。いかなる完全性の保障もしませ ん。 - ANONYMOUS: 認証は必要ありません。auth_anonymous_username の設定(デフォル トは "anonymous")で指定されたユーザとして、ユーザはログインします。 anonymous ユーザに与える特別な制限はありませんので、ユーザが意図しない場 所にアクセスできないように確認しなければなりません。 現在、サポートしているパスワードデータベースは: - passwd: /etc/passwd もしくは同様のもので、 getpwnam() を使用します。 - shadow: /etc/shadow もしくは同様のもので、 getsonam() を使用します。 - pam: Pluggable Authentication Modules (接続可能な認証モジュール) - passwd-file: 場所を指定した passwd のようなファイル。 - ldap: Lightweight Directory Access Protocol (軽量なディレクトリアクセスプ ロトコル) - vpopmail: 仮想ドメインを扱うために使われる外部のソフトウェア - pgsql: PostgreSQL データベース 現在、サポートしているユーザデータベースは: - passwd: /etc/passwd もしくは同様のもので、 getpwnam() を使用します。 - passwd-file: 場所を指定した passwd のようなファイル。 - ldap: Lightweight Directory Access Protocol (軽量なディレクトリアクセスプ ロトコル) - vpopmail: 仮想ドメインを扱うために使われる外部のソフトウェア - static: テンプレートで直接与えられる UID と GID とホームディレクトリ - pgsql: PostgreSQL データベース ほとんどのパスワードデータベースは plaintext 認証のみサポートしています。 passwd-file と LDAP は例外で、複数のパスワード機構をサポートしています。 passwd 機構は plaintext 認証のみサポートしています: - CRYPT: crypt() の使用。たいていは DES を使用しますが、いくつかのシステム では MD5 や SHA1 のような他のものをサポートしています。 - MD5: 時々 /etc/passwd のようなファイルで使われる MD5 暗号アルゴリズム。 - PLAIN-MD5: 単純なパスワードの MD5 サム。 libpam-pwdfile で使われます。 passwd-file 機構は plaintext 認証と以下のものをサポートしています: - PLAIN: 良い方法ではないけど、これは現在と将来の全ての認証メカニズムのサ ポートを有効にします。 - HMAC-MD5: CRAM-MD5 認証のための HMAC-MD5 形式のパスワード。 - DIGEST-MD5: DIGEST-MD5 で必要な "user:realm:password" の MD5 サム。 realm (もしくは仮想ドメイン) は、ユーザ名の後の "@realm" を付加することをサ ポートしています。この働きは、全ての認証のメカニズムとデータベースで動作し ます。 ホームディレクトリは、 "/./" を最初の文字として追加することができ、 この は chroot するディレクトリになります。実際のホームディレクトリ は "/./" 以降の場所になります。例えば、 "/chroot/./home/user" とします。 passwd ------ 最も一般的なユーザデータベースとして使われていました。最近では多くのシステム で、 shadow パスワードを使用しているため、ほとんどの場合パスワードデータベー スとしては動作しません。 BSD のシステムではこれは例外で、まだ shadow パスワー ドと同様のパスワードフィールドを設定しています。 shadow ------ 少なくとも Linux と Solaris で動作します。 PAM --- Linux PAM, Solaris PAM, OpenPAM (FreeBSD), ApplePAM (OSX) で動作します。 PAM はユーザデータベースを提供しないので、他の何かを使う必要があります - たいていそれは passwd です。 デフォルトで Dovecot は、PAM の設定が /etc/pam.d/dovecot ファイルにあるよう に、 "dovecot" サービスを使用します。求められているサービス名を PAM のパラ メータとして与えることで、優先することができます。例えば "auth_passdb = pam dovecot2" とします。もし、サービス名に "*" を与えた場合、 Dovecot は IMAP 接続では "imap" サービスを、 POP3 接続では "pop3" サービスを 使用します。 以下は、標準的な UNIX 認証で使う /etc/pam.d/dovecot 設定ファイルの例です: auth required pam_unix.so nullok account required pam_unix.so passwd-file ----------- これは、 libpam-pwdfile で使われる password ファイルや、通常の /etc/passwd ファイルと互換性があります。それは、以下のような形式になります。 user:password:uid:gid:(gecos):home:(shell):flags:mail パスワードデータベースでは、 user と password フィールドだけの設定で十分です。 ユーザデータベースでは、 uid, gid, そして home か mail のどちらかを設定する 必要があります。 flags はカンマで区切られたフラグのリストで、現在、"chroot" の値のみが認めら れています。chroot はもしメインのプロセスで許されていれば、 imap プロセスを ホームディレクトリに chroot させます。 パスワードフィールドは3つの形式を使うことができます: - password: CRYPT でのパスワード - password[type]: libpam-passwd ファイル互換の形式です。タイプを1つ指定し ます: 13: CRYPT でのパスワード 34: MD5 でのパスワード 56: DIGEST-MD5 でのパスワード (Dovecot 拡張、やめた方が良い) - {SCHEME}password LDAP ---- さらに情報が必要ならば dovecot-ldap.conf を参照してください。パスワードとユー ザデータベースは、別けられた場所に情報が保存されているため、異なった設定ファ イルを使います。両方とも同じファイルを参照する場合は、同じ LDAP の接続を共有 します。 vpopmail -------- これは、仮想ドメインの扱いの作成を目的とする外部ソフトウェアです。Qmail と Postfix でサポートしています。 http://inter7.com/vpopmail.html を参照してく ださい。 static ------ static uid= gid= home= 全てのユーザが、同じ UID と GID を共有します。ホームディレクトリのテンプレー トは、 %u, %n, %d 変数が使用できます。 dovecot-example.conf にある default_mail_env の説明を参照してください。 PostgreSQL ---------- さらに情報が必要ならば dovecot-pgsql.conf を参照してください。パスワードとユー ザデータベースは、別けられた場所に情報が保存されているため、異なった設定ファ イルを使います。両方とも同じファイルを参照する場合は、同じ PostgreSQL の接続 を共有します。 パスワードの生成 ---------------- DES: mkpasswd perl -e 'printf "%s\n", crypt("pass", "two-letter-salt")' MD5: mkpasswd --hash=md5 perl -e 'printf "%s\n", crypt("pass", "\$1\$6-8-letter-salt\$")' PLAIN-MD5: perl -MDigest::MD5 -e 'printf "{PLAIN-MD5}%s\n", Digest::MD5::md5_hex("pass")' DIGEST-MD5: perl -MDigest::MD5 -e 'printf "{DIGEST-MD5}%s\n", Digest::MD5::md5_hex("user:realm:pass")'