You are on page 1of 8

Servidor FTP multiusuario

con VSFTPD + PAM + MySQL


Hoy instalaremos un servidor FTP convencional pero bastante rpido y seguro en un sistema
operativo Ubuntu, basado en Debian GNU/Linu! "l servidor re#uerir nombre y contrase$a para
cada usuario #ue #uiera acceder, y cada usuario podr ir dirigido a un directorio distinto y
modi%icarle el contenido &muy conveniente para un servidor'(eb compartido)! "sta 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!
"l servicio FTP tradicional consiste en #ue los usuarios del sistema operativo tienen acceso al
sistema de %ic-eros con sus mismas credenciales y atribuciones, y adicionalmente -ay una cuenta
de usuario an+nimo para #ue p,blicamente se puedan descargar determinados contenidos! La
caracter*stica especial, entonces, de esta instalaci+n es #ue 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 in-abilita el acceso an+nimo!
"sta gu*a se basa en el software servidor de FTP vsftpd &vs%tpd!beasts!org), pero eisten
alternativas tan competentes como ProFTPD &(((!pro%tpd!org)!
"mpe0amos/
1on el sistema operativo ya instalado, actuali0ado y en %uncionamiento, nos tenemos #ue
asegurar de #ue tenemos el servidor FTP &vs%tpd), los m+dulos de autenticaci+n &pam) y el
sistema de base de datos &2y34L)! 3i no es as*, lo podemos -acer con las instrucciones de
terminal/consola5
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
"l 2y34L 3erver al instalarse pedir #ue le estable0camos una contrase$a para el usuario
administrador &root), #ue necesitamos cuando #ueremos -acer determinadas operaciones!
Tambi6n podemos usar las instrucciones de instalaci+n para saber #ue los pa#uetes estn
instalados! 7-ora se tratar de con%igurarlo todo para #ue los distintos programas traba8en 8untos!
3i tu distribuci+n de GNU/Linu no tiene el pa#uete .libpam'mys#l. al alcance, lo puedes
descargar de la pgina del proyecto pam-mysql.sourceforge.net &.9eleased Files.) e instalarlo
manualmente con la instrucci+n5
sudo dpkg --install nombredelfichero.deb
Para poder restablecer la con%iguraci+n de los %ic-eros de teto #ue se modi%ican &en caso
de #ue alguna cosa %alle y #ueramos volver atrs), es recomendable -acer una copia de
cada original5 antes de editar .vs%tpd!con%. copiarlo a .vs%tpd!con%!original.!
3i no sabes como editar los %ic-eros de teto desde una consola o terminal, te propongo el
programa .nano., #ue para utili0arlo como superusuario ir*a as* &e8emplo)5
sudo nano /etc/vsftpd.conf
&3i el %ic-ero no eiste, lo crea! Para salir pulsar :1ontrol; < :; )
Gua para montar un servidor FTP multiusuario (castellano) Pgina 1 de 8
Configuracin de la base de datos
=! Nos conectamos a la consola del servidor 2y34L &nos pedir la contrase$a del propio usuario
.root. de 2y34L)5
mysql -u root -p
>! 1reamos una base de datos para las cuentas de usuarios virtuales5
CREATE DATAA!E vsftpd"
?! 1reamos una tabla para registrar las cuentas de acceso &%i8aros en los nombres de los campos)5
CREATE TA#E vsftpd.usuarios $
nrregistro int A%T&'()CRE*E)T )&T )%##+
nombre varc,ar$-./ binary )&T )%##+
contrasena varc,ar$0./ binary )&T )%##+
estado varc,ar$-./ binary )&T )%##+
primary key$nrregistro/
/"
@! 1reamos una tabla para registrar los intentos de acceso &%i8aros en los nombres de los campos)5
CREATE TA#E vsftpd.bitacora $mensa1e varc,ar$200/+
usuario varc,ar$2./+
proceso int+
servidor c,ar$-2/+
cliente c,ar$-2/+
momento timestamp
/"
A! Damos permisos a un nuevo usuario de 2y34L para #ue el servidor FTP acceda a trav6s de
P72 s+lo a lo imprescindible5
3RA)T !E#ECT &) vsftpd.usuarios T& vsftpd4local,ost (DE)T(5(ED 6
7contrasea17"
3RA)T ()!ERT &) vsftpd.bitacora T& vsftpd4local,ost (DE)T(5(ED 6
7contrasea17"
5#%!8 9R(:(#E3E!"
&personali0ad la contrase$a=)
B! Damos permisos a un nuevo usuario de 2y34L distinto para la administraci+n de usuarios5
3RA)T ()!ERT+!E#ECT+DE#ETE &) vsftpd.usuarios T& ftpadmin4local,ost
(DE)T(5(ED 6 7contrasea27"
3RA)T !E#ECT+DE#ETE &) vsftpd.bitacora T& ftpadmin4local,ost (DE)T(5(ED 6
7contrasea27"
5#%!8 9R(:(#E3E!"
&personali0ad la contrase$a>, #ue sea distinta)
C! Nos desconectamos de la consola del servidor 2y34L5
quit
Gua para montar un servidor FTP multiusuario (castellano) Pgina 2 de 8
Configuracin del sistema operativo
=! Debemos asegurarnos de #ue en el registro de programas de consola/terminal &%ic-ero
/etc/shells) -ay una l*nea como esta5
/bin/false
3i no est, la a$adimos al %inal! "sto permite crear las cuentas de usuario de los programas
impidiendo #ue sean usadas para acceder a la computadora v*a terminal!
>! 1reamos un directorio para los per%iles de usuario FTP5
sudo mkdir /etc/vsftpd
?! 1reamos dentro otro directorio para los usuarios FTP sin per%il todav*a -ec-o5
sudo mkdir /etc/vsftpd/vacio
@! Fi8amos el directorio vac*o sin permisos de escritura5
sudo c,mod 000 /etc/vsftpd/vacio
A! 1reamos un grupo y cuenta de usuario para el servidor FTP5
sudo groupadd vsftpd
sudo useradd -d /etc/vsftpd -s /bin/false -g nogroup vsftpd
B! 1reamos un grupo y cuenta de usuario para los clientes FTP5
sudo groupadd ftp
sudo useradd -d /etc/vsftpd/vacio -s /bin/false -g ftp ftp
3i ya eist*a &user ftp exists) conviene #ue lo modi%i#uemos5
sudo usermod -d /etc/vsftpd/vacio -s /bin/false -g ftp ftp
Gua para montar un servidor FTP multiusuario (castellano) Pgina 3 de 8
Configuracin del autenticador
Pluggable Authentication Moules &P72) es un sistema m,ltiple para #ue los programas puedan
autenticar la identidad de usuarios y otros agentes del entorno in%ormtico! Lo utili0amos a#u* para
#ue el servidor D3FTPD no tenga #ue -acer esta tarea, y simplemente consulte a P72 si el
usuario #ue llama se corresponde en el censo de la base de datos!
9evisamos los parmetros del per%il de D3FTPD para P72, con tal #ue se -agan las consultas a
2y34L! 7brimos el %ic-ero /etc/pamd/vsftpd con un editor de teto y5
=! Para #ue no se ei8a la eistencia de los usuarios en el sistema operativo, desactivamos
.pamE%tp!so., .common'account., .common'aut-. y .pamEs-ells!so. a$adiendo el s*mbolo .F. al
inicio de cada l*nea donde apare0can5
# pam'ftp.so.
#4include common-account
#4include common-aut,
#aut, required pam's,ells.so
>! Para especi%icar las credenciales de acceso, tablas y campos a consultar en la base de datos
2y34L, a$adimos estas dos laargas l*neas al %inal del %ic-ero5
aut, required pam'mysql.so verbose;. user;vsftpd
pass<d;contrasea1 ,ost;local,ost db;vsftpd table;usuarios
usercolumn;nombre pass<dcolumn;contrasena statcolumn;estado crypt;2
sqllog;true logtable;bitacora logmsgcolumn;mensa1e logusercolumn;usuario
logpidcolumn;proceso log,ostcolumn;cliente logtimecolumn;momento
account required pam'mysql.so verbose;. user;vsftpd
pass<d;contrasea1 ,ost;local,ost db;vsftpd table;usuarios
usercolumn;nombre pass<dcolumn;contrasena statcolumn;estado crypt;2
sqllog;true logtable;bitacora logmsgcolumn;mensa1e logusercolumn;usuario
logpidcolumn;proceso log,ostcolumn;cliente logtimecolumn;momento
&La contrase$a= de las l*neas debe ser la misma #ue -emos %i8ado para el usuario .vs%tpd. de
2y34L)
Gua para montar un servidor FTP multiusuario (castellano) Pgina ! de 8
Configuracin del servicio FTP
9evisamos los parmetros de la con%iguraci+n bsica de D3FTPD, editando el %ic-ero
/etc/vsftpdconf y %i8ando los #ue especi%icamos de la siguiente manera &-ay #ue buscarlos en el
%ic-ero, y si no estn a$adirlos al %inal)5
anonymous'enable;)&
local'enable;6E!
<rite'enable;6E!
=ferlog'enable;6E!
nopriv'user;vsftpd
c,root'local'user;6E!
secure'c,root'dir;/etc/vsftpd/vacio
pam'service'name;vsftpd
# En octal: 0022 xor 0777 = permisos 755
local'umask;..22
file'open'mode;.>>>
dirmessage'enable;)&
# Nmero mximo de sesiones de usuarix conectadxs simultneamente
ma='clients;0.
# Nr. mximo de ss. de usuarix para un mismo origen (I!.
ma='per'ip;0
# "ni#icaci$n de los clientes como nicx usuarix del sistema
guest'enable;6E!
# "suarix del sistema con %ue actuaran lxs usuarixs &'
guest'username;ftp
# ($nde encontrar las con#iguraciones espec)#icas de cada usuarix
user'config'dir;/etc/vsftpd
# (irectorio &' predeterminado. *i no creamos un per#il+ no to%uen nada.
local'root;/etc/vsftpd/vacio
# ri,ilegios locales para escri-ir+ para lxs usuarixs &' remotxs.
virtual'use'local'privs;6E!
# Enmascarar la in#ormaci$n de usuarix.grupo en directorios como /#tp/
,ide'ids;6E!
7lgunos de los parmetros no son imprescindibles as*, pero de esta manera tambi6n %unciona! "l
parmetro .localEumasG. es para los permisos #ue se %i8aran a los %ic-eros #ue suban los usuarios
v*a FTP/ por de%ecto ser*an HCC, pero con CAA permite #ue el usuario propietario de los %ic-eros y
carpetas pueda manipular plenamente y en cambio el p,blico de una (eb s+lo pueda leer!
Gua para montar un servidor FTP multiusuario (castellano) Pgina " de 8
Puesta en marcha
1on esta instrucci+n reiniciamos el servicio de D3FTPD para #ue apli#ue la nueva con%iguraci+n,
o tambi6n lo iniciamos si estaba parado5
sudo /etc/init.d/vsftpd restart
Cmo crear un usuario FTP
=! "l directorio en donde tenga #ue acceder el usuario debe estar creado, con propietario .%tp. y
con permisos para operar5
sudo mkdir /ruta/a/su/directorio
sudo c,o<n -R ftp?ftp /ruta/a/su/directorio
sudo c,mod -R >00 /ruta/a/su/directorio
>! 1on esta instrucci+n tendremos una nueva cuenta de usuario en la base de datos5
mysql -u ftpadmin --pass<ord;contrasea2 -e @()!ERT ()T& vsftpd.usuarios
$nombre+ contrasena/ :A#%E! $7elnombredeusuario7+
9A!!A&RD$7lacontrasea7//"@
"stos .elnombredeusuario. y .elnombredeusuario. &as* como la locali0aci+n p,blica del servidor)
son los datos #ue podremos dar a las personas #ue #ueremos #ue se conecten por FTP!
?! 1reamos un %ic-ero de teto para el per%il de usuario como /etc/vsftpd/elnom!redeusuario en
donde escribiremos la ruta del directorio al #ue acceder el usuario v*a FTP5
local'root;/ruta/a/su/directorio
"n este %ic-ero podemos a$adir cual#uiera de los parmetros #ue son vlidos en /etc/vsftpdconf
para personali0arlos para este usuario en concreto! Tambi6n los podemos blindar un poco
estableciendo permisos5
sudo c,mod -R BB. /etc/vsftpd/elnombredeusuario
Cmo eliminar un usuario FTP
=! "liminamos el usuario de la base de datos5
mysql -u ftpadmin --pass<ord;contrasea2 -e @DE#ETE 5R&* vsftpd.usuarios
A8ERE nombre ; 7elnombredeusuario7"@
>! "liminamos el per%il FTP de usuario5
sudo rm /etc/vsftpd/elnombredeusuario
?! 3i #ueremos, podemos eliminar su directorio &se perder todo el contenido I )5
sudo rm -R /ruta/a/su/directorio
Gua para montar un servidor FTP multiusuario (castellano) Pgina # de 8
Problemas comunes, primeros auxilios
Mensa"e #$%% &&PS' cannot chan(e directory'/etc/vsftpd/vacio# del servidor al
intentar entrar como usuario desde un pro(rama FTP)cliente' 7l crear la cuenta no -as
creado su per%il & /etc/vs%tpd/elnombredeusuario ), o bien no le -as especi%icado
correctamente la ruta del parmetro .localEroot.! 9evisa tambi6n los permisos del
directorio del #ue da error!
Al entrar como usuario desde un pro(rama FTP)cliente se ve un directorio vac*o y no
se puede hacer nada en +l ,/etc/vsftpd/vacio-' 7l crear la cuenta no -as creado su per%il
& /etc/vs%tpd/elnombredeusuario ), o bien no -as especi%icado correctamente la ruta del
parmetro .localEroot., o bien el %ic-ero de per%il tiene permisos demasiado restrictivos!
.o consi(o acceder con un mismo usuario a distintos sitios /e!' 3i pretendes utili0ar
el servidor FTP para mantener sitios virtuales de un servidor (eb, y te gustar*a entrar con
un mismo nombre de usuario para acceder di%erenciando el nombre de dominio o la
direcci+n JP, te conviene -acer uso del software'inter%a0 de red xinet para -acer llamadas
al D3FTPD especi%icando distinto %ic-ero de con%iguraci+n en la l*nea del comando! 2s
in%ormaci+n en5
es!(iGipedia!org/(iGi/Kinetd
(((!inetd!org
Ten(o pro!lemas y necesito encontrar de d0nde vienen' Puedes consultar diversas
bitcoras para ver #u6 pasa con las entradas de clientes FTP5
Litcora del servidor FTP D3FTPD5 %ic-ero de teto /var/lo(/vsftpdlo(
Litcora del autenticador P72 &para todos los accesos al sistema)5 %ic-ero de teto
/var/lo(/authlo(
Litcoras del servidor de base de datos 2y34L5 %ic-eros de teto /var/lo(/mys1llo( y
/var/lo(/mys1lerr
Litcora entre D3FTPD y P72 &6itos y %racasos en los intentos de entrada normal de
los usuarios FTP)! Podemos ver las anotaciones en la base de datos con la instrucci+n5
mysql -u ftpadmin --pass<ord;contrasea2 -e @!E#ECT C 5R&*
vsftpd.bitacora"@
Podemos vaciar &eliminar todo el -ist+rico) esta bitcora con la instrucci+n5
mysql -u ftpadmin --pass<ord;contrasea2 -e @DE#ETE 5R&*
vsftpd.bitacora"@
1enso de usuarios registrados! Podemos ver todos los usuarios virtuales con la
instrucci+n5
mysql -u ftpadmin --pass<ord;contrasea2 -e @!E#ECT C 5R&*
vsftpd.usuarios"@
Podemos consultar una sola cuenta de usuario con la instrucci+n5
mysql -u ftpadmin --pass<ord;contrasea2 -e @!E#ECT C 5R&*
vsftpd.usuarios A8ERE nombre ; 7elnombredeusuario7"@
Litcora del instalador Debian de programas5 %ic-ero de teto /var/lo(/installer/status
.ecesito controlar la cantidad de datos 1ue su!e un usuario ,cuota de espacio-'
1omo pod*as imaginar, en esta gu*a no encontrars respuestas ni pistas para todo, pues a
d*a de -oy yo tampoco s6 cual es el camino para aplicar esta %uncionalidad desde D3FTPD
con usuarios virtuales!
Gua para montar un servidor FTP multiusuario (castellano) Pgina $ de 8
Ms seguridad, control de velocidad, comprobaciones
Hay #ue tener en cuenta #ue en esta gu*a se -a dado la manera de escribir las contrase$as de
%orma visible &para %acilitar automati0aciones con script), as* #ue las instrucciones escritas #uedan
almacenadas tal cual en el -istorial de la consola! Para vaciar despu6s este -istorial y tambi6n el
-istorial del 2y34L puedes utili0ar las siguientes instrucciones5
rm D8&*E/.bas,',istory
rm D8&*E/.mysql',istory
&tiene e%ecto si seguidamente cerramos la sesi+n de consola/terminal)
3i no #uieres de8ar escritas las contrase$as con las l*neas de instrucciones al llamar a 2y34L,
puedes cambiar su parmetro --pass<ord;contraseEa por -p , y pedir teclear la contrase$a de
%orma no visible! Un e8emplo5
mysql -u ftpadmin -p -e @!E#ECT C 5R&* vsftpd.usuarios"@
Un salto en seguridad es la autenticaci+n del servidor, es decir, #ue un cliente FTP tenga la
certe0a de conectarse al aut6ntico servidor y no a un pescador de contrase$as! "sto, y la
comunicaci+n encriptada, se consigue con la capacidad 33L del servidor! Pero el ob8etivo de esta
gu*a es ayudar a poner en marc-a un servidor FTP de %orma sencilla, pues cons,ltense manuales
ms avan0ados para aprender sobre comunicaciones 33L, o barreras adaptativas como ban2fail!
"l D3FTPD permite algo de control de anc-o de banda dedicado a las coneiones FTP! 3e puede
establecer en bytes por segundo en /etc/vsftpdconf con los parmetros .localEmaErate. y
.anonEmaErate.! 1ons,ltese la documentaci+n de D3FTPD para ms detalles o novedades!
"sta gu*a publicada en cataln y castellano el =@ de %ebrero del >HHM por per Narc*s Garcia Langa
est comprobada con la Ubuntu GNU/Linu C!=H server, contando con la versi+n de serie H!B!> de
P72'2y34L &pero puede %uncionar con la mayor*a de variantes de Debian)! 9e%erencias ,tiles5
(((!ubuntu!com
doc!ubuntu!com/ubuntu/serverguide/1/
(((!debian!org
.o hu!iera sido posi!le completar la (u*a sin'
7le8andro 7yuso5 monoca%%e!blogspot!com/>HHC/HN/servidor'virtual'de'%tp'seguro'con!-tml
La documentaci+n o%icial de vs%tpd de 1-ris "vans5 vs%tpd!beasts!org
La documentaci+n de 2iles Lrennan5 (((!brennan!id!au/=@'FTPE3erver!-tml
La documentaci+n o%icial de P72'2y34L de 2oriyos-i Ooi0umi5
pam'mys#l!source%orge!net/Documentation/
"l manual de re%erencia de 2y34L5 dev!mys#l!com/doc/re%man/A!H/es/
"l c+digo %uente publicado por Gunay 7rslan
o la gran cantidad de preguntas y respuestas publicadas en Jnternet por la in#uieta
comunidad in%ormtica, libre! "special menci+n merece el GiLUG &(((!gilug!org)
3i tienes alg,n problema, no es mi responsabilidad! 1u*date de tener siempre copia de seguridad
de los datos #ue necesites recuperar! Puedes copiar y reutili0ar libremente esta gu*a, sin olvidarte
de sus autores &GNU FDL)5 -ttp5//curso'sobre!berlios!de/g%dles/g%dles!-tml
Gua para montar un servidor FTP multiusuario (castellano) Pgina 8 de 8

You might also like