Cómo instalar y configurar un servidor FTP con Pure-FTPd + usuarios virtuales

Yo soy de los que les gusta innovar y conocer cosas nuevas, hace no mucho tuve que instalar y configurar un servidor FTP y decidí hacerlo de forma diferente a como siempre lo hacía.

En este caso opté por un servicio FTP con usuarios virtuales, usuarios que estarán almacenados en un archivo cifrado (usuario, password, configuraciones, etc), todo con Pure FTPd.

Aquí les mostraré cómo hacerlo … bien, empecemos 😉

Primero que todo, especificar que los comandos de este tutorial están pensados para distros como Debian o basadas en ellas, no obstante si alguien usa otra distro en su servidor debe instalar los mismos paquetes y usar las configuraciones puestas más abajo, lo único que necesita cambiar es el comando de instalación.

Todos los comandos que leerán serán ejecutados como root, ustedes si lo desean pueden anteponer «sudo» a cada línea.

1. Primero debemos instalar Pure FTPd:

apt-get install pure-ftpd

Les terminará el output en algo como esto:

installing-pure-ftpd

2. El servicio ya está activado, pero no nos sirve de nada si no lo hemos configurado apropiadamente, pongamos un archivo de configuración extenso pero casi que es standard, contiene lo normal, estableciendo que los usuarios anónimos no son permitidos, etc etc.

cd /etc/pure-ftpd/ && wget http://ftp.desdelinux.net/pure-ftpd.conf

3. Bien, supongamos que nuestra carpeta de FTP es /var/www/ftp/ y deseamos crear un usuario que pueda subir información a la carpeta /var/www/ftp/sysadmin/ , pongamos lo siguiente en una terminal:

pure-pw useradd sysadmin -u 2001 -g 2001 -d /var/www/ftp/sysadmin/

Esto significa lo siguiente:

pure-pw : Comando que nos sirve para manipular usuarios de Pure-FTPd
useradd : Indicamos que agregaremos un usuario
sysadmin : El usuario que deseo crear
-u 2001 : UserID de ese usuario
-g 2001 : GroupID de ese usuario
-d /var/www/ftp/sysadmin/ : La carpeta que será el home de ese usuario, o sea, donde subirá las cosas

Al poner la línea anterior les preguntará el password de ese usuario.

Deben haber creado con anterioridad la carpeta sysadmin dentro de /var/www/ftp/

4. Ahora deben refrescar el archivo de base de datos de usuarios, para ello entremos a la carpeta /etc/pure-ftpd/ (cd /etc/pure-ftpd) y pongamos en la terminal:

pure-pw mkdb

5. Ahora debemos iniciar Pure-FTPd pero indicándole que usaremos el archivo de usuarios virtuales, primero detengamos el servicio:

/etc/init.d/pure-ftpd stop

Luego nos aseguraremos que no se iniciará por defecto de forma normal:

chmod -x /etc/init.d/pure-ftpd

Y ahora iniciamos el servicio a nuestro modo:

/usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-ftpd/pureftpd.pdb

6. Si prueban usando una aplicación como Filezilla verán que se pueden conectar sin problemas con el usuario creado, sin embargo no podrán copiar nada o crear directorios, esto es debido a que la carpeta /var/www/ftp/sysadmin/ (el home del usuario según el ejemplo) no tiene los permisos apropiados, se solucionará con un:

chown -R 2001:2001 /var/www/ftp/sysadmin/

Recuerden, el Uid y Gid 2001 es el del usuario que creamos, lo creamos con el comando en el anterior paso 3 😉

7. Para detener el servicio basta con en esa misma terminal presionar [Ctrl]+[C] o bien en otra terminal hacer un:

killall pure-ftpd

Ahora indicaremos que el servicio se iniciará automáticamente con el sistema cuando el servidor inicie, para ello modifiquemos el archivo /etc/rc.local y antes de la última línea que dice «exit 0» pongamos el comando con el que iniciamos el servicio FTP:

/usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-ftpd/pureftpd.pdb

O sea, nos quedaría así:

rc-local-pure-ftpd

Pueden editar el archivo con nano, vi o su editor preferido, o si lo prefieren copien y peguen este comando que les facilitará el trabajo:

perl -pi -e "s[exit 0][/usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-ftpd/pureftpd.pdb]g" /etc/rc.local && echo "exit 0" >> /etc/rc.local

… sí sí … como leyeron, «facilitar», es un comando extenso sí, pero es simplemente sustituir texto con perl y un inofensivo echo 🙂

8. Una vez hecho esto, reinicien el servidor y verán como ya el servicio pure-ftpd está iniciado y listo para funcionar 😀

¿Cómo eliminar usuarios?

Como les dije antes, el comando pure-pw es lo que necesitamos para manipular usuarios, para eliminar un usuario (por ejemplo, sysadmin) pongamos lo siguiente:

