PDF de programación - Guía para montar un servidor FTP multiusuario con VSFTPD + PAM + MySQL

Imágen de pdf Guía para montar un servidor FTP multiusuario con VSFTPD + PAM + MySQL

Guía para montar un servidor FTP multiusuario con VSFTPD + PAM + MySQLgráfica de visualizaciones

Actualizado el 11 de Julio del 2021 (Publicado el 18 de Julio del 2017)
1.468 visualizaciones desde el 18 de Julio del 2017
203,5 KB
8 paginas
Creado hace 16a (20/02/2008)
Servidor FTP multiusuario
con VSFTPD + PAM + MySQL

Hoy instalaremos un servidor FTP convencional pero bastante rápido y seguro en un sistema
operativo Ubuntu, basado en Debian GNU/Linux. El servidor requerirá nombre y contraseña para
cada usuario que quiera acceder, y cada usuario podrá ir dirigido a un directorio distinto y
modificarle el contenido (muy conveniente para un servidor-web compartido). Esta guía evita la
creación de múltiples usuarios reales en el sistema operativo, y todos los usuarios virtuales actúan
con una misma cuenta del sistema.
El servicio FTP tradicional consiste en que los usuarios del sistema operativo tienen acceso al
sistema de ficheros con sus mismas credenciales y atribuciones, y adicionalmente hay una cuenta
de usuario anónimo para que públicamente se puedan descargar determinados contenidos. La
característica especial, entonces, de esta instalación es que el censo de usuarios FTP se
almacena en una base de datos, y pasan a ser "usuarios virtuales" en lugar de "usuarios reales"
del sistema operativo; adicionalmente se inhabilita el acceso anónimo.
Esta guía se basa en el software servidor de FTP vsftpd (vsftpd.beasts.org), pero existen
alternativas tan competentes como ProFTPD (www.proftpd.org).
Empezamos;
Con el sistema operativo ya instalado, actualizado y en funcionamiento, nos tenemos que
asegurar de que tenemos el servidor FTP (vsftpd), los módulos de autenticación (pam) y el
sistema de base de datos (MySQL). Si no es así, lo podemos hacer con las instrucciones de
terminal/consola:

sudo apt-get install mysql-server
sudo apt-get install libpam-runtime libpam-modules
sudo apt-get install libpam-mysql
sudo apt-get install vsftpd

El MySQL Server al instalarse pedirá que le establezcamos una contraseña para el usuario
administrador (root), que necesitamos cuando queremos hacer determinadas operaciones.
También podemos usar las instrucciones de instalación para saber que los paquetes están
instalados. Ahora se tratará de configurarlo todo para que los distintos programas trabajen juntos.
Si tu distribución de GNU/Linux no tiene el paquete "libpam-mysql" al alcance, lo puedes
descargar de la página del proyecto pam-mysql.sourceforge.net ("Released Files") e instalarlo
manualmente con la instrucción:

sudo dpkg --install nombredelfichero.deb

 Para poder restablecer la configuración de los ficheros de texto que se modifican (en caso
de que alguna cosa falle y queramos volver atrás), es recomendable hacer una copia de
cada original: antes de editar "vsftpd.conf" copiarlo a "vsftpd.conf.original".

 Si no sabes como editar los ficheros de texto desde una consola o terminal, te propongo el

programa "nano", que para utilizarlo como superusuario iría así (ejemplo):
sudo nano /etc/vsftpd.conf
(Si el fichero no existe, lo crea. Para salir pulsar [Control] + [x] )

Guía para montar un servidor FTP multiusuario

(castellano)

Página 1 de 8

Configuración de la base de datos

1. Nos conectamos a la consola del servidor MySQL (nos pedirá la contraseña del propio usuario
"root" de MySQL):

mysql -u root -p

2. Creamos una base de datos para las cuentas de usuarios virtuales:

CREATE DATABASE vsftpd;

