| Hemos   visto como Postfix va a hacer uso de MySQL. Vamos pues a instalarlo y   configurarlo: # apt-get   install mysql-server No hay   que tocar nada reseñable en la configuración del MySQL. Únicamente, si el   servidor va a estar en otra máquina distinta a la máquina donde está postfix,   tendremos que abrir un puerto para que pueda "escuchar". Por   defecto, esto no es así debido a temas de seguridad. Para hacerlo, basta con   comentar la línea skip-networking del fichero /etc/mysql/my.cfg y rearrancar   el servidor. Bien,   una vez que lo tenemos instalado, vamos a crear la Base de Datos y la tabla   necesaria para guardar toda la información de. Voy a mostrar cómo hacerlo   paso por paso: #Nos conectamos como root en un principio(la   contraseña por defecto está en blanco, por lo que bastaria con dar "enter")   
 mysql -h localhost -u root -p 
 #Creamos la BAse de Datos llamada mail 
 mysql>create database mail; 
 #Vemos si está creada: 
 mysql>show databases; 
 #Seleccionamos con la que vamos a   trabajar: 
 mysql>use mail; 
 #Creamos la tabla en la que guardaremos   la información de los usuarios virtuales: 
 mysql>create table passwd( 
 id char(128)DEFAULT '' NOT NULL, 
 clear char(128)DEFAULT '' NOT NULL, 
 name char(128)DEFAULT '' NOT NULL, 
 uid int(10) unsigned NOT NULL, 
 gid int(10) unsigned NOT NULL, 
 home char(255)DEFAULT '' NOT NULL, 
 maildir char(255)DEFAULT '' NOT NULL, 
 KEY id (id(128)) 
 ); 
 #Vemos cómo ha quedado la tabla recién creada:mysql> describe passwd;
   +---------+------------------+------+-----+---------+-------+ | Field   | Type             | Null | Key | Default | Extra | +---------+------------------+------+-----+---------+-------+ | id      | char(128)        |      | MUL |         |       | | clear   | char(128)        |      |     |         |       | | name    | char(128)        |      |     |         |       | | uid     | int(10) unsigned |      |     |         |       | | gid     | int(10) unsigned |      |     |         |       | | home    | char(255)        |      |     |         |       | | maildir | char(255)        |      |     |         |       | +---------+------------------+------+-----+---------+-------+ #Creamos   un usuario postfix y le damos todos los permisos en esta tabla: 
 mysql>GRANT ALL ON mail.passwd TO   postfix@localhost IDENTIFIED BY "postfix"; 
 
 #Dependiendo de la configuración,   quizás haya que crear algún usuario del estilo postfix@HOSTNAME... para que   postfix pueda acceder desde otras máquinas por ejemplo.
 
 #Creamos tres entradas de ejemplo: 
 mysql>insert into passwd   (id,clear,name,uid,gid,home,maildir) values("user1@splitfoo.homeip.net","user1pass","usuario1","1003","8","/","/var/spool/mail/user1/Maildir/");   
 mysql>insert into passwd   (id,clear,name,uid,gid,home,maildir)   values("user2@splitfoo.homeip.net.net","user2pass","usuario2","1002","8","/","/var/spool/mail/user2/Maildir/");   
 mysql>insert into passwd   (id,clear,name,uid,gid,home,maildir)   values("user3@splitfoo.homeip.net","user3pass","usuario3","1004","8","/","/var/spool/mail/user3/Maildir/");   
 mysql>quit 
 ### NOTA:   para cambiar la password root, basta con hacer lo siguiente:mysql> SET PASSWORD FOR root@localhost=password('nuevapass');
 mysql> FLUSH PRIVILEGES;
 ###
 Bien,   vamos a explicar todo esto un poco más despacio. Vemos que en la tabla hemos   creado una serie de campos, entre ellos id que será el mail del usuario, clear   que es su contraseña para autentificarse (puede cifrarse añadiendola de la   forma password("contraseña")), uid que es el UserID y al que   podemos ir asignándole números secuencialmente (para ello mirar antes   /etc/passwd para ver a partir de cuál no está "ocupado"), el gid   que en mi caso lo he puesto a 8 y que corresponde con el grupo de   "mail" (lo he hecho así para que el usuario pueda escribir en el   directorio /var/spool/mail que tiene como grupo propietario a   "mail"), home que por ser usuarios "virtuales" lo dejamos   a "/" mismo y el maildir o lugar donde se guardará el Maildir del   usuario en cuestión. A esta ruta se le añade por delante el valor que   habíamos puesto en /etc/postfix/main.cf como virtual_mailbox_base y que era   "/". Se puede jugar combinando ambas, pero de esta forma aseguramos   la ruta. Vamos a   hacer una pequeña modificación al script de arranque de MySQL, que se situa   en /etc/init.d/mysql.Modificaremos el apartado de "start)" para que quede de la   siguiente forma:
 'start')
 # Start daemon
 echo -n "Starting MySQL database   server: mysqld"
 /usr/bin/safe_mysqld > /dev/null   2>&1 &
 for i in 1 2 3 4 5 6; do
 if is_mysqld_alive; then break; fi
 sleep 1
 done
 if is_mysqld_alive; then
 ln -f /var/run/mysqld/mysqld.sock   /var/spool/postfix/mysqld.sock
 echo "."
 else
 echo "...failed."
 fi
 ;;
 Esto es   debido a que el proceso smtpd de Postfix corre en una "jaula" o   chroot y no puede acceder al socket, por ellocreamos el enlace.Esta línea no haría falta en el caso de que accedamos a MySQL por red, pero   en el caso que nos ocupa, hemos dicho que teniamos ambos servicios corriendo   en la misma máquina.
 |