Что такое код cyrus_query

Содержание

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

cyrus_query — отправляет запрос Cyrus IMAP-серверу.

Описание

bool cyrus_query (resource connection, string query)

Эта функция в настоящее время ещё не задокументирована; имеется только список аргументов.

Чем отличаются Request от Query?

В мире программирования — это синонимы.

В жизни Request подразумевает формализованный запрос, например официальный запрос информации о каком-то предмете, который подразумевает заполнение некоторой формы (формуляра).

Query — это просто вопрос.

Например, вы приходите в банк, вам нужно открыть кредит. Когда вы спрашиваете, в какое окошко вам обратиться, это query, когда заполняете форму это fill in application, когда отправляете форму на рассмотрение — это и есть request.

cyrus отправка почты

openSusE 10.3 Нужно настроить почтовый сервер(чтоб пользователи могли переписываться в сети), установил cyrus, при отправке из почтового агента(Kmail метод отправки smtp), выдаёт что нет такого пользователя, проблема усложняется тем что я не знаю где смотреть логи(сейчас настроил syslog-ng.conf на вывод всех логов в /var/log/allmessages, но там много лишнего и по-моему не всё), в инете есть вот это:

Для того, чтобы в случае неполадок облегчить поиск проблемы, включаем журналирование посредством syslog. Добавляем в /etc/syslog.conf следующее:

local6.debug /var/log/imapd.log auth.debug /var/log/auth.log

% killall -1 syslogd

но у меня вместо syslod syslog-ng, а вместо /etc/syslog.conf /etc/syslog-ng/syslog-ng.conf, и там всё подругому. _______________

сейчас имеется следующее: dim@linux-ibet:

> cyradm —user root localhost Password: localhost> lm kuser.test (\HasNoChildren) user.test.user (\HasNoChildren) testmail.test (\HasNoChildren) user.test2 (\HasChildren) testmail2.test2 (\HasNoChildren) user.test2.user (\HasNoChildren) user.test (\HasChildren) localhost>

tail -f /var/log/allmessages

un 30 16:32:28 linux-ibet postfix/smtpd[3833]: connect from localhost[::1] Jun 30 16:32:29 linux-ibet postfix/smtpd[3833]: NOQUEUE: reject: RCPT from localhost[::1]: 550 5.1.1 : Recipient address rejected: User unknown in local recipient table; from= to= proto=ESMTP helo= Jun 30 16:32:29 linux-ibet postfix/smtpd[3833]: disconnect from localhost[::1]

Что делать? И ещё хотелось бы сделать авторизацию при отправке.

Re: cyrus отправка почты

Что такое «cyrus»?

$ apt-cache search cyrus | wc -l
47

Re: cyrus отправка почты

В логах видно, что отлуп дает постфих, а не сирус.

Re: cyrus отправка почты

Я чего то не понял — отправкой занимается постфикс, цирус то тут причем?

По логам понятно только что либо в системе нет юзера тест, либо myhostname в конфиге постфикса не localhost. И неплохо бы глянуть конфиг постфикса.

Re: cyrus отправка почты

linux-ibet:/home/dim # cat html_directory = /usr/share/doc/packages/postfix/html

readme_directory = /usr/share/doc/packages/postfix/README_FILES inet_protocols = all biff = no mail_spool_directory = /var/mail canonical_maps = hash:/etc/postfix/canonical virtual_alias_maps = hash:/etc/postfix/virtual virtual_alias_domains = hash:/etc/postfix/virtual relocated_maps = hash:/etc/postfix/relocated transport_maps = hash:/etc/postfix/transport sender_canonical_maps = hash:/etc/postfix/sender_canonical masquerade_exceptions = root masquerade_ >

Re: cyrus отправка почты

linux-ibet:/home/dim # cat
html_directory = /usr/share/doc/packages/postfix/html

Что такое код cyrus_query

Есть задача от коммерческого блока хранить все письма, уходящие с серверов приложений в течение двух недель. При этом сохранять письма в почтовом ящике с доступом через Web-интерфейс. В день отправляется в среднем по 50тыс. писем. Итого, за две недели имеем около 700тыс писем в ящике. Изначально на сервере был установлен dovecot с сохранением писем в maildir. Он перестал справляться с выдачей списка сообщений на цифре 400тыс писем.
CyrusImap хранит список писем в собственной БД для каждого ящика. По этому, его мало колышет сколько там писем, по этому было решено поставить его.

Проблемы:

Слабая документация, рекомендации, которые идут вместе с дистрибутивом (установленном через yum) не годятся – не взлетает. Для того, что бы заработало, пришлось спрашивать у гугла, правильные рецепты были найдены в обсуждениях на форумах.
Своя собственная индивидуально разработанная система администрирования, в которой нужно сначала разобраться а потом как то помнить.
Для решения вышеописанных проблем и родился данный пост. (суть – небольшая шпаргалка для себя, что бы не забыть).

Основные особенности Cyrus-imap, которые нужно помнить

Почтовые ящики отдельно – авторизация отдельно и все ручками. Т.е. для заведения почтового ящика следует сначала создать пользователя (либо в /etc/passwd , либо в sasldb , либо в ldap – в зависимости от настроек авторизации), потом средствами cyrus-imap создать в нем почтовый ящик, и третьим этапом, если нужно, сделать на этом ящике необходимые настройки.

Имена ящиков пользователей состоят из слова user и имени пользователя : user. (это папка INBOX). если пропустить слово user, то создастся почтовый ящик, доступный всем пользователям.
Папки в ящике соответственно user. .

Ящики и настройки лежат в разных местах.

По умолчанию в пакете из репозитория centos в качестве авторизации используется системная база пользователей /etc/passwd . Но обращение к ней идет не через PAM а через sasl . Sasl в свою очередь не имеет прав доступа к passwd , по этому он делает запрос через демон saslauthd , который запущен от root. если у вас вдруг этот демон не запущен – то фиг вам а не авторизация.

При авторизации через sasldb , у cyrus должны быть права на чтение файла /etc/sasldb2 . (мы помним, что sasldb дает возможность отвязать ящики от системных паролей что очень гуд)

По умолчанию в пакете из репозитория centos отключена авторизация plain и login . Если вы поставили пакет, завели пользователя и пытаетесь проверять работу утилитой imtest (как написано в документации) то фиг вам. т.к. она использует только plain .

Установка Cyrus-imap на Centos

в результате получаем следующее
— папка с почтовыми ящиками: /var/spool/imap
— папка с конфигами (бд, данные о квотах, скрипты sieve и прочие прелести): /var/lib/imap
— файл с конфигом, где указаны порты и IP для листенера: /etc/cyrus.conf (зачем они его вынесли отдельно. )
— основной файл с конфигом сервера: /etc/imap.conf (почему они его так назвали?! логичнее было бы как раз предыдущий файл назвать imap а этот cyrus, а лучше их объединить и назвать cyrus).

правим конфиг файл /etc/imap.conf

если нужна авторизация по /etc/passwd :

если нужна авторизация через sasldb :

для того, что бы работал plain добавляем:

указываем логины (имена пользователей), которые будет админами.

В документации написано, что лог пишется через syslog с фасилити local6. Ранее так и было, но в пакете centos 6.5 похоже он пишет в mail.*. решить проблему не удалось.
Беда в том, что в конфиге rsyslog.conf прописано mail.* , cyrus исправно генерит дебаги, чем сразу засирает maillog . По этому пришлось в конфиге сислога заменить mail.* на mail.info

заводим пользователя. в случае с sasldb:

Тюнинг и дополнительные настройки

Для того, что бы ускорить поиск по ящику можно делать его индекс при помощи команды squatter . Для того, что бы индекс был актуальный команду следует запускать регулярно. Для этого ее следует добавить в файл /etc/cyrus.conf в раздел EVENTS .
В моем случае при размере ящика 5 Гб и 400 тыс. писем первая индексация заняла 26 минут, последующая 4 минуты. По этому если вы решили добавить этот функционал к существующим ящикам, то стоит первый запуск сделать вручную (см. следующий раздел)

Удаляем из почтового ящика письма старше 2-х недель

Администрирование Cyrus-imapd – основные задачи

Заводим почтовые ящики (через утилиту cyradm)

Посмотреть все почтовые ящики в системе

Посмотреть все почтовые ящики вместе с папками

Удалить ящик (для этого сначала нужно установить атрибут доступа “c” на ящик для админа) почему “с”, когда должно быть “d” не понятно но работает

Восстановить ящик (перечитывает все письма и восстанавливает или делает новую БД)

Разберем, что такое Source-Query

Понятие Source-Query
Source-Query, используется для отображения информации о сервере, так же он используется для управления сервером, через RCON команды. Source-Query разработал «xPaw». Сервера используют протокол «Source», таким образом «Source-Query» получает данные о сервере.

Типы данных
Все запросы сервера состоят из пяти основных типов данных, упакованных вместе в поток данных. Все типы имеют немного обратный порядок байт.
Пример
1. Байт-8 битовый символ или целое число без знака
2. Короткий-16-битное целое число
3. Длинной-32 битное целое число
4. Плавающий 32 бит с плавающей точкой
5. Длинный-длинный- 64 бит целое число без знака
Строка-байтовое поле переменной длины, закодированные в «UTF-8», которые завершаются «0х00»

Так как «Source-Query» был создан для получения и управления серверами «Steam». Steam использует размер пакета 1400 байт + «IP / UDP» заголовков. Если запрос или ответ нуждается в большем количестве пакетов для данных, то он запускает пакеты с дополнительным заголовком.

Поддерживаемые игры
Counter-Strike 1.6
Counter-Strike: Global Offensive
Team Fortress 2
Left 4 Dead 2
Rag Doll Kung Fu
The Ship
Garry’s Mod
Nuclear Dawn
Dino D-Day
Arma 3
Call of Duty: Modern Warfare 3
Starbound
Space Engineers
Rust
Quake Live
ARK: Survival Evolved
Minecraft

Список поддерживаемых игр обновляется, и расширяется. Если вы хотите узнать поддерживает ли «Source-Query» выбранную вами игру то просто добавьте игру в «Steam» в избранные, если «Steam» показывает вам информацию о сервере, то он поддерживается «Source-Query»

PHP (5.5 и выше)
64-bit PHP или Модуль «GMP» (sudo apt-get install php5-gmp) «PHP-GMP»
Веб-сервер должен разрешать UDP соединения

imapd.conf¶

IMAP configuration file

DESCRIPTION¶

/etc/imapd.conf is the configuration file for the Cyrus IMAP server. It defines local parameters for IMAP.

Each line of the /etc/imapd.conf file has the form option: value

where option is the name of the configuration option being set and value is the value that the configuration option is being set to.

Although there is no limit to the length of a line, a «\’’ (backslash) character may be used as the last character on a line to force it to continue on the next one. No additional whitespace is inserted before or after the «\’‘. Note that a line that is split using «\’’ character(s) is still considered a single line.

Blank lines and lines beginning with «#’’ are ignored.

