Qmail + Vpopmail(with mysql) 환경으로 메일서버를 운영하는 경우 메일계정명의 문자열이 3글자를 넘지 않으면 /home/vpopmail/bin/vadduser, /home/vpopmail/bin/vadeluser 커맨드로 계정 생성 및 삭제 등의 관리가 안 되는 것을 확인할 수 있었습니다. 보안상 원래 이렇게 만들어 놓은 모양... vpopmail과 연동하지 않은 qmail 서버의 경우에도 마찬가지인지는 모르겠네요.

그래도 생성 가능하다는 점 알리고자 포스팅합니다. 작업 내용은 간단합니다. /home/vpopmail/bin/vadduser 바이너리 실행 시 MySQL vpopmail 디비 상에서 실행되는 쿼리와 메일박스 디렉토리 생성 과정을 수작업으로 대신해 주는 것 뿐입니다.

vpopmail 디비의 테이블 구조는 아래와 같죠.
lastauth, vpopmail 테이블을 손보게 됩니다.
mysql> show tables;
+--------------------+
| Tables_in_vpopmail |
+--------------------+
| dir_control        |
| lastauth           |
| relay              |
| vpopmail           |
+--------------------+
4 rows in set (0.00 sec) mysql>

붉은색 표시를 한 lastauth 테이블의 구조를 뜯어 봅시다.
mysql> SELECT *  FROM `lastauth`  LIMIT 30 , 5;
+-----------+--------------+-----------+------------+
| user      | domain       | remote_ip | timestamp  |
+-----------+--------------+-----------+------------+
| apple    | foobar.net | 0.0.0.0   | 1234971340 |
| banana  | foobar.net | 0.0.0.0   | 1234971340 |
| chicken | foobar.net | imap      | 1296178009 |
| diamond | foobar.net | imap      | 1247763205 |
| eagle   | foobar.net | imap      | 1264080570 |
+-----------+--------------+-----------+------------+
5 rows in set (0.00 sec) mysql>

vpopmail 테이블의 구조도 뜯어 봅시다.
총 9개의 필드를 사용하네요.
(pw_name, pw_domain, pw_passwd, pw_uid, pw_gid, pw_gecos, pw_dir, pw_shell, pw_clear_passwd)
mysql> SELECT * FROM `vpopmail` LIMIT 0 , 5;
+------------+--------------+------------------------------------+--------+--------+------------+------------------------------------------------+----------+-----------------+
| pw_name    | pw_domain    | pw_passwd                          | pw_uid | pw_gid | pw_gecos   | pw_dir                                         | pw_shell | pw_clear_passwd |
+------------+--------------+------------------------------------+--------+--------+------------+------------------------------------------------+----------+-----------------+
| postmaster | foobar.net | $1$36g5tDc/$WKSm1Otu2M9A4ZsirdjtB1 |      0 |      0 | Postmaster | /home/vpopmail/domains/foobar.net/postmaster | NOQUOTA  | ***************** |
| webmaster  | foobar.net | $1$Rr2CY0zg$Bx9GjMYaXlikQ/poHTVLG0 |      0 |      0 | webmaster  | /home/vpopmail/domains/foobar.net/webmaster  | NOQUOTA  | ***************** |
| admin      | foobar.net | $1$ipRC78ww$nxTFzQs0dcJUBlueVZg8M. |      0 |      0 | 디지문     | /home/vpopmail/domains/foobar.net/admin      | NOQUOTA  | ***************** |
| root       | foobar.net | $1$EyNIHv91$S0zrKtOo69KYu0q4uionA0 |      0 |      0 | root       | /home/vpopmail/domains/foobar.net/root       | NOQUOTA  | *****************            |
| digimoon   | foobar.net | $1$DsFcGp6E$lueSbJcqjHBIvYMfqFYe61 |      0 |      0 |            | /home/vpopmail/domains/foobar.net/digimoon   | NOQUOTA  | *****************            |
+------------+--------------+------------------------------------+--------+--------+------------+------------------------------------------------+----------+-----------------+
5 rows in set (0.00 sec) mysql>
※ pw_clear_passwd 필드에 들어간 값들은 패스워드가 평문 형태로 그대로 저장되어 있는지라 모자이크 처리했습니다(붉은색 부분).


디비 구조를 파악했으면 우선 /home/vpopmail/bin/vadduser 커맨드로 3글자 이상의 메일계정을 임의로 생성합니다.
[root@localhost ~]# /home/vpopmail/bin/vadduser abcd@foobar.net
Please enter password for abcd@foobar.net:
enter password again:
[root@localhost ~]#

abcd@foobar.net 계정을 a@foobar.net로 바꾸어 주려면 vpopamail 디비에 접속 후 아래 쿼리를 날려 주면 됩니다.
lastauth의 user 필드와 vpopmail의 pw_name, pw_dir 필드를 직접 수정해 주는 것이죠.
mysql> UPDATE `vpopmail`.`lastauth` SET `user` = 'a'  WHERE `lastauth`.`user` = 'abcd' AND `lastauth`.`domain` = 'foobar.net' LIMIT 1 ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> UPDATE `vpopmail`.`vpopmail` SET `pw_name` = 'a', `pw_dir` = '/home/vpopmail/domains/foobar.net/a'  WHERE `vpopmail`.`pw_name` = 'abcd' AND `vpopmail`.`pw_domain` = 'foobar.net' LIMIT 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>


마지막으로 /home/vpopmail/domains/foobar.net/abcd 디렉토리명을 /home/vpopmail/domains/foobar.net/a로 변경하면 됩니다.
[root@localhost ~]# mv /home/vpopmail/domains/foobar.net/abcd  /home/vpopmail/domains/foobar.net/a
Creative Commons License