Установка SquirrelMail · 13 min read · Sep 28, 2025

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

15 Установка SquirrelMail

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

Чтобы установить SquirrelMail, просто введите:

urpmi squirrelmail

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

cd /var/www/squirrelmail/plugins/  
wget http://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; ?> |

Теперь мы должны зайти в конфигурацию SquirrelMail и сообщить SquirrelMail, что мы используем Courier в качестве нашего POP3 и IMAP сервера (если вы этого не сделаете, вы, скорее всего, увидите ошибки, такие как

ERROR: Не удалось завершить запрос.  
Запрос: CREATE "Sent"  
Причина: Неверное имя почтового ящика.

когда вы войдете в SquirrelMail) и включить плагин Change SQL Password и отключить другие плагины паролей:

/var/www/squirrelmail/conf/conf.pl

Вы увидите следующее меню. Нажмите D, чтобы изменить сервер IMAP/POP3:

Конфигурация SquirrelMail : Чтение: config.php (1.4.0)  
---------------------------------------------------------  
Главное меню --  
1. Предпочтения организации  
2. Настройки сервера  
3. Значения папок по умолчанию  
4. Общие параметры  
5. Темы  
6. Адресные книги  
7. Сообщение дня (MOTD)  
8. Плагины  
9. База данных  
10. Языки
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)  
---------------------------------------------------------  
Главное меню --  
1. Предпочтения организации  
2. Настройки сервера  
3. Значения папок по умолчанию  
4. Общие параметры  
5. Темы  
6. Адресные книги  
7. Сообщение дня (MOTD)  
8. Плагины  
9. База данных  
10. Языки
D. Установить предопределенные настройки для конкретных IMAP серверов
C Выключить цвет  
S Сохранить данные  
Q Выйти

Команда >> <– 8

Конфигурация SquirrelMail : Чтение: config.php (1.4.0)  
---------------------------------------------------------  
Плагины  
Установленные плагины  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. change_pass  
7. quota_usage  
8. change_ldappass  
9. avelsieve  
10. windows  
11. folder_sizes  
12. archive_mail  
13. empty_folders
Доступные плагины:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_sqlpass  
21. compatibility  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Вернуться в главное меню  
C Выключить цвет  
S Сохранить данные  
Q Выйти

Команда >> <– 21 (или любое другое число, которое имеет плагин совместимости - он нужен для плагина change_sqlpass)

Конфигурация SquirrelMail : Чтение: config.php (1.4.0)

Плагины
Установленные плагины

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. change_pass
  7. quota_usage
  8. change_ldappass
  9. avelsieve
  10. windows
  11. folder_sizes
  12. archive_mail
  13. empty_folders
  14. compatibility
    Доступные плагины:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_sqlpass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Вернуться в главное меню
    C Выключить цвет
    S Сохранить данные
    Q Выйти
    
    Команда >> <-- 21 (номер плагина change_sqlpass)  
    
    Конфигурация SquirrelMail : Чтение: config.php (1.4.0)  
    ---------------------------------------------------------  
    Плагины  
    Установленные плагины  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. change_ldappass  
    8. avelsieve  
    9. windows  
    10. folder_sizes  
    11. archive_mail  
    12. empty_folders  
    13. compatibility  
    14. change_sqlpass
Доступные плагины:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Вернуться в главное меню  
C Выключить цвет  
S Сохранить данные  
Q Выйти

Команда >> <– 6 (номер плагина change_pass)

Конфигурация SquirrelMail : Чтение: config.php (1.4.0)

Плагины
Установленные плагины

  1. delete_move_next
  2. squirrelspell
  3. newmail
  4. filters
  5. address_add
  6. quota_usage
  7. change_ldappass
  8. avelsieve
  9. windows
  10. folder_sizes
  11. archive_mail
  12. empty_folders
  13. compatibility
  14. change_sqlpass
    Доступные плагины:
  15. abook_import_export
  16. administrator
  17. block_sender
  18. bookmarks
  19. bug_report
  20. calendar
  21. change_pass
  22. demo
  23. fortune
  24. info
  25. junkfolder
  26. ldifimport
  27. listcommands
  28. login_image
  29. mail_fetch
  30. message_details
  31. rewrap
  32. secure_login
  33. select_range
  34. sent_subfolders
  35. spam_buttons
  36. spamassassin
  37. spamcop
  38. test
  39. translate
  40. username
    R Вернуться в главное меню
    C Выключить цвет
    S Сохранить данные
    Q Выйти
    
    Команда >> <-- 7 (номер плагина change_ldappass)  
    
    Конфигурация SquirrelMail : Чтение: config.php (1.4.0)  
    ---------------------------------------------------------  
    Плагины  
    Установленные плагины  
    1. delete_move_next  
    2. squirrelspell  
    3. newmail  
    4. filters  
    5. address_add  
    6. quota_usage  
    7. avelsieve  
    8. windows  
    9. folder_sizes  
    10. archive_mail  
    11. empty_folders  
    12. compatibility  
    13. change_sqlpass
Доступные плагины:  
14. abook_import_export  
15. administrator  
16. block_sender  
17. bookmarks  
18. bug_report  
19. calendar  
20. change_ldappass  
21. change_pass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Вернуться в главное меню  
C Выключить цвет  
S Сохранить данные  
Q Выйти

Команда >> <– S

Данные сохранены в config.php
Нажмите Enter, чтобы продолжить… <– ENTER

Конфигурация SquirrelMail : Чтение: config.php (1.4.0)  
---------------------------------------------------------  
Плагины  
Установленные плагины  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. filters  
5. address_add  
6. quota_usage  
7. change_ldappass  
8. avelsieve  
9. windows  
10. folder_sizes  
11. archive_mail  
12. empty_folders  
13. compatibility  
14. change_sqlpass
Доступные плагины:  
15. abook_import_export  
16. administrator  
17. block_sender  
18. bookmarks  
19. bug_report  
20. calendar  
21. change_ldappass  
22. demo  
23. fortune  
24. info  
25. junkfolder  
26. ldifimport  
27. listcommands  
28. login_image  
29. mail_fetch  
30. message_details  
31. rewrap  
32. secure_login  
33. select_range  
34. sent_subfolders  
35. spam_buttons  
36. spamassassin  
37. spamcop  
38. test  
39. translate  
40. username
R Вернуться в главное меню  
C Выключить цвет  
S Сохранить данные  
Q Выйти

Команда >> <– Q

Теперь вы можете ввести http://server1.example.com/squirrelmail или http://192.168.0.100/squirrelmail в вашем браузере, чтобы получить доступ к SquirrelMail.

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

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

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

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

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

16 Ссылки

Учебник: Услуга электронной почты в стиле 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

17 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.