A pesar de alguna cierta incertidumbre que pueda rondar a MySQL, personalmente sigo prefiriendo trabajar con esta DB a usar alguna otra. No tengo nada contra Postgre, simplemente he usado de toda una vida MySQL, y hasta ahora no he tenido motivos para replantearme su uso.
Esta vez les enseñaré a instalar un servidor FTP, pero no solo eso, les enseñaré de una forma no tan compleja, cómo hacer que los usuarios, passwords y demás datos de los usuarios sean guardados en una base de datos MySQL, y no en cuentas locales.
¿por qué hacer esto así?
Simple, porque a la hora de hacer un backup, reinstalar un servidor o cualquier otro cambio significativo, mover el servicio sería tan simple como copiar un archivo de configuración, y exportar la base de datos MySQL referente al FTP.
Para lograr esto usaremos Pure-FTPd, bien… empecemos 🙂
Índice
Instalación del servicio FTP con Pure-FTPd
1. Lo primero que debemos hacer es instalar el paquete: pure-ftpd-mysql
En distros como Debian o derivados: aptitude install pure-ftpd-mysql
2. Una vez instalado, se nos inició el servicio pero debemos detenerlo, para detenerlo en sistemas como Debian o derivados basta con:
/etc/init.d/pure-ftpd-mysql stop
No obstante, les dejo una línea que detendrá el servicio sin importar la distro que usen:
ps ax | grep pure | grep -v grep | awk '{print $1}' | xargs kill
Preparando condiciones en el servidor MySQL
Ya expliqué hace no mucho cómo crear una base de datos, un usuario y darle permisos a ese usuario en la base de datos: Usuarios y permisos en MySQL
Pasemos a ¿qué haremos acá? …
1. Crearemos una base de datos sí, pero primero accedemos a MySQL :
mysql -u root -p
2. Una vez dentro de MySQL pasamos a crear la base de datos myftpdb:
CREATE DATABASE myftpdb;
3. Ahora crearemos el usuario myftpuser y le daremos permisos a use usuario sobre la base de datos que recién creamos, este usuario tendrá como password myftppassword:
CREATE USER 'myftpuser'@'localhost' IDENTIFIED BY 'myftppassword';
GRANT ALL PRIVILEGES ON myftpdb.* TO 'myftpuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES ;
4. Listo, ya creamos la base de datos, el usuario y establecimos los permisos. Ahora debemos importar la base de datos por defecto (o limpia) para que esto esté completo. Para ello primero salgamos de MySQL:
exit;
Ahora descarguemos la base de datos por default que les ofrezco:
O bien en el servidor usen la siguiente línea:
wget http://ftp.desdelinux.net/myftpdb.sql
Listo, ya la tenemos en nuestro servidor, ahora solo queda importar sus datos:
mysql -u root -p myftpdb < myftpdb.sql
Y listo!
5. Y esto es todo para tener listo las condiciones de nuestro MySQL listas.
Uniendo FTP con MySQL
Bien, ya tenemos el servicio FTP instalado, el servicio MySQL instalado y con nuestra base de datos puesta… ahora solo falta, unir el servicio FTP con MySQL.
1. Primero debemos descargar el archivo de configuración que usaremos para lo antes marcado. En la terminal del servidor pongamos la siguiente línea:
cd /etc/pure-ftpd/ && wget http://ftp.desdelinux.net/pure-ftpd-mysql.conf
2. Ahora iniciamos el servicio FTP indicándole que use para autenticar usuarios MySQL, y además le indicaremos qué archivo de configuración usar para conectarse a MySQL:
pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf
Y listo 😀
Esto basta para instalar nuestro propio servidor FTP autenticando con una base de datos MySQL.
Si desean que siempre que el servidor se inicie automáticamente inicie el servicio FTP, deben poner en el archivo /etc/rc.local la línea que usamos para ejecutar el FTP, o sea, ponemos en /etc/rc.local esto:
pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf
Por cierto, podrán acceder al FTP usando cualquier navegador, así como clientes FTP como Filezilla… y no solo eso, usando navegadores de archivo como Nautilus, Dolphin o PCManFM también podrán bajar archivos y subirlos 😀
Usuario de prueba que está en la base de datos
Usuario: testuser
Password: testpassword
¿Cómo administrar los usuarios del FTP?
Bueno, teniendo en cuenta que es una base de datos MySQL, como dije arriba… usando PHPMyAdmin o Adminer les bastará. Simplemente usen su aplicación favorita para administrar la base de datos, la cual contiene una sola tabla: users … y en ella se encuentran los usuarios, aquí les dejo un screenshot:
Espero esto les sea de utilidad y ya saben, cualquier duda o sugerencia me la dejan saber.
Saludos
PD: En este tutorial usamos passwords guardados en la base de datos en texto plano, si desean mayor seguridad les recomiendo prueben con md5 😉
28 comentarios, deja el tuyo
MUY BUENO!!! Hace un par de semanas estuve instalandome esto pero con vsftpd y no me termino de convencer asi que voy a probar esto a ver que tal esta. Gracias
Gracias amigo.
vsftpd no recuerdo cuándo fue la última vez que lo usé… harán algunos años ya, … si es que alguna vez lo usé JAJA. Por el momento con PureFTPd ando más que contento 😀
Muy buen aporte!
Thanks compa 😀
Se hace lo que se puede jejeje….
Uuumm, interesante… pásame la ip de la BD que quiero tener esa recopilación de usuarios y contraseñas a mano 😉
Don’t be evil, man
No entendí jejeje… ¿de qué IP y DB hablas?
Si te refieres a que estos datos que puse en el tutorial podrían estar así mismo en un servidor, síp ahí tienes razón… están en un servicio FTP en una PC virtual en mi laptop, esta tiene un MUY buen firewall (iptables) por lo que… HAHAHAHAHA claro que don’t be evil LOL!!!
Joroña que joroña…. va a ser más complicado de lo que parece aprovechar alguna vulnerabilidad y capturar esos datos 😉
¡¡Muy interesante!! 🙂
Gracias 🙂
Esto es lo que intento que nos diferencie del resto de sitios … que nosotros intentamos poner no tanto noticias sino como artículos técnicos 😀
Qué tan rápido es esto respecto a Samba? (red local solamente)
que samba y ftp son 2 cosas distintas, ftp es un protocolo en serio y smb solo para facilitar la comparticion entre win y linux.
Si buscas rendimiento en la red utiliza un servicio de FTP de lo contrario utiliza samba nomas sin problemas
Exacto.
Digamos que FTP es un tanto más serio que Samba, al menos en mi opinión así lo es.
No he hecho benchmarks ni mucho menos, pero tal vez FTP sea un poco más rápido.
Gracias. Yo uso Samba para que desde mi consola Wii (usando wiimc) pueda ver pelis y series que descargo en la compu. Pero wiimc también se puede conectar a un servidor ftp. Yo usé Samba porque era lo más fácil, pero siempre me intrigó si sería más rápido con ftp. Tendré que probar.
Bueno, también podrías montar simplemente Apache en tu PC, y así el Wii se conectaría, este debe ser más rápido que samba… y muchísimo más simple de configurar que FTP 😀
El wiimc (un Wii Media Player) sólo acepta conexiones Samba y FTP.
Excelente. Sólo le hace falta algo a este tipo de artículos (y al sitio en general) para quede todo perfecto; una plantilla CSS para poder imprimir los artículos a PDF o en papel.
No se si será a mi solo, pero el gran problema con esto es que los usuarios pueden recorrer todos los directorios por mas que le doy un directorio específico como «/var/www/sitio_usuario» si se conectan por ftp tienen acceso a cualquier lugar de mi pc ¬¬
no es muy seguro eso jaja
ACA ESTA!!!
Para evitar que los usuarios que creamos puedan navegar por todo nuestro sistema hay que agregarle el parametro «-A» al lanzar el pure…
O sea lo que agregamos al /etc/rc.local que pones en el tuto es esto
pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf
y hay que reemplazarlo por esto otro:
pure-ftpd-mysql -A -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf
Se aprecia?… Esta nueva línea lleva el parámetro -A para restringirle el directorio solamente al que le asignamos y nada mas, puede crear pero no puede subir de nivel.
D: esta lindo puro-fptd
Gracias por el tip 😀
Hola es posible implementar quotas en esta implementación de MySQL y FTP, yo actualmente tengo un servidor ftp con vsftpd y no tengo problema alguno con las quotas, pero al ser un usuario virtual (creado en mysql) serán validas las quotas? y lo segundo es en donde se almacenan los archvios subidos por los usuarios, es decir cuales son los directorios de cada usuario.
En teoría sí se pueden implementar cuotas, de hecho la base de datos tiene los campos creados para ello, y el archivo de configuración del servicio FTP tiene puesta las consultas para esto, lo que en realidad no he probado esto 😉
Sobre el dónde los usuarios pondrían los archivos, lo defines en el 5to campo, mira el screenshot: https://blog.desdelinux.net/wp-content/uploads/2012/09/phpmyadmin-screenshot-nuevo-usuario.jpg
Muchas Gracias por tu comentario, voy a probar este sistema en un servidor de prueba y comento los resultados, ojala se pueda por que es un gran método para tener todo ordenadito, y con un RAID tienes un sistema de backup estable :D.
Gracias a tí por el comentario 🙂
Tengo una pregunta, ya he logrado instalar pure-ftp con mysql y quotas, el tema ahora es como puedo suspender una cuenta desde la propia tabla mysql, sin modificar su contraseña usuario o archivos subidos.
Se me ocurren dos formas, la más simple es cambiarle el valor de Status de 1 a 0, en teoría si está en 0 la cuenta está desactivada, prueba esto y me dices 🙂
Roberto, como lograste poner las cuotas usando esta instalación? Por favor socializa la información.
Muy buena entrada!!
Birkhoff, justamente en mi blog personal cree un tema sobre eso, te dejo el link para que lo revises:
http://aprendelinux.net/instalar-servidor-ftp-pure-ftp-con-cuentas-virtuales-en-mysql/
Saludos:
EStoy tratando de seguir todo pero me aparece error 501 y mas que todo hacer referencia a que el password es incorrecto cuando se que esta bien