From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <4364EE51.3010105@stc.donpac.ru> Date: Sun, 30 Oct 2005 19:01:21 +0300 From: Eugene Prokopiev User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru-RU; rv:1.7.2) Gecko/20040808 X-Accept-Language: ru-ru, ru MIME-Version: 1.0 To: ALT Linux Community Content-Type: text/plain; charset=KOI8-R; format=flowed Content-Transfer-Encoding: 8bit Cc: Subject: [Comm] Postfix + SMTP-AUTH + SASL + MySQL X-BeenThere: community@lists.altlinux.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: ALT Linux Community List-Id: ALT Linux Community List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Oct 2005 15:59:09 -0000 Archived-At: List-Archive: List-Post: Здравствуйте! Задача: настроить SMTP-авторизацию в Postfix, имена и пароли пользователей уже хранятся в MySQL (открытым текстом): mysql> select userid, passwd from dbmail_users; +--------------------------------+----------+ | userid | passwd | +--------------------------------+----------+ | john | jpwd | +--------------------------------+----------+ Имею установленные: # rpm -qa | grep postfix (взят из бэкпортов) postfix-control-1.2-alt1 postfix-2.2.4-alt0.M24.1 postfix-html-2.2.4-alt0.M24.1 postfix-mysql-2.2.4-alt0.M24.1 postfix-tls-2.2.4-alt0.M24.1 # rpm -qa | grep sasl (сначала пытался взять из бекпортов, но там alt0, т.е. версия младше - как это получилось?) libsasl2-2.1.19-alt1 libsasl2-plugin-sql-2.1.19-alt1 cyrus-sasl2-2.1.19-alt1 cyrus-sasl2-docs-2.1.19-alt1 Читаю /usr/share/doc/postfix-2.2.4/README.ALT-ru_RU.KOI8-R: "Вся конфигурация SASL находится в /etc/postfix/sasl" Однако: # ls -l /etc/postfix/sasl ls: /etc/postfix/sasl: No such file or directory Пытаюсь определить, где лежат конфиги, стандартым методом :) # rpm -qli `rpm -qa | grep sasl` | grep /etc /etc/sasl2 /etc/sasl2/sasldb2 /etc/rc.d/init.d/saslauthd /etc/sasl2/saslauthd.conf /etc/sasl2/saslpasswd.conf /etc/sysconfig/saslauthd Cмотрю, что там уже наконфигурено: # cat /etc/sasl2/saslpasswd.conf pwcheck_method: sasldb # cat /etc/sasl2/saslauthd.conf | grep -v "^[#]" ldap_servers: ldap://10.1.1.15/ ldap://10.1.1.25/ ldap_bind_dn: cn=operator,ou=Profile,o=foo.com ldap_bind_pw: secret ldap_version: 3 ldap_timeout: 5 ldap_time_limit: 5 Прихожу в некоторое замешательство от отсутствия упоминаний об sql и иду в search.altlinux.ru, где упоминается совсем другой файл /usr/lib/sasl2/smtpd.conf. О lib говорит и google в ответ на "postfix sasl mysql". Предполагаю, что и в ALT когда-то следовали общим правилам, а затем решили поместить этот файл в более приличное место. Создаю этот файл и вписываю в него: pwcheck_method: auxprop auxprop_plugin: sql mech_list: plain login sql_engine: mysql sql_hostnames: localhost sql_user: dbmail sql_passwd: dbmailpwd sql_database: dbmail sql_select: select passwd from dbmail_users where userid='%u' После запуска сервиса saslauthd приходит мысль протестировать когфигурацию с помощью testsaslauthd, который я успел заметить в rpm -qli cyrus-sasl2: testsaslauthd: usage: testsaslauthd -u username -p password [-r realm] [-s servicename] [-f socket path] [-R repeatnum] Мана нет, что указывать в -r и -s непонятно, приходится оставить эту затею и тестировать непосредственно Postfix. В /usr/share/doc/postfix-2.2.4/README.ALT-ru_RU.KOI8-R сказано: "Некоторые типы представлений (и поддержка SASL) требуют дополнительной настройки (не отраженной в оригинальной документации) для работы в chroot окружении. Простое решение этой проблемы - использовать для таких представлений сервис proxy, который работает вне chroot. Для SASL решение более нетривиальное и требует частного подхода, но, в большистве случаев, может быть решено следующим образом - сокет демона saslauthd должен находится в пределах chroot (например, в каталоге /var/spool/postfix/var/run/saslauthd)" Осталось придумать, как поместить сокет демона saslauthd в чрут постфикса. Как сделать это правильно (и проверить, правильно ли сделал) не знаю, поэтому делаю так: # mkdir /var/spool/postfix/var/run # ln -s /var/run/saslauthd/mux /var/spool/postfix/var/run/mux Дальше в main.cf дописываю: smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject Перезапускаю Postfix и тестирую то, что получилось: $ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 myserver.myprovider.ru ESMTP Postfix ehlo client 250-myserver.myprovider.ru 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-AUTH SRP PLAIN OTP NTLM LOGIN DIGEST-MD5 CRAM-MD5 250 8BITMIME Ага, теперь спрашиваю у google, чем кодировать логин/пароль при использовании PLAIN или LOGIN. Последний отвечает, что нужен mimencode. # apt-cache search mimencode # Никого ... Ладно, воспользуемся Thunderbird. Отправляю письмо, указываю логин/пароль, у меня спрашивают его еще раз. В логах: SASL CRAM-MD5 authentication failed SASL NTLM authentication failed SASL PLAIN authentication failed SASL LOGIN authentication failed SASL CRAM-MD5 authentication failed и т.д. И постоянно повторяется: postfix/smtpd[12043]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasl2/sasldb2: No such file or directory Файл этот есть, но если Postfix пытается искать его у себя в чруте, то он естественно его не найдет. Но откуда он вообще берет это? Догадка, что сервис saslauthd не виноват, подтверждается, т.к. после его опускания в лог валятся те же сообщения. Т.е. Postfix плевал на saslauthd и пытается искать логин/пароль сам. Все, я шокирован окончательно ... Последняя идиотская попытка: если /etc/postfix/sasl упомянут, то может нужно создать такой файл и вписать туда содержимое smtpd.conf? Или создать такой каталог и в него этот файл положить? А демон saslauthd не нужен? Попробовал, не работает. Что мне делать дальше? Кстати, при старте saslauthd я вижу тоже не совсем то, что хотелось бы: Oct 30 18:51:03 myserver saslauthd[16198]: detach_tty : master pid is: 16198 Oct 30 18:51:03 myserver saslauthd[16198]: ipc_init : listening on socket: /var/run/saslauthd/mux Oct 30 18:53:31 myserver postfix/smtpd[16697]: sql_select option missing Oct 30 18:53:31 myserver postfix/smtpd[16697]: auxpropfunc error no mechanism available Oct 30 18:53:31 myserver postfix/smtpd[16697]: _sasl_plugin_load failed on sasl_auxprop_plug_init for plugin: sql Что не так? -- С уважением, Прокопьев Евгений