For boolean and enumerated options, the values «yes’‘, «on’‘, «t’‘, «true’’ and «1’’ turn the option on, the values «no’‘, «off’‘, «f’‘, «false’’ and «0’’ turn the option off.

FIELD DESCRIPTIONS¶

The sections below detail options that can be placed in the /etc/imapd.conf file, and show each option’s default value. Some options have no default value, these are listed with « ’‘. Some options default to the empty string, these are listed with « ’‘.

The list of userids with administrative rights. Separate each userid with a space. Sites using Kerberos authentication may use separate “admin” instances.

Note that accounts used by users should not be administrators. Administrative accounts should not receive mail. That is, if user “jbRo” is a user reading mail, he should not also be in the admins line. Some problems may occur otherwise, most notably the ability of administrators to create top-level mailboxes visible to users, but not writable by users.

Allow use of the POP3 APOP authentication command.

Note that this command requires that SASL is compiled with APOP support, that the plaintext passwords are available in a SASL auxprop backend (e.g., sasldb), and that the system can provide enough entropy (e.g., from /dev/urandom) to create a challenge in the banner.

Allow use of the NNTP NEWNEWS command.

Note that this is a very expensive command and should only be enabled when absolutely necessary.

If enabled, allows the use of cleartext passwords on the wire.

By default, the use of cleartext passwords requires a TLS/SSL encryption layer to be negotiated prior to any cleartext authentication mechanisms being advertised or allowed. To require a TLS/SSL encryption layer to be negotiated prior to ANY authentication, see the tls_required option.

Allow moving user accounts (with associated meta-data) via RENAME or XFER.

Note that measures should be taken to make sure that the user being moved is not logged in, and cannot login during the move. Failure to do so may result in the user’s meta-data (seen state, subscriptions, etc) being corrupted or out of date.

Use the alternate IMAP namespace, where personal folders reside at the same level in the hierarchy as INBOX.

This option ONLY applies where interaction takes place with the client/user. Currently this is limited to the IMAP protocol (imapd) and Sieve scripts (lmtpd). This option does NOT apply to admin tools such as cyradm (admins ONLY), reconstruct, quota, etc., NOR does it affect LMTP delivery of messages directly to mailboxes via plus-addressing. The default changed in 3.0 from off to on.

altprefix: Alt Folders

The cyrusdb backend to use for mailbox annotations.

Allowed values: skiplist, twoskip, lmdb

File containing external (third-party) annotation definitions.

Each line of the file specifies the properties of an annotation and has the following form:

is the extra ACL permission bits required for setting this annotation, in standard IMAP ACL permission bit string format. Note that this is in addition to the permission bits specified in RFC 5257 and RFC 5464, so leaving this field empty is harmless. Note also that there is no way to specify that an annotation can only be set by an admin user; in particular the a permission bit does not achieve this.

Blank lines and lines beginning with «#’’ are ignored.

The authorization mechanism to use.

If a user does not have an INBOX already, and the INBOX is to be created, create the list of folders in this setting as well. autocreate_inbox_folders is a list of INBOX’s subfolders separated by a “|”, that are automatically created by the server under the following two scenarios. Leading and trailing whitespace is stripped, so “Junk | Trash” results in two folders: “Junk” and “Trash”. See also the xlist-flag option, for setting special-use flags on autocreated folders.

INBOX folders are created under both the following conditions:

  1. The user logins via the IMAP or the POP3 protocol. autocreate_quota option must have a value of zero or greater.
  2. A message arrives for the user through the lmtpd(8). autocreate_post option must be enabled.

If set to a value of zero or higher, users have their INBOX folders created upon a successful login event or upon lmtpd(8) message delivery if autocreate_post is enabled, provided their INBOX did not yet already exist.

The user’s quota is set to the value if it is greater than zero, otherwise the user has unlimited quota.

Note that quota is specified in kilobytes.

If set to a value of zero or higher, users who have their INBOX folders created upon a successful login event (see autocreate_quota), or upon lmtpd(8) message delivery if autocreate_post is enabled, receive the message quota configured in this option.

The default of -1 disables assigning message quota.

For consistency with autocreate_quota, a value of zero is treated as unlimited message quota, rather than a message quota of zero.

A “|” separated list of subfolders of INBOX that will be automatically created, if requested by a sieve filter, through the “fileinto” action. The default is to create no folders automatically.

Leading and trailing whitespace is stripped from each folder, so a setting of “Junk | Trash” will create two folders: “Junk” and “Trash”.

The full path of a file that contains a sieve script. This script automatically becomes a user’s initial default sieve filter script.

When this option is not defined, no default sieve filter is created. The file must be readable by the Cyrus daemon.

The minimum size in kilobytes of chunks in each backup. The compact tool will try to combine adjacent chunks that are smaller than this.

Setting this value to zero or negative disables combining of chunks.

The maximum size in kilobytes of chunks in each backup. The compact tool will try to split chunks larger than this into smaller chunks.

Setting this value to zero or negative disables splitting of chunks.

The cyrusdb backend to use for the backup locations database.

Whether the ctl_backups compact and ctl_backups reindex commands should preserve the original file. The original file will be named with a timestamped suffix. This is mostly useful for debugging.

Note that with this enabled, compacting a backup will actually increase the disk used by it (because there will now be an extra copy: the original version, and the compacted version).

The latest date and time accepted by the server (ISO format). This value is also used for expanding non-terminating recurrence rules.

Note that increasing this value will require the DAV databases for calendars to be reconstructed with the dav_reconstruct utility in order to see its effect on serer-side time-based queries.

If enabled, a specific IP will be bound when performing a client connection. client_bind_name is used if it is set, otherwise servername is used. This is useful on multi-homed servers where Cyrus should not use other services’ interfaces.

If not enabled (the default), no bind will be performed. Client connections will use an IP chosen by the operating system.

The cyrusdb backend to use for the per-user conversations database.

defaultacl: anyone lrs

The partition name used by default for new mailboxes. If not specified, the partition with the most free space will be used for new mailboxes.

Note that the partition specified by this option must also be specified as partition-name, where you substitute ‘name’ for the alphanumeric string you set defaultpartition to.

Name of the default tier that messages will be indexed to. Search indexes can be organized in tiers to allow index storage in different directories and physical media. See the man page of squatter for details. The default search tier also requires the definition of an according searchtierpartition-name entry.

This option MUST be specified for xapian search.

With delete_mode set to delayed, the deletedprefix setting defines the prefix for the hierarchy of deleted mailboxes.

The hierarchy delimiter will be automatically appended.

The manner in which mailboxes are deleted. In the default delayed mode, mailboxes that are being deleted are renamed to a special mailbox hierarchy under the deletedprefix, to be removed later by cyr_expire(8).

In immediate mode, the mailbox is removed from the filesystem immediately.

Allowed values: immediate, delayed

Space-separated list of extra parameters to add to any appropriated event.

Allowed values: bodyStructure, clientAddress, diskUsed, flagNames, messageContent, messageSize, messages, modseq, service, timestamp, uidnext, vnd.cmu.midset, vnd.cmu.unseenMessages, vnd.cmu.envelope, vnd.cmu.sessionId, vnd.cmu.mailboxACL, vnd.cmu.mbtype, vnd.cmu.davFilename, vnd.cmu.davUid, vnd.fastmail.clientId, vnd.fastmail.sessionId, vnd.fastmail.convExists, vnd.fastmail.convUnseen, vnd.fastmail.cid, vnd.fastmail.counters

event_groups: message mailbox

Space-separated list of groups of related events to turn on notification

Allowed values: message, quota, flags, access, mailbox, subscription, calendar, applepushservice

If enabled, uses an improved directory hashing scheme which hashes on the entire username instead of using just the first letter as the hash. This changes hash algorithm used for quota and user directories and if hashimapspool is enabled, the entire mail spool.

Note that this option CANNOT be changed on a live system. The server must be quiesced and then the directories moved with the rehash utility.

