설치 가이드 · 12 min read · Jan 12, 2026

Postfix, Courier, MySQL 및 SquirrelMail을 사용한 가상 사용자 및 도메인 (Mandriva 2010.0 x86_64) - 페이지 5

15 SquirrelMail 설치하기

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 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 // // 이론적으로 Pear에서 지원하는 모든 SQL 데이터베이스가 지원되어야 합니다. // 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 또는 0이어야 하며, 사용자/비밀번호 쌍이 실제로 데이터베이스에 존재함을 나타냅니다. // // %1은 이 쿼리에서 전체 사용자 이름으로 대체됩니다 // (도메인을 포함하여), 예를 들어 "[email protected]" // %2는 이 쿼리에서 사용자 이름(도메인 부분 없이)으로 대체됩니다, 예를 들어 "jose" // %3은 이 쿼리에서 도메인 이름으로 대체됩니다, // 예를 들어 "example.com" // %4는 이 쿼리에서 현재(구) 비밀번호로 대체됩니다. // 필요한 경우 다른 플러그인 구성 설정에 따라 암호화 형식이 필요합니다. // %5는 이 쿼리에서 현재(구) 비밀번호로 대체됩니다. // 암호화되지 않은 일반 텍스트입니다. 암호화된 비밀번호를 사용하지 않는 경우, // %4와 %5는 동일한 값이 됩니다. // 단, %4는 이 쿼리에서 큰따옴표로 둘러싸이고 %5는 그렇지 않습니다. // //$lookup_password_query = ''; // TERRIBLE SECURITY: $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 // // 사용자가 비밀번호를 변경해야 하는지 여부를 나타내는 플래그를 확인하는 쿼리입니다. 이 쿼리는 // 사용자가 비밀번호를 변경할 필요가 없는 경우 0을 반환하고, // 사용자가 지금 변경해야 하는 경우 1을 반환해야 합니다. // // 이 설정은 이 기능을 활성화하고 싶지 않다면 빈 문자열이어야 합니다. // // %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 연결을 강제하고 싶지 않다면 0으로 설정하세요. // // 특정 도메인, 사용자 또는 서비스 수준에 대해 이 값을 오버라이드할 수 있습니다. // Virtual Host Login (vlogin) 플러그인을 통해 $vlogin_csp_secure_port에 값을 설정하세요. // $csp_secure_port = 0; //$csp_secure_port = 443; // csp_non_standard_http_port // // 비표준 포트(포트 80이 아닌 포트)에서 표준 HTTP 웹 요청을 제공하는 경우, // 해당 포트 번호를 여기에서 지정해야 합니다. 그렇지 않으면 0으로 설정하세요. // // 특정 도메인, 사용자 또는 서비스 수준에 대해 이 값을 오버라이드할 수 있습니다. // Virtual Host Login (vlogin) 플러그인을 통해 $vlogin_csp_non_standard_http_port에 값을 설정하세요. // //$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 // // 수용할 최소 및 최대 비밀번호 길이를 설정하거나, // 이러한 설정을 0으로 두어 제한을 적용하지 않도록 할 수 있습니다. // // 다른 설정을 활성화하여 새 비밀번호에 적어도 하나의 숫자, 대문자, // 소문자 및/또는 하나의 비알파벳 문자가 포함되어 있는지 확인할 수 있습니다. // $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 = '@'; // debug 모드 // $csp_debug = 0; ?> |

이제 SquirrelMail 구성으로 들어가서 SquirrelMail에 POP3 및 IMAP 서버로 Courier를 사용한다고 알려야 합니다(이 작업을 수행하지 않으면 SquirrelMail에 로그인할 때 다음과 같은 오류가 발생할 수 있습니다:

ERROR: 요청을 완료할 수 없습니다.  
쿼리: CREATE "Sent"  
주어진 이유: 잘못된 메일박스 이름.

) 그리고 Change SQL Password 플러그인을 활성화하고 다른 비밀번호 플러그인은 비활성화해야 합니다:

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

다음 메뉴가 표시됩니다. IMAP/POP3 서버를 변경하려면 D를 입력하세요:

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 메일서버  
mercury32 = Mercury/32  
uw = University of Washington의 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. change_pass  
23. demo  
24. fortune  
25. info  
26. junkfolder  
27. ldifimport  
28. listcommands  
29. login_image  
30. mail_fetch  
31. message_details  
32. rewrap  
33. secure_login  
34. select_range  
35. sent_subfolders  
36. spam_buttons  
37. spamassassin  
38. spamcop  
39. test  
40. username
R 메인 메뉴로 돌아가기  
C 색상 끄기  
S 데이터 저장  
Q 종료

명령 >> <– Q

이제 브라우저에서 http://server1.example.com/squirrelmail 또는 http://192.168.0.100/squirrelmail을 입력하여 SquirrelMail에 접근할 수 있습니다.

이메일 주소(예: [email protected])와 비밀번호로 로그인하세요:

받은 편지함에서 환영 이메일을 찾을 수 있어야 합니다:

비밀번호를 변경하려면 옵션으로 가서 비밀번호 변경을 선택하세요:

현재 비밀번호와 새 비밀번호를 두 번 입력하세요:

SquirrelMail은 비밀번호가 성공적으로 변경되었는지 알려줄 것입니다:

16 참고문헌

튜토리얼: Debian-Sarge 및 Postfix 2.1을 사용한 ISP 스타일 이메일 서비스: http://workaround.org/articles/ispmail-sarge/

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

Mail 비밀번호는 saslauthd를 사용하여 암호화됨: http://www.syscp.de/docs/public/contrib/cryptedmailpws

17 링크

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.