Cyrus-imapd

Материал из Wiki Open book
Перейти к: навигация, поиск

Содержание

О программе Cyrus-imapd

Почтовый сервер Cyrus IMAP является открытым сервером почтовых сообщений с поддержкой протоколов POP3, IMAP4 и NNTP (в т.ч. через TLS). Сyrus IMAP не требует заведения полноценных пользоватей системы для доступа к почтовым ящикам, а обеспечивает собственные средства авторизации с помощью библиотеки Cyrus SASL (механизмы: KERBEROS_V4, GSSAPI, CRAM-MD5, DIGEST-MD5, OTP и PLAIN) и средства хранения почтовых сообщений. Допускается одновременный доступ к одному почтовому ящику. В программе имеются средства управления списками доступа (ACL) и ограничения размера почтового ящика (QUOTA). Поддерживается протокол фильтрации почты SIEVE.

Сайт программы: http://cyrusimap.web.cmu.edu/

Установка программы Cyrus-imapd

В дистрибутив Slackware Linux программа не входит, поэтому нужно установить её самостоятельно.

Как обычно, можно производить установку из исходных кодов, но лучше сделать пакет.

Принцип организации почтовых ящиков

Пространство имён почтовых ящиков имеет иерархическую структуру: простые имена, выстроенные в иерархию через точку, прописные и строчные буквы различаются. Почтовые ящики первого уровня иерархии могут создаваться только администратором, остальные в соответствии с правами (ACL) родительского почтового ящика.


Корнем иерархии является префикс user, то есть, все почтовые ящики пользователя, например, testuser, будут иметь вид user.testuser. Создание ящика user.testuser равнозначно созданию пользователя testuser. В этот ящик попадут все сообщения, предназначенные пользователю testuser.


Для пользователя testuser ящик будет выглядtть как INBOX. Подпапки, например, INBOX/Drafts для пользователя будут иметь вид INBOX.Drafts, а для системы — user.testuser.Drafts


Имя пользователя в стандартном иерархическом пространстве имён не может содержать точку! То есть, по умолчанию нельзя создать пользователя, например a.testuser. Тем не менее, можно добавить в конфигурационный файл параметр, позволяющий создавать пользователей с точкой в имени. Об этом будет описано в секции ниже.

Основные конфигурационные файлы программы

Основными конфигурационными файлами программы Cyrus-imapd являются файлы cyrus.conf и imapd.conf

cyrus.conf

# standard standalone server implementation

START {
  # do not delete this entry!
  recover       cmd="ctl_cyrusdb -r"

  # this is only necessary if using idled for IMAP IDLE
#  idled                cmd="idled"
}

# UNIX sockets start with a slash and are put into /var/imap/socket
SERVICES {
  # add or remove based on preferences
  imap          cmd="imapd" listen="imap" prefork=0
#  imaps                cmd="imapd -s" listen="imaps" prefork=0
  pop3          cmd="pop3d" listen="pop3" prefork=0
#  pop3s                cmd="pop3d -s" listen="pop3s" prefork=0
#  sieve                cmd="timsieved" listen="sieve" prefork=0

  # these are only necessary if receiving/exporting usenet via NNTP
#  nntp         cmd="nntpd" listen="nntp" prefork=0
#  nntps                cmd="nntpd -s" listen="nntps" prefork=0

  # at least one LMTP is required for delivery
#  lmtp         cmd="lmtpd" listen="lmtp" prefork=0
  lmtpunix      cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0

  # this is required if using notifications
#  notify       cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1
}

EVENTS {
  # this is required
  checkpoint    cmd="ctl_cyrusdb -c" period=30

  # this is only necessary if using duplicate delivery suppression,
  # Sieve or NNTP
  delprune      cmd="cyr_expire -E 3" at=0400

  # this is only necessary if caching TLS sessions
  tlsprune      cmd="tls_prune" at=0400
}

Особой необходимости в правке этого файла нет, можно лишь закоментировать те сервисы, которые не нужны в работе.


imapd.conf

configdirectory: /var/imap
partition-default: /var/spool/imap
admins: cyrus
hashimapspool: true
unixhierarchysep: yes
sasl_pwcheck_method: auxprop

В файле указываются многие параметры работы сервера cyrus-imapd, например, рабочие директории, администраторы системы, параметры работы с базами данных, методы аутентификации, пути к сертификатам и т.п. Подробную информацию по тем или иным параметрам можно получить из файла руководств:

$ man imapd.conf


Я обратил внимание на следующие параметры:

hashimapspool: true
unixhierarchysep: yes
sasl_pwcheck_method: auxprop

unixhierarchysep — позволяет создавать пользователя с точкой в имени, например, a.testuser. При этом, в качестве разделителя после префикса user используется слэш /. Ящик будет виден программе как user/a.testuser.


hashimapspool — предназанчен для ускорения работы программы с почтовыми ящиками при большом количестве пользователей в системе. При этом ящики будут сортироваться в определённом порядке. То есть, при создании ящика для пользователя a.testuser в рабочей директории программы будет создан каталог a, куда будет помещён соответсвующий ящик пользователя. Если воспользоваться программой ls, выглядеть это будет так:

$ ls -R a
a:
user/

a/user:
a^testuser/

