Установка SquirrelMail · 11 min read · Jan 09, 2026

Виртуальные пользователи и домены с Postfix, Courier, MySQL и SquirrelMail (CentOS 6.0 x86_64) - Страница 6

18 Установка SquirrelMail

SquirrelMail — это веб-интерфейс электронной почты, который позволит вашим пользователям отправлять и получать электронные письма в браузере. Эта глава показывает, как его установить и настроить для нашей конфигурации, чтобы пользователи могли даже менять пароль своей учетной записи электронной почты через интерфейс SquirrelMail.

Чтобы установить SquirrelMail, мы выполняем:

yum install squirrelmail php-pear-DB

После этого мы перезапускаем Apache:

/etc/init.d/httpd restart

SquirrelMail поставляется с некоторыми предустановленными плагинами, к сожалению, ни один из них не позволяет нам изменить пароль электронной почты в нашей базе данных MySQL. Но есть плагин Change SQL Password, который мы можем установить вручную:

cd /usr/share/squirrelmail/plugins  
wget http://www.squirrelmail.org/plugins/change_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 Paul Lesneiwski <[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.16-1.0.tar.gz  
tar xvfz compatibility-2.0.16-1.0.tar.gz

Теперь мы должны перейти в конфигурацию SquirrelMail и сказать SquirrelMail, что мы используем Courier в качестве нашего POP3 и IMAP сервера и включить плагины Change SQL Password и Compatibility:

/usr/share/squirrelmail/config/conf.pl

Вы увидите следующее меню. Перемещайтесь по нему, как указано:

SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Main Menu --  
1.  Organization Preferences  
2.  Server Settings  
3.  Folder Defaults  
4.  General Options  
5.  Themes  
6.  Address Books  
7.  Message of the Day (MOTD)  
8.  Plugins  
9.  Database  
10. Languages  
  
D.  Set pre-defined settings for specific IMAP servers  
  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- D  
  
  
SquirrelMail Configuration : Read: config.php  
---------------------------------------------------------  
While we have been building SquirrelMail, we have discovered some  
preferences that work better with some servers that don't work so  
well with others.  If you select your IMAP server, this option will  
set some pre-defined settings for that server.  
  
Please note that you will still need to go through and make sure  
everything is correct.  This does not change everything.  There are  
only a few settings that this will change.  
  
Please select your IMAP server:  
    bincimap    = Binc IMAP server  
    courier     = Courier IMAP server  
    cyrus       = Cyrus IMAP server  
    dovecot     = Dovecot Secure IMAP server  
    exchange    = Microsoft Exchange IMAP server  
    hmailserver = hMailServer  
    macosx      = Mac OS X Mailserver  
    mercury32   = Mercury/32  
    uw          = University of Washington's IMAP server  
    gmail       = IMAP access to Google mail (Gmail) accounts  
  
    quit        = Do not change anything  
Command >> <-- 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  
  
Press any key to continue... <-- press some key  
  
  
SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Main Menu --  
1.  Organization Preferences  
2.  Server Settings  
3.  Folder Defaults  
4.  General Options  
5.  Themes  
6.  Address Books  
7.  Message of the Day (MOTD)  
8.  Plugins  
9.  Database  
10. Languages  
  
D.  Set pre-defined settings for specific IMAP servers  
  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- 8  
  
  
SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
  
  Available Plugins:  
    4. administrator  
    5. bug_report  
    6. calendar  
    7. change_sqlpass  
    8. compatibility  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Return to Main Menu  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- 8 (или любое другое число, которое имеет плагин совместимости - он нужен плагину change_sqlpass)  
  
  
SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
  
  Available Plugins:  
    5. administrator  
    6. bug_report  
    7. calendar  
    8. change_sqlpass  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Return to Main Menu  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- 8 (номер плагина change_sqlpass)  
  
  
SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Available Plugins:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Return to Main Menu  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- S  
  
  
SquirrelMail Configuration : Read: config.php (1.4.0)  
---------------------------------------------------------  
Plugins  
  Installed Plugins  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. compatibility  
    5. change_sqlpass  
  
  Available Plugins:  
    6. administrator  
    7. bug_report  
    8. calendar  
    9. filters  
    10. fortune  
    11. info  
    12. listcommands  
    13. mail_fetch  
    14. message_details  
    15. sent_subfolders  
    16. spamcop  
    17. test  
    18. translate  
  
R   Return to Main Menu  
C   Turn color off  
S   Save data  
Q   Quit  
  
Command >> <-- 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.110/webmail в вашем браузере, чтобы получить доступ к SquirrelMail.

Войдите с вашим адресом электронной почты (например, [email protected]) и вашим паролем:

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

Чтобы изменить свой пароль, перейдите в “Настройки” и затем выберите “Изменить пароль”:

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

После того как вы измените пароль, вам придется немедленно войти снова с новым паролем:

19 VMA (Интерфейс виртуальной почты)

Интерфейс виртуальной почты (VMA) — это небольшое веб-приложение на PHP, написанное для управления электронной почтой, настроенной в этом руководстве. Я его не тестировал, но подумал, что поделюсь.

Вот что разработчик (Шарл Лоубсер) написал мне в электронном письме:

*”Привет,

Я не знаю, понравится ли вам это или будет ли это вам полезно, но я подумал, что поделюсь:

Я написал небольшое веб-приложение для настройки, которую вы сделали в Howto: https://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-ubuntu-10.04

Если вы одобрите и сочтете это достойным для публикации в вашем учебнике, вы более чем приветствуете и можете свободно это сделать.

Как упоминается в readme, это не идеальное приложение, но оно выполняет свою работу на данный момент, и я думаю, что оно относительно безопасно в закрытой среде (LAN-настройка между серверами).

RAR-файл с приложением прикреплен, но его также можно скачать по адресу: http://code.google.com/p/vma/ “*

20 Ссылки

Учебник: Услуга электронной почты в стиле ISP с Debian-Sarge и Postfix 2.1: http://workaround.org/articles/ispmail-sarge/

Postfix + Quota: http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17

Пароли электронной почты, зашифрованные с использованием saslauthd: http://www.syscp.de/docs/public/contrib/cryptedmailpws

21 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.