lunes, 4 de abril de 2011

Instalar y configurar FTP en Debian con ProFTPd

Como nadie sabe (porque nunca lo dije) amo Dropbox, no solo me parece muy útil para acceder a mis archivos desde cualquier lugar, sino que además cada vez que tengo que subir algo lo hace de manera muy veloz. Obviamente esto último depende de la conexión de internet, pero si es buena Dropbox la aprovecha 100%.
Ahora, ¿por que hablo de Dropbox si el título dice como instalar un FTP? Bueno, en realidad la idea nace a raiz de Dropbox. Si bien es extremadamente útil convengamos que 2GB no es demasiado espacio disponible, aunque con algunos "trucos" que andan dando vuelta por internet uno puede subir su capacidad de almacenamiento (yo tengo actualmente 3.3GB). Así y todo nunca alcanza. Ahí fue cuando se me ocurrió instalarme un FTP en una máquina vieja que tengo con, el cada vez mas querido, Debian Squeeze 6 como para aliviar un poco a Dropbox y no cargarlo tanto con cosas que quizas no son vitales.
Este pequeño tutorial nos va a servir para instalar y configurar un FTP en Debian Squeeze aunque debería funcionar también en nuestro querido y popular Ubuntu.

Instalación:
Sencilla, a traves de nuestro amado apt-get:

sudo apt-get install proftpd

Creación de usuario para FTP:
El ProFTPd nos crea un usuario por defecto llamado, justamente, ftp lo cual a nosotros nos da asco y no lo usaremos. Vamos a crear uno un poco menos obvio. Para ello escribimos:

sudo adduser usuarioftp

Está bien, está bien... también es obvio, pero no tanto =)
De mas esta decir que pueden elegir el nombre que quieran. Después de ingresar esa línea nos pedirá que le asignemos una pass y una serie de datos como Nombre Completo, etc que no hace falta ni que sean reales ni completar, podemos darle todo ENTER.

Cambiar password de usuario:
Si algun día, por alguna razón, necesitamos darle los datos de acceso a alguien tenemos después la posibilidad de modificar la contraseña de nuestro usuarioftp. Para hacerlo escribimos en una terminal:

sudo passwd usuarioftp

A continuación editamos el archivo /etc/passwd y vemos que /home tiene asignado nuestro usuario. Aparecerá algo así:

usuarfioftp:x:1002:1002:Usuario FTP,,,:/home/usuarioftp:/bin/false

Ahí nos indica que nuestra home será /home/usuarioftp (la x es nuestra contraseña que no aparece por estar encriptada). Debemos asegurarnos que al final diga /bin/false en lugar de /bin/bash. En caso de que aparezca esto último debemos cambiarlo.

Si fue necesario cambiarlo debemos verificar en /etc/shells que aparezca la shell falsa /bin/false. Escribimos en una terminal:

sudo nano /etc/shells

Y si en ningún lado aparece /bin/false lo agregamos al final.
Ahora procedemos a darle los permisos a nuestra carpeta. Escribimos en terminal:

chown -R usuarioftp /home/usuarioftp/

El parámetro -R es para hacer recursivo el comando, con lo cual si vamos a crear carpetas dentro de /home/usuarioftp nos conviene primero crear las carpetas y después ejecutar la línea.

Para evitar que los usuario se logueen por FTP editamos /etc/ftpusers:

sudo nano /etc/ftpusers

Seguramente ya figuran algunos usuarios, podemos añadir clásicos como root, anonymous y ftp. Todos los usuarios que figuren en este archivo NO podrán loguearse. Mas adelante explico una forma de denegar el acceso de todos excepto del usuarioftp.

Para ver el log de Proftpd:

sudo nano /var/log/proftpd/proftpd.log

Aquí nos aparecerán todos los intentos de login.

Ahora procedemos a la configuración del FTP para ello editamos el archivo proftpd.conf:

sudo nano /etc/proftpd/proftpd.conf

Vamos a configurar algunas cosas esenciales. A continuación vemos las lineas de ese archivo:

ServerName  "Nombre_del_servidor_ftp"   #De mas está decir que acá va el nombre del servidor =)
ServerType   standalone/inetd      #Nosotros usaremos standalone.
DeferWelcome      off/on  #Elegimos off para no mostrar mensaje de entrada.

MultilineRFC2228   on/off   #Elegimos on, esto hará a nuestro ftp compatible con casi todos los clientes ftp.
DefaultServer        on/off   #Elegimos on, toma las opciones default de un servidor ftp.
ShowSymlinks         on/off    #Elegimos on, podremos ver los links, si el link esta fuera de nuestro home no tendremos acceso a él.

TimeoutNoTransfer   <numero>  #Número máximo de segundos que puede estar un cliente en el ftp sin  transferir nada. Por defecto 600 seg.
TimeoutStalled      <numero>  #Número máximo de segundos que puede estar el cliente-servidor sin recibir información de una transferencia. Por defecto 600 seg.
TimeoutIdle         <numero>  #Número máximo de segundos que puede estar  un usuario sin hacer nada. Por defecto 1200 seg. 

DenyFilter          \*.*/      #Es un filtro de protección para el ProFTPd.

DefaultRoot    /home/usuarioftp #Para mi, vital. Acá le decimos a que carpeta va a acceder. Si no lo configuramos accede a todas, si configuramos por ejemplo /home accede a todos los /home. En este caso tendrá acceso solo a su /home.

