GNU/Linux >> Tutoriales Linux >  >> Ubuntu

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

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. Este tutorial está basado en Ubuntu 12.10.

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 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 maneras de lograr este objetivo, pero este es el camino que tomo. ¡No emito ninguna garantía de que esto funcione para usted!

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.

Asegúrese de haber iniciado sesión como raíz (escriba

sudo su

para convertirse en root), porque debemos ejecutar todos los pasos de este tutorial como usuario root.

2 Instalar MySQL y phpMyAdmin

Todo esto se puede instalar con un solo comando:

apt-get install mysql-server mysql-client phpmyadmin apache2

Se le harán estas preguntas:

Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repita la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Servidor web para reconfigurar automáticamente:<-- apache2
¿Configurar la base de datos para phpmyadmin con dbconfig-common? <-- No

3 Instalar PureFTPd con compatibilidad con MySQL

Para Ubuntu 12.10 hay disponible un paquete pure-ftpd-mysql preconfigurado. Instálalo así:

apt-get install pure-ftpd-mysql

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

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/db/mysql.conf. Debería verse así:

cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf

¡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.

Luego cree el archivo /etc/pure-ftpd/conf/ChrootEveryone que simplemente contiene la cadena yes:

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

Esto 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.

También cree el archivo /etc/pure-ftpd/conf/CreateHomeDir que de nuevo simplemente contiene la cadena yes:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir

Esto 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.

Finalmente, cree el archivo /etc/pure-ftpd/conf/DontResolve que de nuevo simplemente contiene la cadena yes:

echo "yes" > /etc/pure-ftpd/conf/DontResolve

Esto hará que PureFTPd no busque nombres de host que pueden acelerar significativamente las conexiones y reducir el uso de ancho de banda.

Posteriormente, reiniciamos PureFTPd:

/etc/init.d/pure-ftpd-mysql restart

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 como FileZilla, WS_FTP, SmartFTP o gFTP) 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 8
drwxr-xr-x 3 administrator administrator 4096 Apr 27 11:54 administrator
drwxr-xr-x 2 ftpuser       ftpgroup      4096 Jul  3 22:23 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), puede hacerlo así:

Primero cree un usuario ftp (con homedir /home/ftp) y un grupo ftp:

groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp

Luego cree el archivo /etc/pure-ftpd/conf/NoAnonymous que contiene la cadena no:

echo "no" > /etc/pure-ftpd/conf/NoAnonymous

Con esta configuración, PureFTPd permitirá inicios de sesión anónimos.

Reinicie PureFTPd:

/etc/init.d/pure-ftpd-mysql restart

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:

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

Ahora los usuarios anónimos pueden iniciar sesión y pueden descargar archivos desde /home/ftp, pero las cargas están limitadas a /home/ftp/incoming (y una vez que se carga 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).

9 Enlaces

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

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

  2. Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Ubuntu 13.10)

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

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

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

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Ubuntu 12.10)

Alojamiento virtual con vsftpd y MySQL en Ubuntu 12.10

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

    MYSQLSocket      /var/run/mysqld/mysqld.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")