GNU/Linux >> Tutoriales Linux >  >> Cent OS

Alojamiento virtual con PureFTPd y MySQL (incluida la gestión de cuotas y ancho de banda) en CentOS 7.0

Este tutorial existe para estas versiones de SO

  • Cent OS 7.2
  • CentOS 7
  • Cent OS 6.5
  • Cent OS 6.4
  • CentOS 6.2
  • CentOS 5.3

En esta página

  1. 1 nota preliminar
  2. 2 Instalar MySQL y phpMyAdmin
  3. 3 Instale PureFTPd con compatibilidad con MySQL
  4. 4 Crear la base de datos MySQL para PureFTPd
  5. 5 Configurar PureFTPd
  6. 6 Llenar la base de datos y probar
  7. 7 Administración de la base de datos
    1. Tabla ftpd:
  • 8 FTP anónimo
  • 9 enlaces
  • Este documento describe cómo instalar un servidor PureFTPd que utiliza usuarios virtuales de una base de datos MySQL en lugar de usuarios reales del sistema. Esto es mucho más eficaz y permite tener miles de usuarios de FTP en una sola máquina. Además de eso, mostraré el uso de la cuota y los límites de ancho de banda de carga/descarga con esta configuración. Las contraseñas se almacenarán cifradas como cadenas MD5 en la base de datos.

    Para la administración de la base de datos MySQL, puede usar herramientas basadas en web como phpMyAdmin, que también se instalará en este instructivo. phpMyAdmin es una interfaz gráfica cómoda, lo que significa que no tiene que perder el tiempo con la línea de comandos.

    Este tutorial está basado en CentOS 7.0. Ya debería haber configurado un sistema CentOS 7 mínimo básico.

    Este howto pretende ser una guía práctica; no cubre los antecedentes teóricos. Se tratan en muchos otros documentos en la web.

    ¡Este documento viene sin garantía de ningún tipo! Quiero decir que esta no es la única forma de establecer un sistema de este tipo. Hay muchas formas de lograr este objetivo, pero esta es la que yo tomo.

    1 nota preliminar

    En este tutorial, utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.

    2 Instalar MySQL y phpMyAdmin

    Primero, habilitamos el repositorio EPEL en nuestro sistema CentOS ya que algunos paquetes que vamos a instalar en el transcurso de este tutorial no están disponibles en los repositorios oficiales de CentOS 7.0:

    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

    Luego habilitamos el repositorio EPEL en nuestro sistema CentOS ya que muchos de los paquetes que vamos a instalar en el transcurso de este tutorial no están disponibles en el repositorio oficial de CentOS 7:

    yum -y install epel-release
    yum -y install yum-priorities

    Edite /etc/yum.repos.d/epel.repo...

    nano /etc/yum.repos.d/epel.repo

    ... y agregue la línea prioridad=10 a la sección [epel]:

    [epel]
    name=Extra Packages for Enterprise Linux 7 - $basearch
    #baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
    mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
    failovermethod=priority
    enabled=1
    priority=10
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
    [...]

    Luego actualizamos nuestros paquetes existentes en el sistema:

    yum update

    Ahora podemos instalar MySQL y phpMyAdmin de la siguiente manera:

    yum install mariadb mariadb-server phpmyadmin httpd php

    Ahora configuramos phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no solo desde localhost (comentando todo en la stanza y agregando la línea Requerir todo otorgado):

    vi /etc/httpd/conf.d/phpMyAdmin.conf

    para que el archivo se vea así:

    # phpMyAdmin - Web based MySQL browser written in php
    #
    # Allows only localhost by default
    #
    # But allowing phpMyAdmin to anyone other than localhost should be considered
    # dangerous unless properly secured by SSL
    
    Alias /phpMyAdmin /usr/share/phpMyAdmin
    Alias /phpmyadmin /usr/share/phpMyAdmin
    
    <Directory /usr/share/phpMyAdmin/>
    #  <IfModule mod_authz_core.c>
    #     # Apache 2.4
    #     <RequireAny>
    #       Require ip 127.0.0.1
    #       Require ip ::1
    #     </RequireAny>
    #   </IfModule>
    #   <IfModule !mod_authz_core.c>
    #     # Apache 2.2
    #     Order Deny,Allow
    #    # Deny from All
    #     Allow from 127.0.0.1
         Options Indexes
         AllowOverride None
         Require all granted
    #     Allow from ::1
    #   </IfModule>
    </Directory>
    
    
    
    <Directory /usr/share/phpMyAdmin/setup/>
       <IfModule mod_authz_core.c>
         # Apache 2.4
         <RequireAny>
           Require ip 127.0.0.1
           Require ip ::1
         </RequireAny>
       </IfModule>
       <IfModule !mod_authz_core.c>
         # Apache 2.2
         Order Deny,Allow
         Deny from All
         Allow from 127.0.0.1
         Allow from ::1
       </IfModule>
    </Directory>
    
    # These directories do not require access over HTTP - taken from the original
    # phpMyAdmin upstream tarball
    #
    <Directory /usr/share/phpMyAdmin/libraries/>
        Order Deny,Allow
        Deny from All
        Allow from None
    </Directory>
    
    <Directory /usr/share/phpMyAdmin/setup/lib/>
        Order Deny,Allow
        Deny from All
        Allow from None
    </Directory>
    
    <Directory /usr/share/phpMyAdmin/setup/frames/>
        Order Deny,Allow
        Deny from All
        Allow from None
    </Directory>
    
    # This configuration prevents mod_security at phpMyAdmin directories from
    # filtering SQL etc.  This may break your mod_security implementation.
    #
    #<IfModule mod_security.c>
    #    <Directory /usr/share/phpMyAdmin/>
    #        SecRuleInheritance Off
    #    </Directory>
    #</IfModule>
    

    Luego creamos los enlaces de inicio del sistema para MySQL y Apache (para que ambos se inicien automáticamente cada vez que se inicia el sistema) e iniciamos ambos servicios. Además, ambos servicios deben estar permitidos por el cortafuegos:

    firewall-cmd --permanent --zone=public --add-service=http
    firewall-cmd --permanent --zone=public --add-service=https
    firewall-cmd --reload
    systemctl enable mariadb.service
    systemctl start mariadb.service
    systemctl enable httpd.service
    systemctl start httpd.service

    Cree una contraseña para el usuario root de MySQL (reemplace su contraseña mariadb con la contraseña que desea usar):

    mysql_secure_installation

    [[email protected] ~]# mysql_secure_installation
    /usr/bin/mysql_secure_installation:línea 379:find_mysql_client:command not found

    NOTA:SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODO MariaDB
          ¡SERVIDORES EN USO DE PRODUCCIÓN! ¡POR FAVOR LEA CADA PASO CUIDADOSAMENTE!

    Para iniciar sesión en MariaDB para asegurarlo, necesitaremos la contraseña actual
    del usuario root. Si acaba de instalar MariaDB y
    aún no ha configurado la contraseña raíz, la contraseña estará en blanco,
    de modo que debe presionar Intro aquí.<--ENTRAR
    Ingrese la contraseña actual para root (ingrese para ninguno):<--ENTER
    OK, usé la contraseña con éxito, continuando...

    La configuración de la contraseña raíz garantiza que nadie pueda iniciar sesión en MariaDB
    usuario raíz sin la autorización adecuada.

    ¿Establecer contraseña de root? [Y/n]<--ENTRAR
    Nueva contraseña:<--yourmariadbpassword
    Vuelva a ingresar la nueva contraseña:<--yourmariadbpassword
    ¡Contraseña actualizada correctamente!
    Recargando tablas de privilegios..
     ... ¡Éxito!


    De forma predeterminada, una instalación de MariaDB tiene un usuario anónimo, lo que permite cualquier persona
    para iniciar sesión en MariaDB sin tener que tener una cuenta de usuario creada para
    ellos. Esto está diseñado solo para realizar pruebas y para que la instalación
    sea un poco más fluida. Debe eliminarlos antes de pasar a un
    entorno de producción.

    ¿Eliminar usuarios anónimos? [Y/n]<--ENTRAR
     ... ¡Éxito!

    Normalmente, solo se debe permitir que la raíz se conecte desde 'localhost'. Esto
    garantiza que nadie pueda adivinar la contraseña raíz desde la red.

    ¿Deshabilitar el inicio de sesión raíz de forma remota? [Y/n]<--ENTRAR
     ... ¡Éxito!

    De manera predeterminada, MariaDB viene con una base de datos llamada 'prueba' a la que cualquiera puede
    acceder. Esto también está diseñado solo para pruebas y debe eliminarse
    antes de pasar a un entorno de producción.

    ¿Eliminar la base de datos de prueba y acceder a ella? [Y/n]<--ENTRAR
     - Eliminando la base de datos de prueba...
     ... ¡Con éxito!
     - Eliminando privilegios en la base de datos de prueba...
     ... ¡Con éxito!

    Volver a cargar las tablas de privilegios garantizará que todos los cambios realizados hasta el momento
    se aplicarán inmediatamente.

    ¿Recargar las tablas de privilegios ahora? [Y/n]<--ENTRAR
     ... ¡Éxito!

    Limpiando...

    ¡Todo listo! Si completó todos los pasos anteriores, su MariaDB
    instalación ahora debería ser segura.

    ¡Gracias por usar MariaDB!
    [[email protected] ~]#

    3 Instalar PureFTPd con compatibilidad con MySQL

    El paquete CentOS PureFTPd admite varios backends, como MySQL, PostgreSQL, LDAP, etc. Por lo tanto, todo lo que tenemos que hacer es instalar el paquete PureFTPd normal:

    yum install pure-ftpd

    Luego creamos un grupo ftp (ftpgroup) y un usuario (ftpuser) al que se asignarán todos nuestros usuarios virtuales. Reemplace el grupo y el ID de usuario 2001 con un número que esté libre en su sistema:

    groupadd -g 2001 ftpgroup
    useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

    El firewall-cmd debe permitir el servicio ftp de la siguiente manera:

    firewall-cmd --permanent --zone=public --add-service=ftp
    firewall-cmd --reload

    4 Crea la base de datos MySQL para PureFTPd

    Ahora creamos una base de datos llamada pureftpd y un usuario de MySQL llamado pureftpd que el demonio PureFTPd usará más adelante para conectarse a la base de datos pureftpd:

    mysql -u root -p
    CREATE DATABASE pureftpd;
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
    FLUSH PRIVILEGES;

    Reemplace la cadena ftpdpass con la contraseña que desee usar para el usuario de MySQL pureftpd. Todavía en el shell de MySQL, creamos la tabla de base de datos que necesitamos (sí, ¡solo hay una tabla!):

    USE pureftpd;
    CREATE TABLE ftpd (
    User varchar(16) NOT NULL default '',
    status enum('0','1') NOT NULL default '0',
    Password varchar(64) NOT NULL default '',
    Uid varchar(11) NOT NULL default '-1',
    Gid varchar(11) NOT NULL default '-1',
    Dir varchar(128) NOT NULL default '',
    ULBandwidth smallint(5) NOT NULL default '0',
    DLBandwidth smallint(5) NOT NULL default '0',
    comment tinytext NOT NULL,
    ipaccess varchar(15) NOT NULL default '*',
    QuotaSize smallint(5) NOT NULL default '0',
    QuotaFiles int(11) NOT NULL default 0,
    PRIMARY KEY (User),
    UNIQUE KEY User (User)
    ) ENGINE=MyISAM;
    quit;

    Como habrás notado, con la renuncia; hemos dejado el shell de MySQL y estamos de vuelta en el shell de Linux.

    Por cierto, (supongo que el nombre de host de su sistema de servidor ftp es server1.example.com) puede acceder a phpMyAdmin en http://server1.example.com/phpMyAdmin/ (también puede usar la dirección IP en lugar de server1 .example.com) en un navegador e inicie sesión como usuario pureftpd. A continuación, puede echar un vistazo a la base de datos. Más tarde puede usar phpMyAdmin para administrar su servidor PureFTPd.

    5 Configurar PureFTPd

    Edite /etc/pure-ftpd/pure-ftpd.conf y asegúrese de que las líneas ChrootEveryone, MySQLConfigFile y CreateHomeDir estén habilitadas y se vean así:

    vi /etc/pure-ftpd/pure-ftpd.conf
    [...]
    ChrootEveryone              yes
    [...]
    MySQLConfigFile               /etc/pure-ftpd/pureftpd-mysql.conf
    [...]
    CreateHomeDir               yes
    [...]

    La configuración de ChrootEveryone hará que PureFTPd haga chroot a cada usuario virtual en su directorio de inicio para que no pueda explorar directorios y archivos fuera de su directorio de inicio. La línea CreateHomeDir hará que PureFTPd cree el directorio de inicio de un usuario cuando el usuario inicie sesión y el directorio de inicio aún no exista.

    Luego editamos /etc/pure-ftpd/pureftpd-mysql.conf. Debería verse así:

    cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig
    cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf
    vi /etc/pure-ftpd/pureftpd-mysql.conf
    MYSQLSocket      /var/lib/mysql/mysql.sock
    #MYSQLServer     localhost
    #MYSQLPort       3306
    MYSQLUser       pureftpd
    MYSQLPassword   ftpdpass
    MYSQLDatabase   pureftpd
    #MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
    MYSQLCrypt      md5
    MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
    MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")

    ¡Asegúrese de reemplazar la cadena ftpdpass con la contraseña real para el usuario de MySQL pureftpd en la línea MYSQLPassword! Tenga en cuenta que usamos md5 como método MYSQLCrypt, lo que significa que almacenaremos las contraseñas de los usuarios como una cadena MD5 en la base de datos, lo que es mucho más seguro que usar contraseñas de texto sin formato.

    Ahora creamos los enlaces de inicio del sistema para PureFTPd y lo iniciamos:

    systemctl enable pure-ftpd.service
    systemctl enable pure-ftpd.service

    6 Completar la base de datos y probar

    Para llenar la base de datos, puede usar el shell de MySQL:

    mysql -u root -p
    USE pureftpd;

    Ahora creamos el usuario ejemplousuario con el estado 1 (lo que significa que su cuenta ftp está activa), la contraseña secreta (que se almacenará encriptada usando la función MD5 de MySQL), el UID y GID 2001 (usar el ID de usuario y el ID de grupo del usuario/ grupo que creó al final del paso dos), el directorio de inicio /home/www.example.com, un ancho de banda de carga y descarga de 100 KB/seg. (kilobytes por segundo), y una cuota de 50 MB:

    INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');
    quit;

    Ahora abra su programa de cliente FTP en su estación de trabajo (algo así como WS_FTP o SmartFTP si está en un sistema Windows o gFTP en un escritorio Linux) e intente conectarse. Como nombre de host, utiliza server1.example.com (o la dirección IP del sistema), el nombre de usuario es exampleuser y la contraseña es secreta.

    Si puede conectarse, ¡felicidades! Si no, algo salió mal.

    Ahora, si corres

    ls -l /home

    Debería ver que el directorio /home/www.example.com (directorio de inicio del usuario de ejemplo) se ha creado automáticamente y es propiedad de ftpuser y ftpgroup (el usuario/grupo que creamos al final del paso dos):

    [[email protected] ~]# ls -l /home/
    total 0
    drwx------. 2 administrator administrator 59 Sep 26 10:35 administrator
    drwxr-xr-x. 2 ftpuser       ftpgroup      22 Sep 26 12:07 www.example.com
    [[email protected] ~]#

    7 Administración de la base de datos

    Para la mayoría de las personas es más fácil si tienen una interfaz gráfica para MySQL; por lo tanto, también puede usar phpMyAdmin (en este ejemplo en http://server1.example.com/phpMyAdmin/) para administrar la base de datos pureftpd.

    Siempre que desee crear un nuevo usuario, debe crear una entrada en la tabla ftpd, por lo que explicaré las columnas de esta tabla aquí:

    Tabla ftpd:

    • Usuario:el nombre del usuario virtual de PureFTPd (por ejemplo, usuarioejemplo).
    • estado:0 o 1. 0 significa que la cuenta está deshabilitada, el usuario no puede iniciar sesión.
    • Contraseña:la contraseña del usuario virtual. Asegúrese de utilizar la función MD5 de MySQL para guardar la contraseña cifrada como una cadena MD5:
    • UID:el ID de usuario del usuario ftp que creó al final del paso dos (por ejemplo, 2001).
    • GID:el groupid del grupo ftp que creó al final del paso dos (por ejemplo, 2001).
    • Dir:el directorio de inicio del usuario virtual de PureFTPd (por ejemplo, /home/www.example.com). Si no existe, se creará cuando el nuevo usuario inicie sesión por primera vez a través de FTP. El usuario virtual será encarcelado en este directorio de inicio, es decir, no puede acceder a otros directorios fuera de su directorio de inicio.
    • ULBandwidth:carga el ancho de banda del usuario virtual en KB/seg. (kilobytes por segundo). 0 significa ilimitado.
    • DLBandwidth:ancho de banda de descarga del usuario virtual en KB/seg. (kilobytes por segundo). 0 significa ilimitado.
    • comentario:puede ingresar cualquier comentario aquí (por ejemplo, para su administración interna) aquí. Normalmente deja este campo vacío.
    • ipaccess:Introduzca aquí las direcciones IP que pueden conectarse a esta cuenta FTP. * significa que cualquier dirección IP puede conectarse.
    • QuotaSize:espacio de almacenamiento en MB (¡no KB, como en ULBandwidth y DLBandwidth!) que el usuario virtual puede usar en el servidor FTP. 0 significa ilimitado.
    • QuotaFiles:cantidad de archivos que el usuario virtual puede guardar en el servidor FTP. 0 significa ilimitado.

    8 FTP anónimo

    Si desea crear una cuenta ftp anónima (una cuenta ftp en la que todos pueden iniciar sesión sin contraseña), necesita un usuario y un grupo llamado ftp. Ambos se crearon automáticamente cuando instaló el paquete pure-ftpd, por lo que no necesita crearlos manualmente. Sin embargo, el directorio de inicio de ftp es /var/ftp de forma predeterminada, pero me gustaría crear el directorio de ftp anónimo en /home/ftp (los directorios de ftp de los usuarios normales también están en /home, por ejemplo, /home/www.example. com). Pero, por supuesto, puede usar el directorio /var/ftp para ftp anónimo, si lo prefiere.

    Si quiere usar /home/ftp, abra /etc/passwd y cambie el homedir del usuario de ftp de /var/ftp a /home/ftp (no haga esto si quiere usar /var/ftp):

    vi /etc/passwd
    [...]
    #ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    ftp:x:14:50:FTP User:/home/ftp:/sbin/nologin
    [...]

    Luego mueva /var/ftp a /home (no haga esto si quiere usar /var/ftp):

    mv /var/ftp /home

    Luego creamos el directorio /home/ftp/incoming que permitirá a los usuarios anónimos cargar archivos. Daremos permisos 311 al directorio /home/ftp/incoming para que los usuarios puedan cargar, pero no ver ni descargar ningún archivo en ese directorio. El directorio /home/ftp tendrá permisos de 555 que permite ver y descargar archivos:

    chown ftp:nobody /home/ftp
    cd /home/ftp
    mkdir incoming
    chown ftp:nobody incoming/
    chmod 311 incoming/
    cd ../
    chmod 555 ftp/

    (Si desea usar /var/ftp en su lugar, reemplace /home/ftp con /var/ftp en los comandos anteriores).

    Los usuarios anónimos podrán iniciar sesión y podrán descargar archivos desde /home/ftp, pero las cargas se limitarán a /home/ftp/incoming (y una vez que se cargue un archivo en /home/ftp/incoming, no se puede leer ni descargar desde allí; el administrador del servidor tiene que moverlo a /home/ftp primero para que esté disponible para otros).

    Ahora tenemos que configurar PureFTPd para ftp anónimo. Abra /etc/pure-ftpd/pure-ftpd.conf y asegúrese de tener las siguientes configuraciones:

    vi /etc/pure-ftpd/pure-ftpd.conf
    [...]
    NoAnonymous                 no
    [...]
    AntiWarez                   no
    [...]
    AnonymousBandwidth            8
    [...]
    AnonymousCantUpload         no
    [...]

    (La configuración AnonymousBandwidth es opcional:le permite limitar los anchos de banda de carga y descarga para usuarios anónimos. 8 significa 8 KB/seg. Use cualquier valor que desee o comente la línea si no desea limitar los anchos de banda). /P>

    Finalmente, reiniciamos PureFTPd:

    systemctl restart pure-ftpd.service

    9 Enlaces

    • FTP puro:http://www.pureftpd.org/
    • MySQL:http://www.mysql.com/
    • phpMyAdmin:http://www.phpmyadmin.net/
    • CentOS:http://centos.org/

    Cent OS
    1. Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Ubuntu 14.04LTS

    2. Servidor FTP con PureFTPd, MariaDB y usuarios virtuales (incluida la gestión de cuotas y ancho de banda) en CentOS 7.2

    3. Alojamiento virtual con PureFTPd y MySQL (incluida la gestión de cuotas y ancho de banda) en Ubuntu 7.10 (Gutsy Gibbon)

    4. Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Ubuntu 8.04 LTS

    5. Alojamiento virtual con PureFTPd y MySQL (incluida la gestión de cuotas y ancho de banda) en Ubuntu 8.10 (Intrepid Ibex)

    Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Ubuntu 12.10

    Alojamiento virtual con PureFTPd y MySQL (incluida la gestión de cuotas y ancho de banda) en Ubuntu 14.04LTS

    Alojamiento virtual con Proftpd y MySQL (incluida la cuota) en Debian Lenny

    Alojamiento virtual con vsftpd y MySQL en Debian Squeeze

    Instalación de Apache2 con compatibilidad con PHP5 y MySQL en CentOS 6.2 (LAMP)

    Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (CentOS 6.3 x86_64)