Port  <numero> #Acá va el puerto al que conecta nuestro servidor, por defecto el 21.

MaxInstances      <numero>     #Cantidad máxima de conexiones al FTP que se pueden hacer a la vez.

AllowOverwrite on     #Elegimos on para sobreescribir ficheros existentes.

TransferLog /var/log/proftpd/xferlog  #Loguea las transferencias que se realicen en el FTP.

SystemLog   /var/log/proftpd/proftpd.log #Se guardan los intentos de login.

Por último, y como indique anteriormente, si queremos denegar el acceso de todos, excepto del usuario usuarioftp añadimos esto al final del archivo de configuración:

<Limit LOGIN> #Limitamos a quienes intentan loguearse en el FTP.
AllowUser usuarioftp  #Allow es para indicar a quienes vamos a aceptar.
DenyAll    #Deny es para indicar a quienes denegamos el ingreso. Podemos poner los usuarios y separarlos por comas o, como en este caso, podemos elegir DenyAll e impedir el acceso de todos excepto del que figura en Allow.
</Limit>
RequireValidShell   off

Administrar el FTP:
Tenemos 2 comandos que nos serán de gran utilidad:

ftptop
ftpwho

ftptop nos indica en tiempo real quienes están conectados a nuestro FTP. ftpwho nos sirve para ver en un momento determinado quien está conectado.

Para cerrar el servidor y mostrar un mensaje con el motivo por el cual se encuentra inaccesible podemos usar la herramienta ftpshut:

sudo ftpshut now "En este momento se están realizando tareas de mantenimiento, disculpe las molestias"

Después deberán ejecutar ftpshut -R para hacerlo accesible nuevamente.

Por último, para reiniciar el servicio ProFTPd:

sudo /etc/init.d/proftpd restart

Si queremos detenerlo debemos escribir stop en lugar de restart. 
Eso fue todo por hoy, espero que les haya sido útil =)

Referencias: WikiLearning y The bit Developer

22 comentarios:

  1. Hola como estás?... Excelente blog :)... Creo que tenemos un estilo de escritura parecido. Un saludo desde Colombia :).

    ResponderEliminar
  2. Puede ser, vi tu entrada de como instalar un FTP =)

    Por ahí por eso te parece un excelente blog, porque se parece al tuyo xD

    Saludos desde Argentina!

    ResponderEliminar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Eliminar
    2. Hola Nasty y demás participantes.
      He leído el tutorial y esta muy bien, pero tengo un problema con mi ftpd con Ubuntu y me gustaría recibir ayuda con ello.
      La cosa es que si estoy cierto tiempo sin entrar al ftp "algo más de un dia" se queda inaccesible hasta que lo reinicio, de hecho no llega a verse ni el formulario de login.
      Saben qué puede pasar?
      GRACIAS DE ANTEMANO.

      Eliminar
  3. Tu post me ha sido muy útil.

    Muchas gracias!

    ResponderEliminar
  4. Eres un máquina tio!!!

    ResponderEliminar
  5. Gracias por el post, me haz ayudado en gran manera, saludos desde Guatemala...

    ResponderEliminar
  6. Voy a probar mañana y te cuento como me fue, espero que resulte ya que llevo una semana tratando de configurar mi servidor ftp.
    Si tienes algo de como configurarlo con webmin sería bueno que lo subieras.

    ResponderEliminar
  7. Hola soy nuevo en administración de redes en linux me gusta mucho el sistema por la fiabilidad y seguridad que ofrece, monté el proftpd lo veo bien de mi red local pero cuando intento acceder desde otra red no es posible abrí el puerto 21 pero nada aun.
    PD: Uso debian lenny
    Alguien me ayuda por favor???

    ResponderEliminar
  8. Muy bueno el post y útil a la vez, pero aún no se como configurar el proftpd para visualizarlo desde una red externa, alguien me dice como, gracias de antemano.

    ResponderEliminar
  9. Muy útil. Gracias y sigue así

    ResponderEliminar
  10. Muchaaaaa gracias! Me encanta la comunidad que tenemos en informática.

    Abrazo

    ResponderEliminar
  11. Hola. Gracias por el Post. De esta forma quedará configurado el ProFTPD para que arranque con el sistema? Sino... como lo dejo con autoarranque?

    ResponderEliminar
  12. Muchas gracias ha resultado muy útil tu información.

    ResponderEliminar
  13. Muchas gracias, a dia de hoy me a servido tu post , para un proyecto que estaba montando!! Sos groso amigo!

    ResponderEliminar
  14. hola he seguido todo el proceso, pero resulta que cuando intentas acceder desde fillezila da un error de conexion

    Response: 331 Password required for usuarioftp
    Command: PASS **********
    Response: 530 Login incorrect.
    Error: Critical error
    Error: Could not connect to server

    eso sucede cuando tienes en /etc/passwd lo que tu comentastes que pusieramos /bin/false si se cambia a /bin/bash funciona bien.... hay algun problema con colocar bash en vez de false?

    ResponderEliminar
    Respuestas
    1. Y... lo aconsejable es usar false porque con bash el usuario puede loguearse, entonces si vos le pasas tu usuario ftp y pass a alguien ésta persona ademas del acceso al ftp tiene acceso a tu pc, en cambio con false solamente puede entrar en el ftp... Eso lo manejas vos...

      Eliminar