cd /etc/pure-ftpd/
pure-pw userdel sysadmin
pure-pw mkdb

Recuerden que siempre que hagan un cambio en algún usuario deben volver a generar el archivo virtual de base de datos de los usuarios, se encuentra en /etc/pure-ftpd/ y se genera/actualiza con pure-pw mkdb

En fin amigos/as creo que no hay mucho más que agregar, invitarles a que se lean la ayuda de pure-pw pues nos permite muchas más cosas que las que aquí les mostré (este es solo un tutorial breve y casi básico).

Yo hace uno o dos años era de los que todo lo vinculaba a OpenLDAP o MySQL, pero con el pasar del tiempo me dí cuenta de que tantas conexiones a bases de datos que sean servidores como tal generan un consumo que muchas veces no podemos permitirnos, por ello el uso de alternativas completamente viables como la de usar bases de datos en archivos propios de la aplicación, como es este caso de los .pdb de Pure-FTPd 🙂

Cualquier duda o pregunta intentaré ayudar en todo cuanto pueda.

Saludos y … happy hacking!


Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   elav dijo

    Eso eso.. Documentación en caso de errores 😀

    1.    KZKG^Gaara dijo

      Y ya estoy redactando el post sobre cómo instalar Nginx+MySQL+Spawn_FastCGI como lo hice en Justice, y gracias a eso el blog funciona tan bien 🙂

      Espero tenerlo listo para mañana o pasado-mañana.

  2.   Rodolfo dijo

    Buen post; es gracioso hace poco estuve batallando para poner mi servidor ftp inclusive no pude con vsftpd y me pase a pure-ftpd y anda lo que si me parece te falto es poner un ejemplo del conf claro la documentacion es muy buena, pero al menos lo basico. Encriptacion, o al menos el port forwading en caso de que se use router.
    Por cierto con este comando pure-ftpwho te permite saber quien esta conectado al servidor, y si esta bajando algo ;).
    Y de acuerdo contigo poner una base de datos para conectarse al servidor no es tan necesario.

    1.    KZKG^Gaara dijo

      Gracias por el comentario 🙂

      Sí en efecto, me faltó explicar muchas cosas (todo de hecho) en la configuración, es que asumí que alguien que sabe administrar un servidor, que desea instalar un servicio FTP, ese alguien no tendría mayores problemas para leer los comentarios del archivo de conf ^-^

      Saludos y de nuevo, gracias por el comentario

  3.   Tahuri dijo

    Hola Muy bueno el post, yo uso ( o almenos por ahora ) vsftpd pero tengo algunos problemas con el, y quería ver si me paso a este, tenes alguna url o doc para ver como es su configuración?

    Muchas gracias };)

    1.    KZKG^Gaara dijo

      La configuración la puedes ver acá: http://ftp.desdelinux.net/pure-ftpd.conf
      Cualquier duda o si necesitas algo abre un hilo en el foro que con gusto te ayudamos 🙂

  4.   Atheyus dijo

    Muy bueno 😀

    Solo una pequeña cosa,la orden en perl le falta el símbolo de ^,para que no cambie el otro exit 0 que esta en los comentarios:

    perl -pi -e "s[^exit 0][/usr/sbin/pure-ftpd -j -lpuredb:/etc/pure-ftpd/pureftpd.pdb]g" rc.local && echo "exit 0" >> rc.local

    Saludos

  5.   Omar dijo

    excelente, solo que tengo una duda, como puedo crear un usuario de solo lectura?? uso Centos 6.5, pureftpd, ispconfig y modo grafico.

    el ispconfig lo uso nomas para el ftp

    saludos y gracias

  6.   monzon dijo

    Esta forma de instalar pureftp es un ASCO 🙂 dejas corriendo el servicio como root, creas un usuario virtual y luego cambias los permisos en el filesystem, y ufff un largo etc. La forma en que se instala el paquete ya viene listo para ser usado, no hay necesidad de hacer todos estos pasos

    1.    elav dijo

      Quedas invitado a publicar una guía menos «asquerosa».. 😉

    2.    sedlav dijo

      ¿Q propones? ¿Poner a escuchar el servidor ftp en un puerto > 1024? Si el servidor ftp esta al escucha en su puerto standard: 22 debe ejecutarse como root al no ser que modifiques los capabilities del kernel, si lo que quieres es mejorar la seguridad usa un framework MAC con SELinux otra variante seria hacerle jail/chroot al servidor ftp.

  7.   LlSastre dijo

    El link para el pure-ftpd.conf está caído o no existe. ¿Puedes restaurarlo?
    Gracias

  8.   Attachments dijo

    2 años más tarde el link para el archivo pure-ftpd.conf sigue caído 🙁