3. Creamos una tabla para registrar las cuentas de acceso (fijaros en los nombres de los campos):

CREATE TABLE vsftpd.usuarios (
nrregistro int AUTO_INCREMENT NOT NULL,
nombre varchar(30) binary NOT NULL,
contrasena varchar(50) binary NOT NULL,
estado varchar(30) binary NOT NULL,
primary key(nrregistro)
);

4. Creamos una tabla para registrar los intentos de acceso (fijaros en los nombres de los campos):

CREATE TABLE vsftpd.bitacora (mensaje varchar(255),
usuario varchar(20),
proceso int,
servidor char(32),
cliente char(32),
momento timestamp
);

5. Damos permisos a un nuevo usuario de MySQL para que el servidor FTP acceda a través de
PAM sólo a lo imprescindible:

GRANT SELECT ON vsftpd.usuarios TO vsftpd@localhost IDENTIFIED BY
'contraseña1';
GRANT INSERT ON vsftpd.bitacora TO vsftpd@localhost IDENTIFIED BY
'contraseña1';
FLUSH PRIVILEGES;
(personalizad la contraseña1)
6. Damos permisos a un nuevo usuario de MySQL distinto para la administración de usuarios:

GRANT INSERT,SELECT,DELETE ON vsftpd.usuarios TO ftpadmin@localhost
IDENTIFIED BY 'contraseña2';
GRANT SELECT,DELETE ON vsftpd.bitacora TO ftpadmin@localhost IDENTIFIED BY
'contraseña2';
FLUSH PRIVILEGES;

(personalizad la contraseña2, que sea distinta)

7. Nos desconectamos de la consola del servidor MySQL:

quit

Guía para montar un servidor FTP multiusuario

(castellano)

Página 2 de 8

Configuración del sistema operativo

1. Debemos asegurarnos de que en el registro de programas de consola/terminal (fichero
/etc/shells) hay una línea como esta:

/bin/false

Si no está, la añadimos al final. Esto permite crear las cuentas de usuario de los programas
impidiendo que sean usadas para acceder a la computadora vía terminal.

2. Creamos un directorio para los perfiles de usuario FTP:

sudo mkdir /etc/vsftpd

3. Creamos dentro otro directorio para los usuarios FTP sin perfil todavía hecho:

sudo mkdir /etc/vsftpd/vacio

4. Fijamos el directorio vacío sin permisos de escritura:

sudo chmod 555 /etc/vsftpd/vacio

5. Creamos un grupo y cuenta de usuario para el servidor FTP:

sudo groupadd vsftpd
sudo useradd -d /etc/vsftpd -s /bin/false -g nogroup vsftpd

6. Creamos un grupo y cuenta de usuario para los clientes FTP:

sudo groupadd ftp
sudo useradd -d /etc/vsftpd/vacio -s /bin/false -g ftp ftp
Si ya existía (user ftp exists) conviene que lo modifiquemos:
sudo usermod -d /etc/vsftpd/vacio -s /bin/false -g ftp ftp

Guía para montar un servidor FTP multiusuario

(castellano)

Página 3 de 8

Configuración del autenticador

Pluggable Authentication Modules (PAM) es un sistema múltiple para que los programas puedan
autenticar la identidad de usuarios y otros agentes del entorno informático. Lo utilizamos aquí para
que el servidor VSFTPD no tenga que hacer esta tarea, y simplemente consulte a PAM si el
usuario que llama se corresponde en el censo de la base de datos.
Revisamos los parámetros del perfil de VSFTPD para PAM, con tal que se hagan las consultas a
MySQL. Abrimos el fichero /etc/pam.d/vsftpd con un editor de texto y:

1. Para que no se exija la existencia de los usuarios en el sistema operativo, desactivamos
"pam_ftp.so", "common-account", "common-auth" y "pam_shells.so" añadiendo el símbolo "#" al
inicio de cada línea donde aparezcan:

