Está en la página 1de 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 e isten 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 te to #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 te to 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 e iste, 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 DATA A!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 7contrasea17" 3RA)T ()!ERT 7contrasea17" &) &) vsftpd.usuarios vsftpd.bitacora T& T& vsftpd4local,ost vsftpd4local,ost (DE)T(5(ED (DE)T(5(ED 6 6

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 (DE)T(5(ED 6 7contrasea27" &) vsftpd.usuarios T& ftpadmin4local,ost 6

3RA)T !E#ECT+DE#ETE &) vsftpd.bitacora T& ftpadmin4local,ost (DE)T(5(ED 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 e ist*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 Mo ules &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/pam d/vsftpd con un editor de te to y5 =! Para #ue no se e i8a la e istencia 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/vsftpd conf 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. remotxs. local'root;/etc/vsftpd/vacio ri,ilegios locales para escri-ir+ para lxs usuarixs &' 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 te to 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/vsftpd conf 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 te to /var/lo(/vsftpd lo( Litcora del autenticador P72 &para todos los accesos al sistema)5 %ic-ero de te to /var/lo(/auth lo( Litcoras del servidor de base de datos 2y34L5 %ic-eros de te to /var/lo(/mys1l lo( y /var/lo(/mys1l err Litcora entre D3FTPD y P72 &6 itos 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 vsftpd.bitacora"@ mysql -u ftpadmin vsftpd.bitacora"@ --pass<ord;contrasea2 -e @!E#ECT C 5R&*

Podemos vaciar &eliminar todo el -ist+rico) esta bitcora con la instrucci+n5


--pass<ord;contrasea2 -e @DE#ETE 5R&*

1enso de usuarios registrados! Podemos ver todos los usuarios virtuales con la instrucci+n5
mysql -u ftpadmin vsftpd.usuarios"@ --pass<ord;contrasea2 -e @!E#ECT C 5R&*

Podemos consultar una sola cuenta de usuario con la instrucci+n5


mysql -u ftpadmin --pass<ord;contrasea2 -e @!E#ECT vsftpd.usuarios A8ERE nombre ; 7elnombredeusuario7"@

5R&*

Litcora del instalador Debian de programas5 %ic-ero de te to /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 cone iones FTP! 3e puede establecer en bytes por segundo en /etc/vsftpd conf con los parmetros .localEma Erate. y .anonEma Erate.! 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

También podría gustarte