Содержание |
Почтовый сервер 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/
В дистрибутив 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.