# pam_ftp.so.
#@include common-account
#@include common-auth
#auth required pam_shells.so

2. Para especificar las credenciales de acceso, tablas y campos a consultar en la base de datos
MySQL, añadimos estas dos laargas líneas al final del fichero:
user=vsftpd
verbose=0
auth required
passwd=contraseña1
table=usuarios
usercolumn=nombre passwdcolumn=contrasena
statcolumn=estado crypt=2
sqllog=true logtable=bitacora logmsgcolumn=mensaje logusercolumn=usuario
logpidcolumn=proceso loghostcolumn=cliente logtimecolumn=momento


db=vsftpd

host=localhost

pam_mysql.so



account
user=vsftpd
required
passwd=contraseña1
table=usuarios
usercolumn=nombre passwdcolumn=contrasena statcolumn=estado crypt=2
sqllog=true logtable=bitacora logmsgcolumn=mensaje logusercolumn=usuario
logpidcolumn=proceso loghostcolumn=cliente logtimecolumn=momento

pam_mysql.so
host=localhost

verbose=0


db=vsftpd



(La contraseña1 de las líneas debe ser la misma que hemos fijado para el usuario "vsftpd" de
MySQL)

Guía para montar un servidor FTP multiusuario

(castellano)

Página 4 de 8

Configuración del servicio FTP

Revisamos los parámetros de la configuración básica de VSFTPD, editando el fichero
/etc/vsftpd.conf y fijando los que especificamos de la siguiente manera (hay que buscarlos en el
fichero, y si no están añadirlos al final):

anonymous_enable=NO
local_enable=YES
write_enable=YES
xferlog_enable=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/etc/vsftpd/vacio
pam_service_name=vsftpd
# En octal: 0022 xor 0777 = permisos 755
local_umask=0022
file_open_mode=0777
dirmessage_enable=NO
# Número máximo de sesiones de usuarix conectadxs simultáneamente
max_clients=50
# Nr. máximo de ss. de usuarix para un mismo origen (IP).
max_per_ip=5
# Unificación de los clientes como únicx usuarix del sistema
guest_enable=YES
# Usuarix del sistema con que actuaran lxs usuarixs FTP
guest_username=ftp
# Dónde encontrar las configuraciones específicas de cada usuarix
user_config_dir=/etc/vsftpd
# Directorio FTP predeterminado. Si no creamos un perfil, no toquen nada.
local_root=/etc/vsftpd/vacio
# Privilegios locales para escribir, para lxs usuarixs FTP remotxs.
virtual_use_local_privs=YES
# Enmascarar la información de usuarix/grupo en directorios como "ftp"
hide_ids=YES

Algunos de los parámetros no son imprescindibles así, pero de esta manera también funciona. El
parámetro "local_umask" es para los permisos que se fijaran a los ficheros que suban los usuarios
vía FTP; por defecto serían 077, pero con 755 permite que el usuario propietario de los ficheros y
carpetas pueda manipular plenamente y en cambio el público de una web sólo pueda leer.

Guía para montar un servidor FTP multiusuario

(castellano)

Página 5 de 8

Puesta en marcha

Con esta instrucción reiniciamos el servicio de VSFTPD para que aplique la nueva configuración,
o también lo iniciamos si estaba parado:

sudo /etc/init.d/vsftpd restart

Cómo crear un usuario FTP

1. El directorio en donde tenga que acceder el usuario debe estar creado, con propietario "ftp" y
con permisos para operar:

sudo mkdir /ruta/a/su/directorio
sudo chown -R ftp:ftp /ruta/a/su/directorio
sudo chmod -R 755 /ruta/a/su/directorio

2. Con esta instrucción te
  • Links de descarga
http://lwp-l.com/pdf5539

Comentarios de: Guía para montar un servidor FTP multiusuario con VSFTPD + PAM + MySQL (1)

rodrigohernantoledo
13 de Mayo del 2023
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad