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 ¶ 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 ¶ %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