a/user/a^testuser:
cyrus.cache  cyrus.header  cyrus.index
$


sasl_pwcheck_method: auxprop — данный параметр позволяет не запускать процесс saslauthd, а обращаться к базе пользователей через плагин auxprop.

Первый запуск программы

Перед запуском нужно убедиться, что в системе не работает других процессов, обслуживающих imap, imaps, pop3, pop3s, kpop, lmtp протоколы.

Запустить программу можно командой:

/usr/libexec/cyrus/master -d

После запуска, можно проверить работоспособность при помощи программы telnet.

$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4 IMAP4rev1 LITERAL+ ID AUTH=CRAM-MD5 AUTH=DIGEST-MD5 AUTH=OTP SASL-IR] alpha Cyrus IMAP4 v2.3.8 server ready
. logout
* BYE LOGOUT received
. OK Completed
Connection closed by foreign host.

$  telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK alpha Cyrus POP3 v2.3.8 server ready <1290135417.1185448434@alpha>
quit
+OK
Connection closed by foreign host.

Работа с пользователями и почтовыми ящиками

В самом простом случае пользователи будут храниться в базе данных cyrus-sasl. Для этого в конфигурационном файле imapd.conf был указан параметр: sasl_pwcheck_method: auxprop. Файл базы данных находится в системной директории etc: /etc/sasldb2.

Внимание! Необходимо, чтобы у пользователя cyrus, от имени которого работает программа был доступ к этому файлу!


Перед тем, как заводить почтовые ящики в cyrus-imapd нужно завести пользователей в базе cyrus-sasl.

$ saslpasswd2 -c a.testuser # команда создаст пользователя a.testuser в базе sasldb2
$ saslpasswd2 -d a.testuser # команда удалит пользователя a.testuser в базе sasldb2
$ sasldblistusers2 # команда покажет всех пользователей в базе sasldb2
Внимание! В первую очередь, необходимо создать пользователя (администратора) cyrus в базе sasldb2 при помощи вышеописанной команды.


Для создания, удаления и администрирования почтовых ящиков используется программа cyradm.

$ cyradm
cyradm>

Далее, набрав команду help, можно посмотреть какие команды возможно использовать:

----
cyradm> help
authenticate, login, auth         authenticate to server
chdir, cd                         change current directory
createmailbox, create, cm         create mailbox
deleteaclmailbox, deleteacl, dam  remove ACLs from mailbox
deletemailbox, delete, dm         delete mailbox
disconnect, disc                  disconnect from current server
exit, quit                        exit cyradm
help, ?                           show commands
info                              display mailbox/server metadata
listacl, lam, listaclmailbox      list ACLs on mailbox
listmailbox, lm                   list mailboxes
listquota, lq                     list quotas on specified root
listquotaroot, lqr, lqm           show quota roots and quotas for mailbox
mboxcfg, mboxconfig               configure mailbox
reconstruct                       reconstruct mailbox (if supported)
renamemailbox, rename, renm       rename (and optionally relocate) mailbox
server, servername, connect       show current server or connect to server
setaclmailbox, sam, setacl        set ACLs on mailbox
setinfo                           set server metadata
setquota, sq                      set quota on mailbox or resource
subscribe, sub                    subscribe to a mailbox
unsubscribe, unsub                unsubscribe from a mailbox
version, ver                      display version info of current server
xfermailbox, xfer                 transfer (relocate) a mailbox to a different server
cyradm>
----


Пример: нужно создать почтовый ящик пользователю b.testuser.


Для этого, порядок действий должен быть следующим:

1. завести пользователя в базе sasldb2 и убедиться, что он там появился.

2. при помощи программы cyradm соединиться с cyrus-imap сервером.

3. создать ящик, убедиться что он появился, дать права доступа администратору и пользователю на ящик.

4. (опционально) назначить квоту на использование ящика


1. Создание пользователя в базе sasldb2

$ saslpasswd2 -c b.testuser
Password:
Again (for verification):

$ sasldblistusers2 # пользователь есть в базе
b.testuser@alpha: userPassword
b.testuser@alpha: cmusaslsecretOTP
cyrus@alpha: cmusaslsecretOTP
cyrus@alpha: userPassword

2. Соединение с сервером cyrus-imap

cyradm -u cyrus localhost
Password:
localhost>

3. Создание ящика, проверка, назначение прав доступа.

----
localhost> cm user/b.testuser # создание ящика
localhost> lam user/b.testuser # проверка, есть ли ящик (вернее, просмотр прав доступа)
b.testuser lrswipkxtecda
localhost> sam user/b.testuser b.testuser all # назначение прав доступа пользователю b.testuser
localhost> sam user/b.testuser cyrus all  # назначение прав доступа администратору cyrus
localhost> lam user/b.testuser
b.testuser lrswipkxtecda
cyrus lrswipkxtecda
localhost>
----

4. (опционально) Назначение квоты ящику пользователя в 150 мб.

----
localhost> sq user/b.testuser 150000 # установка квоты
quota:150000
localhost> lq user/b.testuser # просмотр квоты
 STORAGE 0/150000 (0%)
localhost>
----


Вывод списка всех ящиков осуществляется командой lm.

Удаление ящика осуществляется командой dm.

Инструменты
    
Личные инструменты