A wildmat pattern specifying a list of origin URIs ( scheme ”://” host [ ”:” port ] ) that are allowed to make Cross-Origin Resource Sharing (CORS) requests on the server. By default, CORS requests are disabled.

Note that the scheme and host should both be lowercase, the port should be omitted if using the default for the scheme (80 for http, 443 for https), and there should be no trailing ‘/’ (e.g.: “http://www.example.com:8080”, “https://example.org”).

Allow use of the TRACE method.

Note that sensitive data might be disclosed by the response.

Space-separated list of relative URLs (paths) rooted at “httpdocroot” (see below) to be served by httpd. If set, this option will limit served static content to only those paths specified (returning “404 Not Found” to any other client requested URLs). Otherwise, httpd will serve any content found in “httpdocroot”.

Note that any path specified by “rss_feedlist_template” is an exception to this rule.

Space-separated list of HTTP modules that will be enabled in httpd(8). This option has no effect on modules that are disabled at compile time due to missing dependencies (e.g. libical).

Note that “domainkey” depends on “ischedule” being enabled, and that both “freebusy” and “ischedule” depend on “caldav” being enabled. Allowed values: admin, caldav, carddav, domainkey, freebusy, ischedule, rss, tzdist, webdav

If enabled, a special comparator will be used which will correctly sort mailbox names that contain characters such as ‘ ‘ and ‘-‘.

Note that this option SHOULD NOT be changed on a live system. The mailboxes database should be dumped (ctl_mboxlist) before the option is changed, removed, and then undumped after changing the option. When not using flat files for the subscriptions databases the same has to be done (cyr_dbtool) for each subscription database See improved_mboxlist_sort.html.

Specify how aliases dereferencing is handled during search.

Specify a filter that searches user identifiers. The following tokens can be used in the filter string:

%% = % %u = user %U = user portion of %u (%U = test when %u = test @ domain . tld) %d = domain portion of %u if available (%d = domain.tld when %u = %test @ domain . tld), otherwise same as %r %D = user dn. (use when ldap_member_method: filter) %1-9 = domain tokens (%1 = tld, %2 = domain when %d = domain.tld)

ldap_filter is not used when ldap_sasl is enabled.

Specify search scope for ldap_group_filter.

Specify a group method. The “attribute” method retrieves groups from a multi-valued attribute specified in ldap_member_attribute.

The “filter” method uses a filter, specified by ldap_member_filter, to find groups; ldap_member_attribute is a single-value attribute group name. Allowed values: attribute, filter

Specify search scope for ldap_member_filter.

Specify search scope.

The cyrusdb backend to use for mailbox keys.

Allowed values: skiplist, twoskip, lmdb

The cyrusdb backend to use for the mailbox list.

Space-separated list of headers to be added to incoming usenet articles. Added To: headers will contain email delivery addresses corresponding to each newsgroup in the Newsgroups: header. Added Reply-To: headers will contain email delivery addresses corresponding to each newsgroup in the Followup-To: or Newsgroups: header. If the specified header(s) already exist in an article, the email delivery addresses will be appended to the original header body(s).

This option applies if and only if the newspostuser option is set. Allowed values: to, replyto

A list of whitespace-separated news server specifications to which articles should be fed. Each server specification is a string of the form [user[:pass]@]host[:port][/wildmat] where ‘host’ is the fully qualified hostname of the server, ‘port’ is the port on which the server is listening, ‘user’ and ‘pass’ are the authentication credentials and ‘wildmat’ is a pattern that specifies which groups should be fed. If no ‘port’ is specified, port 119 is used. If no ‘wildmat’ is specified, all groups are fed. If ‘user’ is specified (even if empty), then the NNTP POST command will be used to feed the article to the server, otherwise the IHAVE command will be used.

A ‘@’ may be used in place of ‘!’ in the wildmat to prevent feeding articles cross-posted to the given group, otherwise cross-posted articles are fed if any part of the wildmat matches. For example, the string “peer.example.com:*,!control.*,@local.*” would feed all groups except control messages and local groups to peer.example.com. In the case of cross-posting to local groups, these articles would not be fed.

Userid used to deliver usenet articles to newsgroup folders (usually via lmtp2nntp). For example, if set to “post”, email sent to “post+comp.mail.imap” would be delivered to the “comp.mail.imap” folder.

When set, the Cyrus NNTP server will add the header(s) specified in the newsaddheaders option to each incoming usenet article. The added header(s) will contain email delivery addresses corresponding to each relevant newsgroup. If not set, no headers are added to usenet articles.

Мини-HOWTO: установка IMAP сервера Cyrus

Автор: Kevin Mitchell (kevin@iserv.net)

Перевод: Станислав Рогин, SWSoft Pte Ltd.

версия 0.9, 21 января 1998 года

В этом документе приведено несколько полезных советов по установке IMAP-сервера Cyrus на системе, использующей Linux.

1. Введение

Я хотел бы поблагодарить Bob Anderson (boba@iserv.net) и Jorge Paramo (jorge@iserv.net) за посильную помощь в моих путешествиях по миру Linux.

Что такое IMAP, и зачем он мне нужен?

IMAP (Internet Message Access Protocol) — это способ доступа к электронной почте или сообщениям в досках объявлений, содержащихся на почтовом сервере. IMAP воспринимается многими как альтернатива протоколу POP (Post Office Protocol). IMAP позволяет читать электронную почту с разных компьютеров напрямую с сервера, не загружая ее на локальную машину. Такой способ доступа к почте значительно более безопасен, а также предоставляет некоторые дополнительные возможности конечному пользователю.

Более подробное описание можно найти по адресу: http://www.imap.org/whatisIMAP.html

Сравнительная характеристика протоколов IMAP и POP доступна по адресу: http://www.imap.org/imap.vs.pop.brief.html

Почему Cyrus?

Сервер Cyrus создан для серверов, на котором обычным пользователям не разрешено входить в систему. А также, по-моему мнению, Cyrus — это один из двух наиболее популярных IMAP-серверов для Unix. Второй сервер — The University of Washington IMAP Server, доступный по адресу ftp://ftp.cac.washington.edu/imap/imap.tar.Z

2. Описание моей системы

Я удачно установил и настроил Cyrus на 486DX66- и Pentium-машинах, использующих Linux с ядром версии 2.1.79 и 2.0.33 соответственно. Изначально Linux на этих машинах был установлен с дистрибутива Slackware версии 3.4.

3. Установка Tcl

До установки Cyrus убедитесь в том, что на вашей машине установлен Tcl — иначе вы не сможете использовать Утилиту Администрирования Cyrus «Cyrus Admin Tool» (cyradm). Самую новую версию исходных текстов tcl можно найти по адресу ftp://ftp.sunlabs.com/pub/tcl/

После установки Tcl проверьте, что файл libtcl.a находится в каталоге /usr/local/lib/ . Tcl версии 8.0 создает файл libtcl8.0.a , и для гарантии нормальной работы надо создать соответствующую символьную ссылку, при помощи команды:

# ln -s libtcl8.0.a libtcl.a

4. Установка makedepend

Проверьте, есть ли в вашей системе команда makedepend . Если нет, то ничего страшного — она поставляется также с исходными текстами Cyrus. (В моей системе ее тоже не было, так как ее нет в Slackware 3.4)

Для установки makedepend , разверните пакет Cyrus, перейдите в каталог makedepend и запустите следующие команды:

./configure
make
cp ./makedepend /usr/local/bin/makedepend

5. Установка Cyrus

Внимательно прочтите инструкции по установке, входящие в пакет Cyrus. Эти инструкции можно также найти по адресу: http://andrew2.andrew.cmu.edu/cyrus/imapd/install.html

Несколько советов по некоторым фазам установки:

Если у вас дистрибутив Slackware 3.4 (с теневыми паролями (Shadow Passwords)), запустите configure командой:

make достаточно прост:

make depend
make all CFLAGS=-O

Шаг 1: После добавления пользователя cyrus, я отключил это имя входа для минимизации проблем с безопасностью.
Шаг 3: Я сам отредактировал файл /etc/syslog.conf, вместо простого копирования их примера.
Шаг 9: В Linux убедитесь в нормальном запуске pwcheck (приведенном ниже), иначе сервер не будет работать:

umask 0;/usr/cyrus/bin/pwcheck &
umask 022

И затем добавьте запуск Cyrus в загрузочный скрипт примерно такими строками::

if [ -f /usr/cyrus/bin/pwcheck ]; then
echo -n «Запуск pwcheck для imap»
umask 0;/usr/cyrus/bin/pwcheck &
umask 022
fi

Я добавил эти строки в файл /etc/rc.d/rc.local , и все прекрасно заработало.

Шаг 12: В процессе редактирования файла /etc/inetd.conf, проверьте нормальный запуск TCP Wrappers, если вы их используете, например:

imap streamtcp nowait cyrus /usr/sbin/tcpd /usr/cyrus/bin/imapd imap

И не забудьте про команду kill -HUP inetd после этих изменений:

# ps ax | grep inetd
61?S 0:00 /usr/sbin/inetd
# kill -HUP 61

6. Настройка Sendmail

Скачайте исходные тексты sendmail, если у вас их еще нет. До запуска IMAP, вы можете добавить некоторые полезные вещи, как, например, настройку анти-спам системы.

Ниже приведен мой файл .mc . Он доставляет почту посредством IMAP, если имя пользователя не указано в файле /etc/sendmail.cN . Таким образом системные пользователи, такие, как root, смогут содержать свою почту обычным образом в спуле (spool); В то же время все остальные по умолчанию используют IMAP. Не стоит просто копировать и использовать этот пример, иначе sendmail будет жаловаться на использование пробелов вместо табуляции:

divert(-1)
#
# (C) Copyright 1995 by Carnegie Mellon University
#
# All Rights Reserved
# Все права защищены
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
# provided that the above copyright notice appear in all copies and that
# both that copyright notice and this permission notice appear in
# supporting documentation, and that the name of CMU not be
# used in advertising or publicity pertaining to distribution of the
# software without specific, written prior permission.
#
# Разрешено бесплатное использование, копирование, изменение и
# распространение этого программного обеспечения для любых целей,
# с условием, что вышеприведенный копирайт будет воспроизведен
# на всех копиях, а также копирайт и это разрешение будет
# воспроизведено в сопутствующей документации. Имя CMU не может
# быть использовано в целях рекламы или публикации, сопутствующих
# дистрибутиву, без предварительного специального письменного разрешения
#
# CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
# CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
# SOFTWARE.
#
# CMU ОТВЕРГАЕТ ЛЮБУЮ ОТВЕТСТВЕННОСТЬ, СВЯЗАННУЮ С ИСПОЛЬЗОВАНИЕМ ЭТОГО
# ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ВКЛЮЧАЯ ВСЕ СОПУТСТВУЮЩИЕ ГАРАНТИИ ПРОДАВАЕМОСТИ
# И СОВМЕСТИМОСТИ. CMU НИ В КАКОМ СЛУЧАЕ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ ИЛИ
# КОСВЕННЫЙ УЩЕРБ ЛЮБОГО РОДА, ВКЛЮЧАЯ ПОТЕРИ ИСПОЛЬЗУЕМОСТИ, ДАННЫХ ИЛИ
# ПРИБЫЛИ, ПРОИЗОШЕДШИХ ТАКЖЕ ВСЛЕДСТВИЕ КОНТРАКТОВ, СОГЛАШЕНИЙ ИЛИ
# ДРУГИХ ФОРМ ПРАВООТНОШЕНИЙ, ВОЗНИКШИХ ИЗ ИЛИ СВЯЗАННЫХ С ЭТИМ ПРОГРАММНЫМ
# ОБЕСПЕЧЕНИЕМ
#
# Contributed to Berkeley by John Gardiner Myers .
# В институт Berkeley передано John Gardiner Myers .
#
# Это пример для сайта, использующего IMAP-сервер Cyrus
# для передачи локальной почты.
#

divert(0)dnl
VERSIONID(`@(#)cyrusproto.mc 8.3 (Carnegie Mellon) @(#)cyrusproto.mc 8.3′)
OSTYPE(linux)
define(`confBIND_OPTS’,`-DNSRCH -DEFNAMES’)
FEATURE(nouucp)
FEATURE(nocanonify)
FEATURE(always_add_domain)
MAILER(smtp)
MAILER(local)
MAILER(cyrus)

LOCAL_RULE_0
R$=N $: $#local $: $1
R$=N $: $#local $: $1
Rbb + $+ $#cyrusbb $: $1

LOCAL_CONFIG
FN /etc/sendmail.cN

# end of mc file

После создания файла /etc/sendmail.cf , создайте файл /etc/sendmail.cN со списком пользователей, которые не будут использовать доставку почты посредством IMAP, например:

root
majordom
stan
mothra

После установки пакета Sendmail версии 8.8.8 я также установил утилиту mail.local , как систему доставки локальной почты для вышеприведенных пользователей. Ниже приведен простой способ создания mail.local . Перейдите в каталог mail.local исходных текстов sendmail и проделайте следующее:

cp Makefile Makefile.orig
cp Makefile.dist Makefile
make
cp mail.local /bin/mail.local
chmod 4555 /bin/mail.local

После всего этого перезапустите sendmail.

Не забудьте закончить исполнение инструкций по установке Cyrus.

7. Настройка почтовых ящиков

Обязательно проведите все тесты работоспособности IMAP-сервера. Если все работает приемлемо — настройте почтовые ящики.

8. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу

9. Ответственность

Никаких гарантий, возврата денег и т.п. Используйте исключительно на свой страх и риск.

Как проверить, вернул ли запрос что-либо?

  • . login почтовое-имя пароль
  • . logout
  • . create user.почтовое-имя
  • . setquota user.почтовое-имя (storage размер-в-КБ)
  • . rename старое-имя новое-имя
    работает только для вложенных ящиков
  • . getquota user.почтовое-имя
  • Удаление:
    1. . setacl user.почтовое-имя имя-администратора c
    2. . delete user.почтовое-имя

imapsync — утилита синхронизации почтовых ящиков (perl). Установка:

  • скачать и распаковать архив
  • проверить наличие необходимых perl модулей
    perl -c imapsync
  • доставить недостающие (посмотреть в INSTALL, мне потребовался Mail::IMAPClient (пакет perl-Mail-IMAPClient.noarch, 2.2.9; perl-IO-Socket-SSL; perl-Net-SSLeay) и необнаруженные проверкой perl-DateManip, perl-TermReadKey
  • make install
    • /usr/bin/imapsync
    • /usr/share/man/man1/imapsync.1
  • imapsync —help
  • imapsync —justconnect —host1 откуда —host2 куда # тестирование соединения

Простое копирование ящика со старого сервера на новый (пароли запрашиваются):

Для преобразования почтового ящика в формате maildir (каждое письмо в отдельном файле) в формат mbox для чтения её локальными почтовыми клиентами (например Thunderbird):

Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка

Что такое код cyrus_query

Есть задача от коммерческого блока хранить все письма, уходящие с серверов приложений в течение двух недель. При этом сохранять письма в почтовом ящике с доступом через Web-интерфейс. В день отправляется в среднем по 50тыс. писем. Итого, за две недели имеем около 700тыс писем в ящике. Изначально на сервере был установлен dovecot с сохранением писем в maildir. Он перестал справляться с выдачей списка сообщений на цифре 400тыс писем.
CyrusImap хранит список писем в собственной БД для каждого ящика. По этому, его мало колышет сколько там писем, по этому было решено поставить его.

Проблемы:

Слабая документация, рекомендации, которые идут вместе с дистрибутивом (установленном через yum) не годятся – не взлетает. Для того, что бы заработало, пришлось спрашивать у гугла, правильные рецепты были найдены в обсуждениях на форумах.
Своя собственная индивидуально разработанная система администрирования, в которой нужно сначала разобраться а потом как то помнить.
Для решения вышеописанных проблем и родился данный пост. (суть – небольшая шпаргалка для себя, что бы не забыть).

Основные особенности Cyrus-imap, которые нужно помнить

Почтовые ящики отдельно – авторизация отдельно и все ручками. Т.е. для заведения почтового ящика следует сначала создать пользователя (либо в /etc/passwd , либо в sasldb , либо в ldap – в зависимости от настроек авторизации), потом средствами cyrus-imap создать в нем почтовый ящик, и третьим этапом, если нужно, сделать на этом ящике необходимые настройки.

Имена ящиков пользователей состоят из слова user и имени пользователя : user. (это папка INBOX). если пропустить слово user, то создастся почтовый ящик, доступный всем пользователям.
Папки в ящике соответственно user. .

Ящики и настройки лежат в разных местах.

По умолчанию в пакете из репозитория centos в качестве авторизации используется системная база пользователей /etc/passwd . Но обращение к ней идет не через PAM а через sasl . Sasl в свою очередь не имеет прав доступа к passwd , по этому он делает запрос через демон saslauthd , который запущен от root. если у вас вдруг этот демон не запущен – то фиг вам а не авторизация.

При авторизации через sasldb , у cyrus должны быть права на чтение файла /etc/sasldb2 . (мы помним, что sasldb дает возможность отвязать ящики от системных паролей что очень гуд)

По умолчанию в пакете из репозитория centos отключена авторизация plain и login . Если вы поставили пакет, завели пользователя и пытаетесь проверять работу утилитой imtest (как написано в документации) то фиг вам. т.к. она использует только plain .

Установка Cyrus-imap на Centos

в результате получаем следующее
— папка с почтовыми ящиками: /var/spool/imap
— папка с конфигами (бд, данные о квотах, скрипты sieve и прочие прелести): /var/lib/imap
— файл с конфигом, где указаны порты и IP для листенера: /etc/cyrus.conf (зачем они его вынесли отдельно. )
— основной файл с конфигом сервера: /etc/imap.conf (почему они его так назвали?! логичнее было бы как раз предыдущий файл назвать imap а этот cyrus, а лучше их объединить и назвать cyrus).

правим конфиг файл /etc/imap.conf

если нужна авторизация по /etc/passwd :

если нужна авторизация через sasldb :

для того, что бы работал plain добавляем:

указываем логины (имена пользователей), которые будет админами.

В документации написано, что лог пишется через syslog с фасилити local6. Ранее так и было, но в пакете centos 6.5 похоже он пишет в mail.*. решить проблему не удалось.
Беда в том, что в конфиге rsyslog.conf прописано mail.* , cyrus исправно генерит дебаги, чем сразу засирает maillog . По этому пришлось в конфиге сислога заменить mail.* на mail.info

заводим пользователя. в случае с sasldb:

Тюнинг и дополнительные настройки

Для того, что бы ускорить поиск по ящику можно делать его индекс при помощи команды squatter . Для того, что бы индекс был актуальный команду следует запускать регулярно. Для этого ее следует добавить в файл /etc/cyrus.conf в раздел EVENTS .
В моем случае при размере ящика 5 Гб и 400 тыс. писем первая индексация заняла 26 минут, последующая 4 минуты. По этому если вы решили добавить этот функционал к существующим ящикам, то стоит первый запуск сделать вручную (см. следующий раздел)

Удаляем из почтового ящика письма старше 2-х недель

Администрирование Cyrus-imapd – основные задачи

Заводим почтовые ящики (через утилиту cyradm)

Посмотреть все почтовые ящики в системе

Посмотреть все почтовые ящики вместе с папками

Удалить ящик (для этого сначала нужно установить атрибут доступа “c” на ящик для админа) почему “с”, когда должно быть “d” не понятно но работает

Восстановить ящик (перечитывает все письма и восстанавливает или делает новую БД)

Илон Маск рекомендует:  Разыменование ссылок
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Предупреждение!
08.05.2014, 09:33

Как проверить, пустое ли поле вернул ADOQuery
Товарищи, помогите, плз! Есть ADOQuery, который должен вернуть 4 столбца с данными из базы.

Проверить вернул ли что-то запрос с бд
Как проверить, в результате выполнения запроса было что-то возвращено? resultSet =.

Как проверить какое значение вернул запрос ?
Возможно ли проверить какое значение вернул запрос ? Допустим имеется простенький запрос с.

Как узнать вернул ли что-то запрос ?
Здравствуйте! Такая задача: я вводу в поле слово и хочу проверить есть ли такое слово в таблице.

Как узнать, что запрос ни чего не вернул?
Как узнать, что запрос Query1->SQL->Add(«SELECT. ни чего не вернул?

Bog BOS: Cyrus: POP3/IMAP сервер: установка, доработки, настройка

Сервер Cyrus IMAP является открытым (лицензия BSD-like) сервером базы почтовых сообщений с поддержкой протоколов POP3, IMAP4rev1 (RFC 3501) и NNTP (в т.ч. через TLS). В отличие от упрощённых серверов POP3 Cyrus IMAP не вынуждает заводить владельцев почтовых ящиков, как полноценных пользоватей системы, а обеспечивает собственные средства авторизации (с помощью библиотеки Cyrus SASL: механизмы KERBEROS_V4, GSSAPI, CRAM-MD5, DIGEST-MD5, OTP и PLAIN, команда STARTTLS) и хранения почтовых сообщений. Допускается одновременный доступ к одному почтовому ящику. Имеются средства управления списками доступа (ACL) и ограничения размера почтового ящика (QUOTA). Прочие расширения: LITERAL+, NAMESPACE, U >

Иерархическое пространство имён почтовых ящиков аналогично пространству имён newsgroups (простые имена, выстроенные в иерархию через точку; прописные и строчные буквы различаются). Почтовые ящики первого уровня иерархии могут создаваться только администратором, остальные в соответствии с правами (ACL) родительского почтового ящика. Корнем иерархии пользовательских почтовых ящиков является user. Все почтовые ящики пользвателя test имеют префикс «user.test.«. Создание ящика user.test равнозначно созданию пользователя test, в него кладёт новые почтовые сообщения агент местной доставки (local delivery agent), он же служит почтовым ящиком INBOX пользователя test, поэтому почтовый ящик user.test.junk выглядит для пользователя test как INBOX.junk, а для прочих пользователей как user.test.junk. Имя пользователя в стандартном иерархическом пространстве имён не может содержать точку. Относительные имена почтовых ящиков начинаются с точки. Сервер может работать в альтернативном пространстве имён, в котором почтовый ящик user.test.junk выглядит для пользователя test просто как junk (ящик user.test по-прежнему INBOX).

Русские имена почтовых ящиков можно декодировать с помощью «iconv -f utf-7», если заменить ‘&’ на ‘+’.

Доступ к каждому почтовому ящику определяется ACL, содержащим список элементов управления доступом. При создании ящика ACL копируется от родительского ящика (или defaultacl для ящиков первого уровня). При создании пользователя его корневому ящику устанавливается ACL, дающий пользователю все права над этим ящиком. Каждый элемент ACL имеет идентификатор пользователя (специальное имя для неавторизованного пользователя — anonymous; для любого, включая анонимного, пользователя — anyone) или группы пользователей (перед идентификатором может стоять знак отрицания ««) и набор прав доступа (администратор неявно имеет права «la» на всех ящиках; пользователь неявно имеет права «la» на всех своих ящиках):

  • l — имя почтового ящика будет показываться в списках (lsub, list, unseen)
  • r — право на чтение (select, check, fetch, partial, search, источник для copy)
  • s — для данного пользователя будут храниться личные флаги «Seen» и «Recent» (STORE \SEEN)
  • w — право на изменение флагов, кроме «Seen» и «Deleted»
  • i — право добавлять сообщения в ящик (append, назначение copy)
  • p — право добавлять сообщения в ящик (добавляется трассировочная строка)
  • c — право создавать подчинённые ящики, удалять и переименовывать этот ящик
  • d — право на запись флага «Deleted» и производить очистку (expunge)
  • a — право на изменение ACL

anonymous неявно имеет права «p» на корневых ящиках пользователей. Пользователь неявно имеет права на ящики внутри своей иерархии (или только «la»?). В общем, бардак с правами.

Механизмы авторизации (не аутентификации!):

  • Unix-style. Идентификатор — это имя пользователя или строка вида group:имя-группы
  • Kerberos 4.
  • Kerberos 5.
  • внешний процесс авторизации (ptloader).

Механизмы аутентификации (используется библиотека Cyrus SASL):

  • анонимный пользователь (опция allowanonymouslogin файла настройки): текстовый механизм аутентификации с именем пользователя anonymous и произвольным паролем и любой механизм аутентификации Cyrus SASL, позволяющий анонимный вход
  • текстовый пароль передаётся через IMAP LOGIN или SASL PLAIN (TLS), и проверяется с помощью PAM, Kerberos v4, /etc/passwd и /etc/shadow (sasl_auto_transition) библиотекой Cyrus SASL (sasl_pwcheck_method)
  • KERBEROS_V4
  • разделяемый секрет (CRAM-MD5, DIGEST-MD5), необходимо предоставить источник этих секретов (sasldb)

Механизм ограничения размера почтового ящика учитывает только сумму размеров почтовых сообщений (в килобайтах), но не учитывает размер служебной информации. Ограничение может накладываться на любое поддерево иерархии ящиков, за вычетом подподдеревьев, имеющих свои ограничения. В расширении к протоколу IMAP имеется команда установить ограничение (setquota), но не имеется команд для его снятия. При вставке сообщения (права «i») остаток места проверяется перед вставкой, при отправке сообщения (права «p») проверяется что лимит уже не превышен. При превышении лимита доставка прерывается с сообщением о временной проблеме.

База почтовых сообщений может быть распределена на несколько разделов, размещённых в различных файловых системах. Администратор может указать имя раздела при создании почтового ящика (раздел наследуется или берётся из defaultpartition). Раздел может быть изменён при переименовании почтового ящика (имя при этом можно не менять).

Cyrus IMAP может экспортировать Usenet через IMAP или IMAP через NNTP.

Cyrus IMAP обеспечивает обслуживание корневых почтовых ящиков пользователей по протоколу POP3 (только один клиент для ящика одновременно, включая IMAP клиентов).

Сообщения для syslog:

  • CRIT — требуется немедленное вмешательство
  • ERR — ошибки ввода-вывода
  • WARNING — ошибки аутентификации и авторизации клиентов
  • NOTICE — успешная и неуспешная аутентификация
  • INFO — открытие ящиков

Файл mailboxes.db (в /var/lib/imap) хранит список всех ящиков с их лимитами и ACL. /var/lib/imap/db.backup1 и /var/lib/imap/db.backup2 — старые копии.

Поддиректория quota содержит по файлу на каждое ограничиваемое поддерево иерархии: имя, текущий размер, ограничение. Чтобы удалить ограничение достаточно удалить этот файл и сделать под пользователем cyradm «/usr/lib/cyrus-imapd/quota -f».

Поддиректория user содержит для каждого пользователя файл (имя состоит из имени пользователя и суффикса «.sub»), содержащий сортированный список ящиков, на которые он подписан.

Поддиректория log может хранить протокол работы определённого пользователя. Достаточно создать в ней поддиректорию с именем этого пользователя (без имени раздела user).

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

Поддиректория msg может содержать файлы:

  • shutdown — соединение отвергается с выдачей сообщения
  • motd — первая строка посылается клиенту при соединении

Для каждого почтового ящика в разделе создаётся отдельная директория, в которой каждое почтовое сообщение хранится в отдельном файле с именем, состоящем из UID и точки на конце. В этой же директории хранятся служебные файлы: cyrus.header, cyrus.index, cyrus.cache, cyrus.seen.

Sendmail, Postfix, Exim кладут почтовые сообщения в базу с помощью протокола LMTP, демон lmtpd предоставляется (TCP/IP или Unix-сокет). При работе по TCP/IP необходимо использовать LMTP AUTH (SASL).

Сервер пытается хранить только одну копию сообщения, если письмо было получено сразу в несколько ящиков (жёсткие ссылки, отключается singleinstancestore). При перемещении сообщения внутри иерархии файл не перемещается (mv), а делается жёсткая ссылка (ln), что увеличивает счётчик inode-ов. Имеется механизм удаления повторных (по Message-Id) писем (отключается duplicatesuppression).

Программа master представляет собой гибрид xinetd и cron. Запускает остальные программы пакета при наступлении оговоренного события (сетевое соединение или момент времени). Инициализирует БД. При получении сигнала SIGTERM убивает подчинённые процессы, потом себя. Файл cyrus-master.pid не удаляется, файлы блокировки не удаляются. При аварийном завершении подчинённого процесса запускает его ещё раз для того же соединения, потом ещё и ещё. При получении сигнала SIGHUP перечитывает конфигурационный файл, Подчинённые процессы об этом не узнают, так что рекомендуется restart. Переменная окружения CYRUS_VERBOSE позволяет увеличить уровень журнализации (по умолчанию — 1). Параметры:

  • -C имя-конфигурационного-файла-imapd.conf (/etc/imapd.conf; не действует на запускаемые процессы!)
  • -M имя-конфигурационного-файла-cyrus.conf (/etc/cyrus.conf)
  • -d (уходить в фоновый раздел и освобождать терминал)
  • -D (отладочный режим)
  • -l размер-очереди-listen (32)
  • -j rps (1; сколько раз в секунду чистить таблицу порождённых процессов)
  • -p имя-pid-файла (/var/run/cyrus-master.pid)

Главный конфигурационный файл (/var/imap/cyrus.conf) для программы master состоит из именованных секций, содержимое секции заключается в фигурные скобки, комментарий начинается с символа ‘#’. Содержимое секции состоит из элементов, каждый элемент расположен на отдельной строке и состоит из имени (используется как имя процесса в hosts_access(5) для ограничения доступа) и списка аргументов (через пробел). Программы ищутся в директории установки. master понимает три секции:

  • START — определяет какие программы должны запускаться в начале работы до запуска первого сервиса; аргумент имеет вид: cmd=»имя-программы-с-параметрами»
  • SERVICES — определяет какие порты и сокеты слушать и какие программы запускать при соединении; аргументы элементов:
    • listen=»имя-сокета | [имя-хоста-или-IP:] номер-порта-или-имя-сервиса»
    • cmd=»имя-программы-с-параметрами»
    • proto=tcp (tcp4, udp4, tcp6, udp6, tcp, udp)
    • prefork=0 (сколько иметь предварительно загруженных процессов, для ускорения времени реакции)
    • maxchild=-1 (максимальное число одновременно запущенных задач)
    • maxfds=256 (ограничение на количество дескрипторов файлов для запускаемых процессов; хватит ли у master прав на это?)
  • EVENTS — запуск процессов через определённые интервалы или в указанный момент времени; аргументы элементов:
    • cmd=»имя-программы-с-параметрами»
    • period=0 (интервал в минутах)
    • at=HHMM

Пример (модифицированный вариант master/conf/normal.conf):

Всеми программами можно управлять с помощью переменных окружения:

  • CYRUS_VERBOSE (число, для использования отладчика более 30)
  • CYRUS_SERVICE
  • CYRUS_ID

imapd — сервер IMAP4rev1. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Ключи:

  • -C имя-конфигурационного-файла
  • -U число-обслуживаемых-клиентов (250; потом процесс будет перезапущен)
  • -T секунд (60; ждать следующего соединения)
  • -D (запуск под отладчиком, который задаётся в debug_command)
  • -s (включить SSL)
  • -p фактор-защиты (признак наличия внешнего слоя защиты; 1 — обеспечение целостности, 2 и выше — шифрование)

Конфигурационный файл состоит из строк вида (комментарии начинаются с символа ‘#’):

Опции (логические значения: yes, on, true, t, 1)

  • admins (; список администраторских идентификаторов через пробел; рекомендуется использовать данный идентификатор только для управления сервером; получать почту на него не рекомендуется)
  • allowallsubscribe (0; разрешать подписку на несуществующие ящики; рекомендуется при необходимости работать с MS Outlook)
  • allowanonymouslogin (0; разрешать аутентификацию пользователя anonymous с любым паролем, а также использование механизма SASL ANONYMOUS
  • allowapop (1; использование команды APOP; SASL потребуются открытые пароли)
  • allownewnews (0; обработка команды NNTP NEWNEWS)
  • allowplaintext (1; разрешить передавать пароли в открытом виде по сети)
  • allowplainwithouttls (false; не работает!)
  • allowusermoves (0; разрешить переименовывать пользователей командами RENAME и XFER; требуется обеспечить блокировку доступа на время перемещения внешними средствами)
  • altnamespace (0; дополнительные персональные ящики представляются клиентам на уровне INBOX, а не под ним; действует только на imapd, но не на LMTP и административные утилиты — cyradm, quota и др.)
  • annotation_db (skiplist; формат annotations.db: berkeley, skiplist)
  • auth_mech (unix; механизм авторизации: unix, pts, krb, krb5)
  • autocreateinboxfolders (; список создаваемых вложенных ящиков, при автоматическом создании INBOX при получении письма (createonpost) или входе пользователя (autocreatequota))
  • autocreatequota (0; разрешать пользователям создавать собственные учётные записи, создавая INBOX; положительное число задаёт максимальный размер таких ящиков; отрицательное значение отключает проверку размера ящика)
  • autocreate_users (; список имён пользователей и групп, для которых разрешено автоматическое создание ящиков)
  • autosubscribe_all_sharedfolders (false; подписывать на все разделяемые ящики, при автоматическом создании INBOX при получении письма (createonpost) или входе пользователя (autocreatequota))
  • autosubscribeinboxfolders (; список подписываемых вложенных ящиков, при автоматическом создании INBOX при получении письма (createonpost) или входе пользователя (autocreatequota))
  • autosubscribesharedfolders(; список подписываемых разделяемых ящиков, при автоматическом создании INBOX при получении письма (createonpost) или входе пользователя (autocreatequota))
  • berkeley_cachesize (512; размер кеша для bdb в КБ)
  • berkeley_locks_max (50000)
  • berkeley_txns_max (100; число транзакций)
  • client_timeout (10; в секундах)
  • configdirectory (; каталог, в котором всё хранится; /var/lib/imap)
  • createonpost (false; автоматическое создание ящика по приходу письма)
  • debug_command (; /usr/bin/gdb /usr/lib/cyrus-imap/%s %d
  • defaultacl (anyone lrs; ACL по умолчанию для создаваемого ящика верхнего уровня)
  • defaultdomain (; для подержки виртуальных доменов)
  • defaultpartition (default; имя раздела по умолчанию для новых ящиков)
  • deleteright (c; какие права требуются для удаления ящика; устарело; теперь для удаления ящика требуются права ‘x’)
  • duplicate_db (berkeley-nosync; формат БД для хранения информации о дублированных сообщениях: berkeley, berkeley-nosync, berkeley-hash, berkeley-hash-nosync, skiplist
  • duplicatesuppression (1; хранить message-id в БД и блокировать повторную доставку сообщений)
  • expunge_mode (immediate; режим удаления сообщений и записей в кеше по команде EXPUNGE; immediate — немедленно, как раньше; delayed — из индекса удаляются сразу, а сами файлы позже, утилитой cyr_expire)
  • flushseenstate (false; отключить кеширование записи состояний «прочитанности» сообщений, может потребоваться для Microsoft Outlook
  • foolstupidclients (0; запрос LIST «*» обрабатывается как LIST «INBOX*»)
  • fulldirhash (0; улучшенный алгоритм разнесения каталогов пользователей по различным директориям для ускорения доступа к файловой системе; нельзя менять на ходу, см. утилиту rehash)
  • hashimapspool (0; разносить по подкаталогам не только управляющие файлы, но и каталоги с данными пользователей)
  • idlesocket (базовый-каталог/socket/idle; сокет для сервиса idled)
  • ignorereference (0; игнорировать первый аргумент команд LIST и LSUB)
  • imapidlepoll (60; интервал — в секундах — опроса ящика на наличие изменений при обработке команды IDLE, а сервис idled недоступен; 0 запрещает использование опроса для реализации IDLE)
  • imapidresponse (1; выдавать на команду ID сведения о себе)
  • imapmagicplus (0; обработка «плюсового» пространства имён: имя-пользователя+имя-ящика
  • implicit_owner_rights (lca; неявнодобавляемые владельцу ящика права)
  • @include (; интерпретировать содержимое файла как часть конфигурации)
  • lmtp_downcase_rcpt (false; конвертировать адрес получателя к строчным буквам)
  • lmtp_fuzzy_mailbox_match (false; попытаться подбрать подходящее имя вложенного ящика для «плюсового» пространства имён)
  • lmtp_over_quota_perm_failure (false; при переполнении ящика выдавать не временный код ошибки, а постоянный)
  • lmtp_strict_quota (false; не допускать переполнения ящика)
  • lmtpsocket ($/socket/lmtp)
  • loginrealms (; ?)
  • loginuseacl (0; любой, у кого есть права на ящик пользователя INBOX могут входить под именем этого пользователя; ?!)
  • logtimestamps (0; заносить в протоколы (см. каталог log) временные интервалы)
  • mailnotifier (; метод извещения о поступлении почты; см. notifyd(8))
  • maxmessagesize (0; максимальный размер сообщения по LMTP)
  • mboxkey_db (skiplist; формат БД для ключей: berkeley, skiplist)
  • mboxlist_db (skiplist; формат БД для имён ящиков: berkeley, skiplist)
  • metapartition_files (; список метаданных, которые хранить не вместе с письмами пользователя, а в отдельном разделе: header, index, cache, expunge, squat)
  • metapartition-name (; имя раздела для хранения метаданных)
  • md5_dir (/var/lib/imap/md5; кеш для make_md5)
  • md5_user_map (?)
  • munge8bit (true; заменять запрещённые RFC822 символы со взведённым 8-м битом в заголовках на ‘X’)
  • netscapeurl (http://asg.web.cmu.edu/cyrus/imapd/netscape-admin.html; URI для HTTP-управления почтовым сервером)
  • normalizeuid (false; приводить идентификатор пользователя к строчным буквам и удалять пробелы)
  • notifysocket (базовый-каталог/socket/notify; сокет, используемый сервером извещений о новой почте notifyd)
  • partition-имя_раздела (; имя каталога, в котором лежат все файлы данного раздела)
  • plaintextloginpause (0; секунд паузы после успешной аутентификации открытым паролем, чтобы раздолбаям жизнь мёдом не казалась)
  • plaintextloginalert (текст сообщения для них)
  • popminpoll (0; минимальный интервал в минутах между входами в режиме POP)
  • popsubfolders (false; позволяет доступ к вложенным ящикам в режиме POP3 (имя-пользователя+имя-ящика))
  • poptimeout (10; в минутах)
  • popuseacl (false; использовать ACL в режиме POP3: r — право на чтение, d — право на удаление сообщений)
  • postuser («»; какое псевдоимя использовать для посылки в разделяемые ящики; по умолчанию пустое — «+имя-ящика.имя-вложенного-ящика»)
  • proxyservers (; список пользователей и групп через пробел, которым позволено аутентифицироваться от имени любых других пользователей (при аутентификации проверяется их имя/пароль, а при авторизации используются права указанного пользователя))
  • quota_db (quotalegacy; формат БД: flat, berkeley, berkeley-hash, skiplist, quotalegacy)
  • quotawarn (90; начиная с какого процента заполнения начинать выдавать предупреждения)
  • quotawarnkb (начиная с какого размера оставшегося пространства начинать выдавать предупреждения)
  • reject8bit (false; не принимать сообщения с символами со взведённым 8-м битом в заголовках — запрещено RFC822)
  • rfc2046_strict (0; строгая проверка правил написания граничных строк MIME)
  • sasl_auto_transition (см. SASL)
  • sasl_maximum_layer (256; максимальный поддерживаемый фактор безопасности)
  • sasl_minimum_layer (0; 1 — обеспечение целостности, 2 — шифровка)
  • sasl_pwcheck_method (; метод проверки открытого пароля: auxprop, saslauthd, pwcheck)
  • seenstate_db (skiplist; формат БД для информации о прочитанности сообщений: flat, berkeley, skiplist)
  • servername (`hostname`; имя сервера, показываемое в приветствиях)
  • sharedprefix («Shared Folders»; префикс разделяемых ящиков при использовании альтернативного пространства имён)
  • singleinstancestore (true; сообщение для нескольких получателей хранить только в одном экземпляре, используя жёсткие ссылки)
  • skiplist_unsafe (0; не делать sync при записи в БД формата skiplist)
  • soft_noauth (true; lmtp возвращает сообщение о временной ошибке при неудачной аутентификации)
  • srvtab (; имя файла, содержащего приватный ключ сервера, передаётся SASL; зачем он ему?)
  • submitservers (; список имён пользователей и групп, ?)
  • subscription_db (flat; формат БД для списка подписки: flat, berkeley, berkeley-hash, skiplist)
  • syslog_prefix (; добавляется к имени процесса в syslog)
  • temp_path (/tmp)
  • timeout (30; закрывать соединение через указанное число минут неактивности; минимум — 30)
  • tls_ca_file (; файл с сертификатами CA)
  • tls_ca_path (; каталог с файлами сертификатов CA; имена файлов д.б. хешами сертификатов)
  • tlscache_db (berkeley-nosync; формат БД: berkeley, berkeley-nosync, berkeley-hash, berkeley-hash-nosync, skiplist)
  • tls_cert_file (; имя файла с сертификатом сервера или строка «disabled»)
  • tls_cipher_list (DEFAULT)
  • tls_key_file (; имя файла с приватным ключом сервера или строка «disabled»)
  • tls_require_cert (0; требовать сертификат клиента)
  • tls_session_timeout (1440; кешировать TLS сессию указанное число минут; максимальное значение — 1440)
  • umask (077)
  • username_tolower (1; преобразовывать имена пользователей к строчным буквам; для LDAP — обязательно)
  • userprefix («Other Users»; префикс чужих ящиков при использовании альтернативного пространства имён)
  • unix_group_enable (1; )
  • unixhierarchysep (0; использовать ‘/’ вместо ‘.’ в качестве разделителя простых имён в иерархии)
  • virtdomains (off; поддержка виртуальных доменов: userid — имя домена извлекается из имени пользователя после ‘@’ или ‘%’; on — имя домена определяется по IP адресу клиента)
  • параметры для использования SASL: любые опции Cyrus SASL с добавлением префикса «sasl_» к имени опции
  • параметры для использования LDAP как средства аутентификации: ldap_*
  • параметры для murder: force_sasl_client_mech, hostname_mechs, hostname_password, mupdate_*, proxy_authname, proxy_password, proxy_realm, proxyd_allow_status_referral
  • параметры для USENET: newsmaster, newspeer, newspostuser, newsprefix, nntptimeout
  • параметры для sieve: autocreate_sieve_script, postmaster, generate_compiled_sieve_script, autocreate_sieve_compiledscript, rfc3028_strict, sendmail, sendsms, sieve_allowreferrals, sieve_extensions, sieve_maxscriptsize, sieve_maxscripts, sievedir, sievenotifier, sieveusehomedir, anysievefolder, autosievefolders
  • параметры для аутентификации PTS, AFS, Kerberos: afspts_localrealms, afspts_mycell, pts_module, ptloader_sock, ptscache_db, ptscache_timeout, ptskrb5_convert524, ptskrb5_strip_default_realm
  • параметры для сервера синхронизации: sync_*

pop3d — сервер POP3. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Ключи:

  • -C имя-конфигурационного-файла
  • -U число-обслуживаемых-клиентов (250; потом необходимо перезапустить процесс)
  • -T секунд (60; ждать следующего соединения)
  • -s (включить SSL)
  • -k (использовать KPOP)

Разделяет конфигурационный файл с imapd. Специфические опции:

  • popexpiretime (-1; угрожать удалить старые сообщения через указанное число дней)
  • popminpoll (0; минимальный интервал между аутентификациями)
  • poptimeout (10; автоматически завершать сеанс после указанного числа минут бездействия; минимум — 10)
  • popuseacl (0; использовать ACL: r — читать, d — удалять сообщения)

lmtpd — сервер LMTP. Общается с клиентом через стандартный ввод/вывод, т.е. должен запускаться с помощью master. Требуется аутентификация администратора. Ключи:

  • -C имя-конфигурационного-файла
  • -U число-обслуживаемых-клиентов (250; потом необходимо перезапустить процесс)
  • -T секунд (60; ждать следующего соединения)
  • -a (не требовать LMTP AUTH)

Разделяет конфигурационный файл с imapd. Специфические опции:

  • lmtp_downcase_rcpt (0; lmtpd преобразует идентификаторы получателей к строчным буквам)
  • lmtp_over_quota_perm_failure (0; при переполнении ящика возвращать сообщение о постоянной ошибке (5xx) вместо сообщения о временной ошибке (4xx))
  • lmtpsocket (базовый-каталог/socket/lmtp; сокет для сервиса lmtpd, используется deliverб должен совпадать с указанным в cyrus.conf)
  • maxmessagesize (0)
  • reject8bit (0; отвергать письма с 8-битными символами в заголовках или всего лишь заменять такие символы на ‘X’)
  • singleinstancestore (1; сообщение нескольким получателям хранится в одном экземпляре)
  • soft_noauth (1; возвращать код временной ошибки (4xx) при неверной аутентификации)

Утилита deliver может использоваться почтовым сервером для раскладки приходящей почты по ящикам (предпочтительно использование lmtpd). Общается с клиентом через стандартный ввод/вывод, в качестве параметров указываются идентификаторы получателей. Ключи:

  • -C имя-конфигурационного-файла
  • -d (игнорируется; присутствует для совместимости с /bin/mail)
  • -r адрес (вставлять Return-Path:)
  • -f адрес (вставлять From)
  • -a идентификатор-авторизации-отправителя (по умолчанию — anonymous)
  • -m имя-ящика (сообщение кладётся в ящик с именем: «user.идентификатор-получателя.имя-ящика», если у отправителя есть право «p», иначе в «user.идентификатор-получателя.INBOX»)
  • -q (не обращать внимание на переполнение ящика)
  • -l (использовать протокол LMTP)

Разделяет конфигурационный файл с imapd.

Подходит для восстановления почтовых сообщений из резервной копии (временно разрешить unix-сокет интерфейс).

cyradm представляет собой оболочку для perl-модуля администрирования сервера Cyrus::IMAP::Shell. Можно использовать непосредственно в интерактивном режиме (возможно, необходимо установить переменную окружения PERL5LIB равной /usr/local/lib/perl5/site_perl/5.8.0) или в скриптах на perl:

Команды в интерактивном режиме можно разделять в строке символами ‘;’. Ввод/вывод команд может быть переназначен аналогично /bin/sh (pipe не реализован). Редактирование строки реализовано средствами readline (история и т.д.). Команды:

  • help
  • exit
  • connect [—noauthenticate] имя-сервера (аутентификация происходит с именем unix-пользователя)
  • disconnect
  • authenticate [—minssf уровень] [—maxssf уровень] [—mechanisms список] [имя-пользователя]
  • setinfo атрибут значение (значение «none» удаляет атрибут; атрибуты сервера:
    • motd
    • comment
    • admin (email администратора)
    • shutdown
    • expire (через какое число дней после поступления удалять сообщение)
    • squat (?)
  • version
  • createmailbox [—partition имя-раздела] имя-ящика
  • mboxconfig имя-ящика атрибут значение (значение «none» удаляет атрибут; атрибуты:
    • comment
    • expire (через какое число дней после поступления удалять сообщение)
    • squat (?)
    • news2mail (на этот адрес будут приходить сообщения по NNTP?)
  • listmailbox [—subscribed] [шаблон [ссылка]] (в шаблоне можно использовать ‘*’ и ‘%’ (всё, кроме); ссылку можно рассматривать как начальную точку в иерархии имён)
  • info имя-ящика
  • renamemailbox [—partition имя-раздела] имя-ящика новое-имя-ящика
  • deletemailbox имя-ящика (предварительно необходимо назначить себе права для удаления ящика (обычно «c») командой setaclmailbox)
  • setaclmailbox имя-ящика идентификатор-пользователя права . (права могут задаваться в виде набора прав доступа или мнемонических обозначений — none, read (lrs), post (lrsp), append (lrsip), write (lrswipcd), all)
  • listaclmailbox имя-ящика
  • deleteaclmailbox имя-ящика идентификатор-пользователя
  • setquota корень-квотируемого-поддерева STORAGE ограничение (в байтах? значение «none» удаляет квоту)
  • listquotaroot имя-ящика (найти квотируемое поддерево и показать квоту)
  • listquota корень-квотируемого-поддерева
  • cd имя-каталога

В комплекте поставляются средства тестирования и они вам понадобятся.

imtest позволяет не только тестировать указанный сервер (протокол IMAP), но и администрировать его вместо cyradm (простейшие команды). Ключи:

  • -t имя-файла (STARTTLS; файл должен содержать публичные и приватные ключи клиента в формате PEM (как их делать?); можно указать «» для включения TLS без аутентификации клиента)
  • -p порт
  • -m SASL-механизм (по умолчанию — сильнейший из имеющихся; можно также указать механизм login)
  • -a идентификатор-аутентификации (по умолчанию имя unix-пользователя)
  • -u идентификатор-авторизации (по умолчанию имя unix-пользователя)
  • -k минимальный-уровень-защиты (0 — без защиты, 1 — целостность, 2 — шифрование)
  • -l максимальный-уровень-защиты
  • -r область-действия (realm)
  • -f имя-файла (после авторизации читать команды из файла)
  • -n число-попыток-аутентификации (клиент будет пытаться повторно использовать TLS сессию или упрощённую аутентификацию DIGEST-MD5)
  • -s (SSL, imaps)
  • -x имя-сокета (использовать сокет для интерактивной части)
  • -X имя-сокета (использовать сокет для интерактивной части, закрыть дескрипторы файлов и уйти в фоновый режим)
  • -I имя-файла (для режима -X, записать p >

pop3test позволяет соединиться с сервером используя протокол POP3 и выдавать произвольные команды. Ключи те же самые, что и у imtest (в качестве механизма можно указать user (обычные имя/пароль) или apop), кроме ключа -z.

lmtptest позволяет соединиться с сервером используя протокол LMTP и выдавать произвольные команды. Ключи те же самые, что и у pop3test.

Механизм PLAIN без шифрования в тестовых программах не работает, несмотря на указание «-k 0»

fud — сервер, позволяющий удалённо извлекать информацию о пользователе (сколько сообщений получено в ящик, когда было последнее сообщение, когда было последнее чтение).

smmapd — проверка наличия почтового ящика и места в нём.

mupdate — синхронизация нескольких серверов Cyrus IMAP.

timsieved — позволяет управлять скриптами sieve (антиспам фильтр) удалённо.

tls_prune — очистка кеша TLS. Запускается раз в сутки программой master. Параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Опция конфигурационного файла — tls_session_timeout.

cyr_expire — удаление старых данных из БД дубликатов и старых писем. Запускается раз в сутки программой master. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -v (болтливость); -E дней. Время хранения может определяться отдельно для поддерева с помощью аннотации /vendor/cmu/cyrus-imapd/expire (?).

ctl_cyrusdb — создание контрольных точек и восстановление баз данных. Запускается программой master в начале работы (-r) и с определённым интервалом (-c). Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -r — восстановление и очистка баз данных; -x — только восстановление (без очистки); -c — создание контрольной точки (и сколько их?).

ctl_deliver — обслуживание БД дупликатов. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -d (выдача содержимого в текстовом виде на stdout); -f имя-файла-БД (deliver.db).

ctl_mboxlist — обслуживание БД списка почтовых ящиков. Общий параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Операции:

  • -d (выдача содержимого в текстовом виде на stdout); -f имя-файла-БД (mailboxes.db); -p раздел (ограничиться разделом); -x (удалить распечатанные ящики)
  • -u (загрузить со stdin; предполагается результат предыдущего дампа); -f имя-файла-БД (mailboxes.db)
  • -m (синхронизация списка с mupdate); -f имя-файла-БД (mailboxes.db)

Например, если при запуске главного процесса он не может развернуть БД из mailboxes.db то его можно восстановить из резервной копии

reconstruct — не реализована самая важная функция (восстановление всей БД — ключ «m»).

mbpath — определить по имени ящика имя в файловой системе. Параметры: -C имя-конфигурационного-файла (/etc/imapd.conf); -q (не сообщать об ошибках); -s (останавливать обработку при ошибке).

cvt_cyrusdb — преобразовать БД сервера из одного формата в другой. Необходимо указать старый файл, формат старого файла, новый файл, формат нового файла. Параметр: -C имя-конфигурационного-файла (/etc/imapd.conf). Если вызвать без аргументов, то показывает список форматов (berkeley, berkeley-nosync, flat, skiplist, quotalegacy).

Настройка БД лежит в файле /var/lib/imap/db/DB_CONFIG

Статистика о использовании памяти и кеша:

Статистика о журналах БД

  1. предварительно необходимо иметь
    • Cyrus SASLv2
    • Berkeley DB той же версии, что использовалась для сборки Cyrus SASL
    • Perl 5 (для скриптов установки и cyradm)
    • OpenSSL (для STARTTLS и imaps:, pop3s:)
    • MTA с поддержкой LMTP (и AUTH) (exim)
  2. устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76) в группы mail (12) и saslauth (76), сюда также входят nntp и mupdate)
    • /etc/cyrus.conf, /etc/imapd.conf
    • /etc/logrotate.d/cyrus-imapd
    • /etc/cron.daily/cyrus-imapd (ежедневное копирование оглавления базы почтовых ящиков)
    • /etc/pam.d/ (csync, imap, lmpt, pop, sieve, mupdate, nntp)
    • /etc/pki/cyrus-imapd (самоподписанные сертификаты, заменить на свои)
    • /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
    • /usr/lib/cyrus-imapd/ (на самом деле здесь лежат программы сервера, причём 64-битные)
    • /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/ (auto/Cyrus/, Cyrus/)
    • /var/lib/imap/ (служебные файлы)
    • /var/spool/imap/ (почтовые сообщения)
    • /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest, notifytest, pop3test, sieveshell, sivtest, smtptest, synctest)
    • /usr/share/cyrus-imapd/ (дополнительные скрипты)
    • /usr/share/doc/cyrus-imapd-2.3.7/
    • /usr/share/doc/cyrus-imapd-perl-2.3.7/
    • /usr/share/man/
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить !)
  5. настроить и запустить saslauthd (pam)
  6. обеспечить права на /var/spool/imap
  7. установить пароль для cyrus
  8. завести пользователей (домашний каталог в /tmp, /sbin/nologin)
  9. service cyrus-imapd start
  10. chkconfig —level 345 cyrus-imapd on
  11. пробный доступ к почтовому ящику в режимах plain (вручную), TLS/plain (pop3test), STARTLS (pop3test)
  12. наполнение БД
  13. если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать (команды придётся вводить вручную)
  14. дырки в сетевом экране (iptables)
  15. после отладки: chkconfig -add cyrus-imapd
  1. предварительно необходимо иметь
    • Cyrus SASLv2, адаптированный для использования шифрованных паролей
    • Berkeley DB той же версии, что использовалась для сборки Cyrus SASL (db4-utils)
    • Perl 5 (для скриптов установки и cyradm)
    • OpenSSL (для STARTTLS и imaps:, pop3s:)
    • MTA с поддержкой LMTP (и AUTH) (exim)
  2. устанавливаем пакеты cyrus-imapd, cyrus-imapd-perl и cyrus-imapd-utils (пользователь cyrus (76) в группы mail (12) и saslauth (76), теперь сюда входят nntp и mupdate)
    • /etc/cyrus.conf, /etc/imapd.conf
    • /etc/logrotate.d/cyrus-imapd
    • /etc/cron.daily/cyrus-imapd (ежедневное копирование оглавления базы почтовых ящиков)
    • /etc/pam.d/ (csync, imap, lmpt, pop, sieve, mupdate, nntp)
    • /etc/pki/cyrus-imapd (?)
    • /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
    • /usr/lib/cyrus-imapd/ (на самом деле здесь лежат программы сервера, причём 64-битные)
    • /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi/ (auto/Cyrus/, Cyrus/)
    • /var/lib/imap/ (служебные файлы)
    • /var/spool/imap/ (почта)
    • /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest, notifytest, pop3test, sieveshell, sivtest, smtptest, synctest)
    • /usr/share/cyrus-imapd/ (дополнительные скрипты)
    • /usr/share/doc/cyrus-imapd-2.3.7/
    • /usr/share/doc/cyrus-imapd-perl-2.3.7/
    • /usr/share/man/
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить )
  5. ошибка в /etc/cron.daily/cyrus-imapd (lib на lib64) наложилась на странное расположение 64-битных программ /usr/lib/cyrus-imapd/
  6. настройка /etc/imapd.conf (всё в /var/lib/imap)
  7. /usr/lib/cyrus-imapd/tls_prune (под cyrus)
  8. /usr/lib/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
  9. для пробы: service cyrus-imapd start
  10. наполнение БД
  11. если имеются проблемы с cyradm (TLS, imclient_ha.al), то можно использовать (команды придётся вводить вручную)
  12. дырки в сетевом экране (iptables)
  13. после отладки: chkconfig -add cyrus-imapd
  1. предварительно необходимо иметь
    • Cyrus SASLv2
    • Berkeley DB той же версии, что использовалась для сборки Cyrus SASL
    • Perl 5 (для скриптов установки и cyradm)
    • OpenSSL (STARTTLS и imaps:, pop3s:)
    • MTA с поддержкой LMTP (и AUTH)
  2. устанавливаем пакеты cyrus-imapd и cyrus-imapd-utils (пользователь cyrus (76) в группе mail (12))
    • /etc/cyrus.conf, /etc/imapd.conf
    • /etc/logrotate.d/cyrus-imapd
    • /etc/cron.daily/cyrus-imapd (ежедневное копирование базы почтовых ящиков)
    • /etc/pam.d/ (imap, lmpt, pop, sieve)
    • /etc/rc.d/init.d/cyrus-imapd, /etc/sysconfig/cyrus-imapd (сервис cyrus-imapd)
    • /usr/lib64/cyrus-imapd/ (на самом деле здесь лежат программы сервера)
    • /var/lib/imap/ (служебные файлы)
    • /var/spool/imap/ (почта)
    • /usr/bin (утилиты cyradm, installsieve, imtest, lmtptest, mupdatetest, nntptest, pop3test, sieveshell, sivtest, smtptest)
    • /usr/share/cyrus-imapd/ (дополнительные скрипты)
    • /usr/share/doc/cyrus-imapd-2.2.12/
    • /usr/share/man/
  3. настройка syslog (источник MAIL) на сервере журналов
  4. настройка /etc/cyrus.conf (отключить timsieved; lmtp будет внешний; cyr_expire пореже)
  5. создание незашифрованного ключа (cyrus:root, 400) и сертификата сервера, подпись сертификата в /var/lib/imap/ (сюда же корневой сертификат)
  6. /etc/sysconfig/cyrus-imapd (CYRUSOPTIONS=»»)
  7. поправить ошибку в /etc/cron.daily/cyrus-imapd (lib на lib64)
  8. настройка /etc/imapd.conf (всё в /var/lib/imap)
  9. /usr/lib64/cyrus-imapd/tls_prune (под cyrus)
  10. /usr/lib64/cyrus-imapd/cyr_expire -E 3 -v (под cyrus)
  11. для пробы: service cyrus-imapd start
  12. наполнение БД
  13. если имеются проблемы с cyradm (TLS), то можно использовать (команды придётся вводить вручную)
  14. iptables
  15. после отладки: chkconfig -add cyrus-imapd
  1. предварительно необходимо иметь
    • Cyrus SASLv2
    • Berkeley DB той же версии, что использовалась для сборки Cyrus SASL
    • Perl 5 (для скриптов установки и cyradm)
    • OpenSSL, 0.9.4 (STARTTLS и imaps:, pop3s:)
    • libwrap
    • Net-SNMP (для мониторинга сервера)
    • MTA с поддержкой LMTP (и AUTH)
  2. копируем и распаковываем архив с исходными текстами, полученными на сайте разработчика; заходим внутрь
  3. makedepend (если его нет)
    1. cd makedepend
    2. ./configure
    3. make
    4. cp makedepend /usr/local/bin/
    5. cd ..
  4. как был глюкодром 10 лет назад, так и остался: родная директория д.б. /var/imap; монитор SNMP не собирается; разработчики пользуются для аутентификации Kerberos (кстати, нужен CPPFLAGS=-I/usr/kerberos/include), а остальные методы реализованы «для галочки»; конфигурационные файлы (cyrus.conf и imapd.conf) ищутся в /etc, несмотря на установку /usr/local
  5. ./configure —with-cyrus-prefix=/usr/local/cyrus —with-cyrus-user=cyrusimapd —with-cyrus-group=cyrusimapd —with-auth=unix —without-ucdsnmp —disable-sieve —sysconfdir=/var/imap —with-syslogfacility=LOCAL5 —disable-cmulocal —disable-murder —with-com_err=/usr
  6. [правим imap/message.c (message_copy_strict), чтобы разрешал русские буквы в заголовке] или достаточно reject8bit?
  7. правим вызов telemetry_log в imap/pop3d.c, imap/lmtpengine.c, imap/nntpd.c и imap/imapd.c (по нескольку раз, последний параметр д.б. 1, чтобы имя файла содержало время)
  8. make depend
  9. make all CFLAGS=-O2
  10. создаём группу cyrusimapd (79, с нужными членами) и пользователя cyrusimapd (79, по аналогии с exim)
  11. make install
    • /usr/local/man/man1 (imtest.1, pop3test.1, nntptest.1, lmtptest.1, smtptest.1, sivtest.1, mupdatetest.1, installsieve.1, sieveshell.1)
    • /usr/local/man/man3 (imclient.3)
    • /usr/local/man/man5 (imapd.conf.5, krb.equiv.5, cyrus.conf.5)
    • /usr/local/man/man8 (arbitron.8, cyr_expire.8, deliver.8, fud.8, imapd.8, pop3d.8, quota.8, reconstruct.8, rmnews.8, syncnews.8, mbpath.8, timsieved.8, master.8, lmtpd.8, )
    • /etc/rc.d/init.d/cyrus-imapd можно взять из FC3 (поправить под свою конфигурацию, при остановке удалить /var/run/cyrus-master.p >

  1. копируем
  2. распаковываем
  3. нужен новый Tcl/Tk
  4. ./configure —with-cyrus-prefix=/usr/local/cyrus —with-cyrus-user=bog —with-cyrus-group=mail —with-login=unix —with-pwcheck=getspnam
  5. правим imap/login_unix.c, так чтобы он читал пароли из того же файла, что и мой sendmail
  6. правим lib/auth_unix.c (auth_canonifyid), чтобы разрешал подчеркивания в именах пользователей
  7. правим imap/message.c (message_copy_strict), чтобы разрешал русские буквы в заголовке
  8. правим imap/pop3d.c (cmdloop):
    lcase( popd_userid ); после ввода имени пользователя
  9. в имя log-файла вставляем вместо getpid() время создания (imap/pop3d.c и imap/imapd.c — в двух местах)
  10. добавил опцию autosetquota в файл конфигурации и поправил imap/imapd.c (cmd_create);
  11. создал программу для локального администрирования bog_admin (на входе файл, каждая строка задает команду: первое слово имя команды, пока только create, второе слово почтовое имя, третье параметр — для create размер ящика);
  12. в фильтре против спамеров указываем, что cyrus — это локальный почтовый агент
  13. правим imap/config.c, imap/krbck.c (вот маньяки)
    • #define CONFIG_FILENAME «/usr/local/etc/imapd.conf»
    • LOG_LOCAL6 на LOG_LOCAL5
  14. make RANLIB=touch (я не знаю что делает ranlib, но после него ld грохается)
  15. make install (root) (/usr/local/lib/libcyrus.a, куча документации, /usr/local/include/cyrus, collectnews syncnews imapd pop3d arbitron reconstruct quota updateimsp deliver feedcyrus в /usr/local/cyrus/bin)
  16. добавляем в /etc/syslogd
    local5.debug /var/log/imapd.log
    и говорим на него touch (syslogd не забудь перезапустить)
  17. заполняем /usr/local/etc/imapd.conf
  18. создаем директорию /var/imapd с правами bog:mail (750)
  19. в ней создаем пустой файл mailboxes и директории user quota proc log msg с аналогичными правами
  20. создаем директорию для раздела по умолчанию: /var/imapd/partition-default и права аналогично
  21. в /etc/services добавляем
    pop3 110/tcp
    imap 143/tcp
  22. в /etc/inetd.conf добавляем (с поправкой на существующую конфигурацию) и перезапускаем inetd
    imap stream tcp nowait bog /usr/local/cyrus/bin/imapd imapd
    pop3 sream tcp nowait bog /usr/local/cyrus/bin/pop3d pop3d
  23. из rmnews делаем bog_rmarticles для удаления писем (убирая лишнее и исправляя ошибки);
    делаем процедуру bog_delete_old_mail.sh, которая ищет find’ом старые письма и подсовывает их адреса bog_rmarticles;
    вставляем вызов этой процедуры в crontab ежедневно из-под своего имени

Если в журнале масса записей вида «SQUAT failed», то это признак отсутствия индексного файла, который используется для поиска в почтовом ящике.

Создание (разовое) индексного файла для ящика пользователя (рекурсивно), файл cyrus.squat прямо в ящике:

Регулярное выполнение: в cyrus.conf в разделе EVENS добавить squatter cmd=»/usr/lib/cyrus-imapd/squatter -r user» at=0400

И теперь мы получаем другую ошибку: «SQUAT string list search failed on string».

  • отличия 2.3.15 от 2.3.7
    • поддержка BDB 4.5 и 4.6
    • утилита cyr_synclog для добавления сообщений в журнал репликации
    • ключи -g и -G для утилиты reconstruct
    • поддержка отложенного удаления (опции delete_mode и deletedprefix) и восстановления
    • сертификата TLS клиента может быть достаточно для аутентификации LMTP
    • опция serverinfo позволяет управлять информацией, которую сервер выводит в приглашении
    • строки продолжения в файлах настройки (обратная косая черта в конце строки)
    • ключ mbexamine для проверки правильности длин сообщений и квот
    • инкрементальный режим squatter
    • расширение IMAP SCAN для межъящичного поиска
    • опции для sieve: sieve_utf8fileinto, sieve_sasl_send_unsolicited_capability, sieve_sasl_expect_unsolicited_capability
    • возможность хранить cyrusdb в СУБД (MySQL, PostgreSQL, SQLite), опции sql_*
    • усовершенствована репликация
    • опция mailbox_default_options
    • утилита cyr_df показывает свободное место на разделе с почтой
    • поддержка IMAP COMPRESS
    • user_deny.db для запрета доступа определённым пользователям
    • опция disconnect_on_vanished_mailbox
    • опция popuseimapflag
    • опция annotation_definitions
    • опция sync_compress (сжатие репликаций)
    • опция user_folder_limit (ограничение на число папок)
  • отличия 2.3.7 от 2.2.13
    • множество изменений в Sieve
    • ctl_mboxlist пишет/читает флаги типа почтового ящика
    • репликация mailspool
    • отложенный expunge (сообщения помечаются в индексе сразу, а из файла удаляются утилитой cyr_expire); опция expunge_mode
    • возможность вынести метаданные на отдельный раздел; опции metapartition и metapartition_files
    • доступ к вложенным ящикам по протоколу POP3; опция popsubfolders
    • нечёткое соответствие имён почтовых ящиков и адресов; опция lmtp_fuzzy_mailbox_match
    • 64-битные квоты
    • опция flushseenstate
    • поддержка IMAP команд CATENATE и URLAUTH
    • ACL совместимы с RFC 4314 (разделение прав на удаление сообщений, удаление ящика и очистку)
    • опция nntptimeout
    • поддержка TLS в cyradm
    • поддержка BINARY APPEND
    • поддержка CONDSTORE (конфигурируется на уровне почтового ящика)
    • выдача CAPABILITY при соединении и аутентификации
    • ключ «-p» позволяет использовать аутентификацию PLAIN без TLS
    • опция munge8bit позволяет управлять заменой некодированных символов со взведённым старшим битом в заголовках на «X»
    • опция improved_mboxlist_sort для управления сортировкой имён
    • утилита cyr_dbtool
  • отличия 2.2.13 от 2.2.12
    • расширение IMAP U >