Установка SquirrelMail · 12 min read · Oct 01, 2025
Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (CentOS 5.3 x86_64) - Страница 5
18 Установка SquirrelMail
SquirrelMail — это веб-интерфейс для почты, который позволит вашим пользователям отправлять и получать электронные письма в браузере. В этой главе показано, как его установить и настроить так, чтобы пользователи могли даже менять пароль своей учетной записи электронной почты через интерфейс SquirrelMail.
Чтобы установить SquirrelMail, мы запускаем:
yum install squirrelmail php-pear-DBПосле этого мы перезапускаем Apache:
/etc/init.d/httpd restartSquirrelMail поставляется с некоторыми предустановленными плагинами, к сожалению, ни один из них не позволяет нам менять пароль электронной почты в нашей базе данных MySQL. Но есть плагин Change SQL Password, который мы можем установить вручную:
cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz
tar xvfz change_sqlpass-3.3-1.2.tar.gz
cd change_sqlpass
cp config.php.sample config.phpТеперь мы должны отредактировать config.php и настроить его под нашу конфигурацию. Пожалуйста, настройте переменные $csp_dsn, $lookup_password_query, $password_update_queries, $password_encryption, $csp_salt_static и $csp_delimiter следующим образом и закомментируйте $csp_salt_query:
vi config.php| [...] $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; [...] $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; [...] $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); [...] $password_encryption = 'MYSQLENCRYPT'; [...] $csp_salt_static = 'LEFT(password, 2)'; [...] //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; [...] $csp_delimiter = '@'; [...] |
Полный файл выглядит следующим образом:
| * 2002-2005 Пол Леснейвски <[email protected]> * Эта программа лицензирована под GPL. Смотрите COPYING для подробностей * * @package plugins * @subpackage Change SQL Password * */ // Глобальные переменные, не трогайте их, если не хотите сломать плагин // global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; // csp_dsn // // Теоретически, любая SQL база данных, поддерживаемая Pear, должна поддерживаться // здесь. DSN (имя источника данных) должен содержать информацию, необходимую // для подключения к вашему бэкенду базы данных. Пример MySQL приведен ниже. // Для получения дополнительной информации о синтаксисе DSN и списке поддерживаемых типов баз данных, // пожалуйста, смотрите: // http://pear.php.net/manual/en/package.database.db.intro-dsn.php // //$csp_dsn = 'mysql://user:password@localhost/email_users'; $csp_dsn = 'mysql://mail_admin:mail_admin_password@localhost/mail'; // lookup_password_query // // Этот плагин всегда будет проверять старый пароль пользователя // по сравнению с их паролем для входа, но дополнительная проверка также // может быть выполнена по базе данных для большей безопасности, если вы // этого хотите. Если вам не нужна дополнительная проверка пароля, // убедитесь, что эта настройка пуста. // // Это запрос, который возвращает положительное значение, если пара // пользователь/пароль найдена в базе данных. // // Этот запрос должен вернуть одно значение (одна строка, один столбец), // значение должно быть, в идеале, единицей или нулем, просто указывая, что // пара пользователь/пароль действительно существует в базе данных. // // %1 в этом запросе будет заменен полным именем пользователя // (включая домен), таким как "[email protected]" // %2 в этом запросе будет заменен именем пользователя (без // какой-либо части домена), таким как "jose" // %3 в этом запросе будет заменен именем домена, // таким как "example.com" // %4 в этом запросе будет заменен текущим (старым) // паролем в любом формате шифрования, необходимом в соответствии с другими // настройками конфигурации плагина (Обратите внимание, что синтаксис // пароля будет предоставлен в зависимости от ваших выборов шифрования, // поэтому вам НИКОГДА не нужно предоставлять кавычки вокруг этого // значения в запросе здесь.) // %5 в этом запросе будет заменен текущим (старым) // паролем в нешифрованном открытом тексте. Если вы не используете никакое // шифрование пароля, %4 и %5 будут одинаковыми значениями, // за исключением того, что %4 будет в двойных кавычках, а %5 — нет. // //$lookup_password_query = ''; // УЖАСНАЯ БЕЗОПАСНОСТЬ: $lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND plain_password = "%5"'; //$lookup_password_query = 'SELECT count(*) FROM users WHERE username = "%1" AND crypt_password = %4'; $lookup_password_query = 'SELECT count(*) FROM users WHERE email = "%1" AND password = %4'; // password_update_queries // // Массив SQL-запросов, которые будут выполнены // всякий раз, когда происходит попытка смены пароля. // // Здесь может быть любое количество запросов. // Запросы будут выполняться в порядке, указанном здесь. // // %1 во всех запросах будет заменен полным именем пользователя // (включая домен), таким как "[email protected]" // %2 во всех запросах будет заменен именем пользователя (без // какой-либо части домена), таким как "jose" // %3 во всех запросах будет заменен именем домена, // таким как "example.com" // %4 во всех запросах будет заменен новым паролем // в любом формате шифрования, необходимом в соответствии с другими // настройками конфигурации плагина (Обратите внимание, что синтаксис // пароля будет предоставлен в зависимости от ваших // выборов шифрования, поэтому вам НИКОГДА не нужно предоставлять кавычки // вокруг этого значения в запросах здесь.) // %5 во всех запросах будет заменен новым паролем // в нешифрованном открытом тексте - ОСТОРОЖНО! Если вы не используете // никакое шифрование пароля, %4 и %5 будут одинаковыми // значениями, за исключением того, что %4 будет в двойных кавычках, // а %5 — нет. // // $password_update_queries = array( // 'UPDATE users SET crypt_password = %4 WHERE username = "%1"', // 'UPDATE user_flags SET force_change_pwd = 0 WHERE username = "%1"', // 'UPDATE users SET crypt_password = %4, force_change_pwd = 0 WHERE username = "%1"', // ); $password_update_queries = array('UPDATE users SET password = %4 WHERE email = "%1"'); // force_change_password_check_query // // Запрос, который проверяет наличие флага, указывающего, должен ли пользователь // быть вынужден сменить свой пароль. Этот запрос // должен вернуть одно значение (одна строка, один столбец), которое // равно нулю, если пользователю НЕ нужно менять свой пароль, // или единицу, если пользователя следует заставить сделать это сейчас. // // Эта настройка должна быть пустой строкой, если вы не хотите // включать эту функциональность. // // %1 в этом запросе будет заменен полным именем пользователя // (включая домен), таким как "[email protected]" // %2 в этом запросе будет заменен именем пользователя (без // какой-либо части домена), таким как "jose" // %3 в этом запросе будет заменен именем домена, // таким как "example.com" // //$force_change_password_check_query = 'SELECT IF(force_change_pwd = "yes", 1, 0) FROM users WHERE username = "%1"'; //$force_change_password_check_query = 'SELECT force_change_pwd FROM users WHERE username = "%1"'; $force_change_password_check_query = ''; // password_encryption // // Какой метод шифрования вы используете для хранения паролей // в вашей базе данных? Пожалуйста, используйте один из следующих, // точно так, как вы его видите: // // NONE Пароли хранятся только в открытом виде // MYSQLPWD Пароли хранятся с использованием функции MySQL password() // MYSQLENCRYPT Пароли хранятся с использованием функции MySQL encrypt() // PHPCRYPT Пароли хранятся с использованием функции PHP crypt() // MD5CRYPT Пароли хранятся с использованием зашифрованного алгоритма MD5 // MD5 Пароли хранятся как хэш MD5 // //$password_encryption = 'MYSQLPWD'; $password_encryption = 'MYSQLENCRYPT'; // csp_salt_query // csp_salt_static // // Типы шифрования, которым нужен соль, должны знать, где взять // эту соль. Если у вас есть постоянное, известное значение соли, вы // должны определить его в $csp_salt_static. В противном случае оставьте это // значение пустым и определите значение для $csp_salt_query. // // Оставьте оба значения пустыми, если вам не нужно (или не используете) соли // для шифрования ваших паролей. // // Запрос должен вернуть одно значение (одна строка, один столбец), которое // является значением соли для пароля текущего пользователя. Этот // запрос игнорируется, если $csp_salt_static не пуст. // // %1 в этом запросе будет заменен полным именем пользователя // (включая домен), таким как "[email protected]" // %2 в этом запросе будет заменен именем пользователя (без // какой-либо части домена), таким как "jose" // %3 в этом запросе будет заменен именем домена, // таким как "example.com" // //$csp_salt_static = 'LEFT(crypt_password, 2)'; //$csp_salt_static = '"a4"'; // используйте этот формат с MYSQLENCRYPT //$csp_salt_static = '$2$blowsomefish$'; // используйте этот формат с PHPCRYPT //$csp_salt_static = ''; $csp_salt_static = 'LEFT(password, 2)'; //$csp_salt_query = 'SELECT SUBSTRING_INDEX(crypt_password, '$', 1) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT SUBSTRING(crypt_password, (LENGTH(SUBSTRING_INDEX(crypt_password, '$', 2)) + 2)) FROM users WHERE username = "%1"'; //$csp_salt_query = 'SELECT salt FROM users WHERE username = "%1"'; //$csp_salt_query = ''; // csp_secure_port // // Вы можете убедиться, что используется шифрование SSL во время смены пароля, // установив это на порт, на котором обслуживается ваш HTTPS // (443 — это типично). Установите в ноль, если вы не хотите // принуждать к соединению HTTPS, когда пользователи меняют свои пароли. // // Вы можете переопределить это значение для определенных доменов, пользователей или // уровней обслуживания через плагин Virtual Host Login (vlogin) // установив значение(я) для $vlogin_csp_secure_port в конфигурации vlogin. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // Если вы обслуживаете стандартные HTTP веб-запросы на нестандартном // порту (что-то кроме порта 80), вы должны указать этот // номер порта здесь. Установите в ноль в противном случае. // // Вы можете переопределить это значение для определенных доменов, пользователей или // уровней обслуживания через плагин Virtual Host Login (vlogin) // установив значение(я) для $vlogin_csp_non_standard_http_port // в конфигурации vlogin. // //$csp_non_standard_http_port = 8080; $csp_non_standard_http_port = 0; // min_password_length // max_password_length // include_digit_in_password // include_uppercase_letter_in_password // include_lowercase_letter_in_password // include_nonalphanumeric_in_password // // Вы можете установить минимальную и максимальную длину паролей, которые // вы принимаете, или оставить эти настройки равными нулю, чтобы указать, что // никаких ограничений не должно применяться. // // Включите любые другие настройки здесь, чтобы проверить, что новый // пароль содержит хотя бы одну цифру, заглавную букву, // строчную букву и/или один неалфавитный символ. // $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; // csp_delimiter // // если в вашей системе есть имена пользователей с чем-то другим, чем // знак "@", разделяющий часть пользователя и домена, // укажите этот символ здесь // //$csp_delimiter = '|'; $csp_delimiter = '@'; // режим отладки // $csp_debug = 0; ?> |
Плагин Change SQL Password также зависит от плагина Compatibility, который мы устанавливаем следующим образом:
cd /usr/share/squirrelmail/plugins
wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz
tar xvfz compatibility-2.0.14-1.0.tar.gzcd /usr/share/squirrelmail/plugins/compatibility
patch -p0 < patches/compatibility_patch-1.4.8.diffТеперь мы должны зайти в конфигурацию SquirrelMail и сказать SquirrelMail, что мы используем Courier в качестве нашего POP3 и IMAP сервера и включить плагины Change SQL Password и Compatibility:
/usr/share/squirrelmail/config/conf.plВы увидите следующее меню. Перемещайтесь по нему, как указано:
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Главное меню –
- Предпочтения организации
- Настройки сервера
- Значения папок
- Общие параметры
- Темы
- Адресные книги
- Сообщение дня (MOTD)
- Плагины
- База данных
- Языки
D. Установить предустановленные настройки для конкретных IMAP серверов
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– D
Конфигурация SquirrelMail : Чтение: config.php
Пока мы строили SquirrelMail, мы обнаружили некоторые
предпочтения, которые работают лучше с некоторыми серверами,
которые не работают так хорошо с другими. Если вы
выберите свой IMAP сервер, эта опция
установит некоторые предустановленные настройки
для этого сервера.
Пожалуйста, обратите внимание, что вам все равно
нужно будет пройти и убедиться, что
все правильно. Это не меняет
все. Есть только
несколько настроек, которые
это изменит.
Пожалуйста, выберите свой IMAP сервер:
bincimap = Binc IMAP сервер
courier = Courier IMAP сервер
cyrus = Cyrus IMAP сервер
dovecot = Dovecot Secure IMAP сервер
exchange = Microsoft Exchange IMAP сервер
hmailserver = hMailServer
macosx = Mac OS X Mailserver
mercury32 = Mercury/32
uw = IMAP сервер Университета Вашингтона
quit = Не менять ничего
Команда >> <– courier
imap_server_type = courier
default_folder_prefix = INBOX.
trash_folder = Trash
sent_folder = Sent
draft_folder = Drafts
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = .
delete_folder = true
Нажмите любую клавишу, чтобы продолжить… <– нажмите какую-то клавишу
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Главное меню –
- Предпочтения организации
- Настройки сервера
- Значения папок
- Общие параметры
- Темы
- Адресные книги
- Сообщение дня (MOTD)
- Плагины
- База данных
- Языки
D. Установить предустановленные настройки для конкретных IMAP серверов
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– 8
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Плагины
Установленные плагины
- delete_move_next
- squirrelspell
- newmail
Доступные плагины:
- calendar
- compatibility
- filters
- administrator
- info
- change_sqlpass
- fortune
- translate
- spamcop
- abook_take
- mail_fetch
- listcommands
- bug_report
- message_details
- sent_subfolders
R Вернуться в главное меню
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– 5 (или любое другое число, которое имеет плагин compatibility - он нужен для плагина change_sqlpass)
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Плагины
Установленные плагины
- delete_move_next
- squirrelspell
- newmail
- compatibility
Доступные плагины:
- calendar
- filters
- administrator
- info
- change_sqlpass
- fortune
- translate
- spamcop
- abook_take
- mail_fetch
- listcommands
- bug_report
- message_details
- sent_subfolders
R Вернуться в главное меню
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– 9 (номер плагина change_sqlpass)
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Плагины
Установленные плагины
- delete_move_next
- squirrelspell
- newmail
- compatibility
- change_sqlpass
Доступные плагины:
- calendar
- filters
- administrator
- info
- fortune
- translate
- spamcop
- abook_take
- mail_fetch
- listcommands
- bug_report
- message_details
- sent_subfolders
R Вернуться в главное меню
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– S
Данные сохранены в config.php
Нажмите Enter, чтобы продолжить… <– ENTER
Конфигурация SquirrelMail : Чтение: config.php (1.4.0)
Плагины
Установленные плагины
- delete_move_next
- squirrelspell
- newmail
- compatibility
- change_sqlpass
Доступные плагины:
- calendar
- filters
- administrator
- info
- fortune
- translate
- spamcop
- abook_take
- mail_fetch
- listcommands
- bug_report
- message_details
- sent_subfolders
R Вернуться в главное меню
C Выключить цвет
S Сохранить данные
Q Выйти
Команда >> <– Q
Последнее, что нам нужно сделать, это изменить файл /etc/squirrelmail/config_local.php и закомментировать переменную $default_folder_prefix - если вы этого не сделаете, вы увидите следующее сообщение об ошибке в SquirrelMail после входа: Query: CREATE “Sent” Reason Given: Invalid mailbox name.
vi /etc/squirrelmail/config_local.php| |
Теперь вы можете ввести http://server1.example.com/webmail или http://192.168.0.100/webmail в вашем браузере, чтобы получить доступ к SquirrelMail.
Войдите с вашим адресом электронной почты (например, [email protected]) и вашим паролем:

Вы должны найти приветственное письмо в вашем почтовом ящике:


Чтобы изменить ваш пароль, перейдите в Опции и затем выберите Изменить пароль:

Введите ваш текущий пароль, а затем ваш новый пароль дважды:

SquirrelMail сообщит вам, если пароль был успешно изменен:

19 Ссылки
Учебник: Услуга электронной почты в стиле ISP с Debian-Sarge и Postfix 2.1: http://workaround.org/articles/ispmail-sarge/
Postfix + Квота: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
Пароли электронной почты, зашифрованные с использованием saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws
20 Ссылки
- Postfix MTA: http://www.postfix.org/
- Патч квоты Postfix: http://web.onda.com.br/nadal/
- phpMyAdmin: http://www.phpmyadmin.net/
- SquirrelMail: http://www.squirrelmail.org/
- CentOS: http://www.centos.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.