GNU/Linux >> Tutoriales Linux >  >> Debian

Alojamiento virtual con vsftpd y MySQL en Debian Squeeze

Vsftpd es uno de los servidores FTP más seguros y rápidos para Linux. Por lo general, vsftpd está configurado para funcionar con los usuarios del sistema. Este documento describe cómo instalar un servidor vsftpd 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.

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 Debian Squeeze (Debian 6.0). Ya debería haber configurado un sistema Debian Squeeze 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 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.

2 Instalar vsftpd, MySQL y phpMyAdmin

Vsftpd no tiene soporte incorporado para MySQL, por lo tanto, debemos usar PAM para autenticarnos en la base de datos MySQL. Así que instalamos libpam-mysql además de vsftpd, MySQL y phpMyAdmin:

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

Se le harán las siguientes 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 Crea la base de datos MySQL para vsftpd

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

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

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

USE vsftpd;
CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) 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 vsftpd. A continuación, puede echar un vistazo a la base de datos. Más tarde puede usar phpMyAdmin para administrar su servidor vsftpd.

4 Configurar vsftpd

Primero creamos un usuario sin privilegios llamado vsftpd (con el homedir /home/vsftpd) perteneciente al grupo nogroup. Ejecutaremos vsftpd con este usuario y los directorios FTP de nuestros usuarios virtuales estarán en el directorio /home/vsftpd (por ejemplo, /home/vsftpd/user1, /home/vsftpd/user2, etc.).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Luego hacemos una copia de seguridad del archivo /etc/vsftpd.conf original y creamos el nuestro propio:

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
vi /etc/vsftpd.conf

El archivo debe tener el siguiente contenido:

Las opciones de configuración se explican en http://vsftpd.beasts.org/vsftpd_conf.html. Las opciones importantes para nuestra configuración virtual son chroot_local_user, guest_enable, guest_username, user_sub_token, local_root y virtual_use_local_privs.

Con la opción user_config_dir puede especificar un directorio para los archivos de configuración por usuario que anulan partes de la configuración global. Esto es totalmente opcional y depende de usted si desea utilizar esta función. Sin embargo, debemos crear ese directorio ahora:

mkdir /etc/vsftpd_user_conf

Ahora debemos configurar PAM para que use la base de datos MySQL para autenticar a nuestros usuarios de FTP virtual en lugar de /etc/passwd y /etc/shadow. La configuración de PAM para vsftpd está en /etc/pam.d/vsftpd. Hacemos una copia de seguridad del archivo original y creamos uno nuevo como este:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig
cat /dev/null > /etc/pam.d/vsftpd
vi /etc/pam.d/vsftpd
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

¡Asegúrese de reemplazar la contraseña de MySQL por la suya propia!

Posteriormente, reiniciamos vsftpd:

/etc/init.d/vsftpd restart

5 Crear el primer usuario virtual

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

mysql -u root -p
USE vsftpd;

Ahora creamos el usuario virtual testuser con la contraseña secret (que se almacenará encriptada usando la función PASSWORD de MySQL):

INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;

el directorio de inicio de testuser es /home/vsftpd/testuser; desafortunadamente, vsftpd no crea ese directorio automáticamente si no existe. Por lo tanto, lo creamos manualmente ahora y lo hacemos propiedad del usuario vsftpd y el grupo nogroup:

mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuser

Ahora abra su programa de cliente FTP en su estación de trabajo (algo como FileZilla o FireFTP) e intente conectarse. Como nombre de host, utiliza server1.example.com (o la dirección IP del sistema), el nombre de usuario es testuser y la contraseña es secreta.

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

6 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 vsftpd.

Siempre que cree o modifique un usuario, asegúrese de utilizar la función CONTRASEÑA de MySQL para cifrar la contraseña de ese usuario. Además, cuando cree un nuevo usuario virtual, no olvide crear el directorio de inicio de ese usuario en el shell, como se muestra al final del capítulo anterior.

7 Enlaces

  • vsftpd:http://vsftpd.beasts.org/
  • Debian:http://www.debian.org/

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

  2. Cómo configurar contenedores virtuales con LXC y soporte de cuotas en Debian 8

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

  4. Creación de hosts virtuales simples con mod_mysql_vhost en Lighttpd (Debian Squeeze)

  5. Easy vsFTPD:servidor FTP con usuarios virtuales en Debian 8 Jessie

Instalación de Lighttpd con compatibilidad con PHP5 y MySQL en Debian Lenny

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

Instalación de Apache2 con compatibilidad con PHP5 y MySQL en Debian Squeeze (LAMP)

Usuarios virtuales y dominios con Postfix, Courier, MySQL y SquirrelMail (Debian Wheezy)

Instalación de Lighttpd con PHP5 (PHP-FPM) y MySQL en Debian 8 (Jessie)

Cómo instalar y configurar vsftpd con TLS en Debian 8 (Jessie)

    auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2
    account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2