Skip to main content

Instalar servidor FTP y restringir el acceso a los usuarios en Linux

Instala tu propio servidor restringiendo el acceso a cada usuario a una serie de rutas específicas garantizando la seguridad de tu sistema

Hola a todos en otro post en Byte Mind. En esta ocasión os vamos a enseñar como instalar y configurar un servidor ftp en nuestro sistema y restringir a cada usuario el acceso a una serie concreta de directorios pero, antes de nada, y para todos aquellos que empiezan, vamos a explicar que es el protocolo ftp.

 

Qué es el protocolo ftp

El protocolo FTP (File Transfer Protocol) o en español Protocolo de Transferencia de Ficheros, es un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP (Transmission Control Protocol) basado en la arquitectura Cliente – Servidor. Desde un equipo, independientemente del sistema operativo, un usuario puede conectarse a un servidor para descargar datos o para subir sus datos a dicho servidor.

Este servicio es ofrecido por la capa de aplicación del modelo de capas de red TCP/IP al usuario que normalmente, lo hace a través de los puertos 20 o 21. Este protocolo fue diseñado para una transferencia rápida entre el servidor y el cliente pero, no es lo que diríamos seguro. Esto lo digo porque el protocolo ftp, realiza una transferencia de ficheros en texto plano, en otras palabras, si en el proceso hubiese alguien escuchando podría ver los datos tal cual han sido enviados.  Como solución a este problema, podemos utilizar para la conexión sftp o scp para esta transferencia de archivos pero, con la peculiaridad de qué de esta otra forma, los datos se envían encriptados asegurando la privacidad en el envío de datos.

Volviendo al asunto del que hablábamos en un principio, para la instalación del servidor ftp, vamos a utilizar la herramienta vsftd.

 

Instalación de vsftpd

Para instalar nuestro servicio ftp deberemos instalar la herramienta vsftpd de la siguiente forma en máquinas Debian

 

Configuración vsftpd

Para configurar nuestro servidor, deberemos editar el fichero vsftpd.conf, nosotros lo haremos utilizando vim

En este archivo nos vamos a centrar en los parámetros que necesitamos por ahora

  • listen = YES -> Con esta opción especificamos si queremos iniciar el servicio al iniciar el sistema.
  • anonymous_enable = NO -> Con esta opción controlamos si los usuarios anónimos puedan conectarse a nuestro sistema. Por seguridad se establecerá en no.
  • local_enable = YES -> Permitimos o denegamos que los usuarios locales, es decir, el sistema en el cual está instalado pueden loguearse o no.
  • write_enable = YES -> Para permitir o no que los usuarios además de descargar puedan subir sus propios ficheros.
  • local_umask = 022 -> La umask establece los permisos para aquellos directorios y ficheros que se creen nuevos en el servidor. Estableceremos el valor 022 (755 para directorios y 644 para ficheros).
  • chroot_local_user = YES -> Esta directiva la utilizaremos para enjaular al usuario en su directorio y evitar que pueda navegar por todo el sistema.
  • chroot_list_enable = YES -> Con esta directiva podemos especificar aquellos usuarios que queremos que tengan permisos para acceder al árbol del sistema.
  • chroot_list_file = /etc/vsftpd.chroot_list -> Con esta opción, indicamos el fichero donde estará el listado de usuarios que pueden navegar por encima de los directorios del servidor, es decir, podrá salir de su home de usuario.
  • allow_writeable_chroot = YES -> Con esta directiva indicamos al servidor que el usuario enjaulado puede escribir en el servidor.

 

Creación del grupo ftp

En este caso, los usuarios que se conectarán deberán tener ciertos permisos, para ello vamos a crear un grupo ftp que los englobe a todos

Con nuestro grupo ya creado, vamos a crear una shell fantasma para que no puedan entrar directamente a la consola del servidor

Con nuestra shell fantasma creada, vamos a añadirla al listado de shells del sistema, editamos el fichero

Y al final añadimos la carpeta previamente creada

 

Creación de nuestro usuario ftp

Ahora que ya tenemos configurado nuestro servidor, vamos a crear un usuario con el que poder acceder vía ftp y le asignamos los permisos correctos.

Vamos a crear la carpeta home para el usuario, en nuestro caso lo hemos llamado usuarioftp y a la carpeta que engloba los usuarios para este servicio, la hemos llamado ftp

Con la opción -p indicamos que si los padres no existen, nos cree el árbol completo.

Vamos a crear nuestro usuario ftp

Vamos a explicar los parámetros utilizados en este comando

  • Lo primero la palabra clave useradd para la creación de un nuevo usuario
  • Con -g especificamos el grupo del usuario
  • Con la opción -d especificamos la ruta de la home de nuestro usuario
  • Utilizando la opción -c especificamos el nombre completo de nuestro usuario
  • La última palabra, “usuarioftp”, sería el nombre de nuestro usuario

Ahora añadimos una contraseña a nuestro usuario con el comando

Tendremos que ingresar la contraseña dos veces para que el sistema nos la valide y acepte.

Ahora vamos a darle permisos al usuario en su home

 

Enjaulando al usuario

Ahora que ya tenemos nuestro grupo y usuario creados, así como la configuración del servidor, si hemos habilitado la directiva chroot_local_user ya lo tenemos hecho y el usuario ya está enjaulado en su home. Esto quiere decir que el usuario no podrá escalar en la jerarquía del directorio y sólo permanecerá en su propio directorio.

Si por otra parte queremos que ese usuario tenga permisos para escalar en el sistema, activamos la directiva chroot_list_enable y chroot_list_file y añadimos el usuario en el fichero indicado en la directiva como vemos a continuación.

Buscamos nuestro usuario en el fichero /etc/passwd

Copiamos los datos de nuestro usuario, en nuestro caso

Y lo pegamos en el fichero /etc/vsftpd.chroot_list

 

Con todo esto ya sólo nos faltaría reiniciar el servicio ftp

 

Conexión con el servidor ftp

Ahora probamos la conexión, como vemos en la siguiente imagen

Instalar servidor FTP y restringir el acceso a los usuarios en Linux

 

Ya tenemos nuestro usuario creado y enjaulado para conectarse por ftp. Para aquellos interesados, en los próximos días, crearé un post explicando como trabajar desde un servicio ftp y resolveré aquellas dudas que expongáis en los comentarios. Gracias por leernos y nos vemos en el próximo post.

 

14 thoughts on “Instalar servidor FTP y restringir el acceso a los usuarios en Linux

    1. Hola Jon,

      De que forma lo has configurado?, qué has copiado y pegado exactamente?
      Con respecto a las opciones que se indican, chroot_local_user y allow_writeable_chroot, entiendo que las has habilitado.
      Puedes darme más información de cómo has configurado el servicio con el fin de poder ayudarte a solucionar tu problema concreto.

      Saludos

        1. Hola Alejandro,

          Una vez hayas creado al usuario, lo hayas añadido al grupo utilizado para el ftp y hayas creado los directorios a los que tendrá acceso, junto con los permisos para ese usuario/grupo, tendrás que añadir las siguientes directivas al fichero de configuración de vsftpd
          chroot_local_user = YES
          chroot_list_enable = YES
          chroot_list_file = /etc/vsftpd.chroot_list

          Editas el fichero configurado en la directiva chroot_list_file y añades la línea correspondiente del mismo que obtendrás del fichero /etc/passwd, que sería algo parecido a lo siguiente:
          usuarioftp:x:1004:118:Nombre del Usuario:/home/ftp/usuarioftp:/bin/ftp

          Reinicias el servicio de ftp y listo, el usuario no podrá subir más haya de la ruta que hayas configurado.

          Pruébalo y cualquier cosa me dices.

          Saludos

  1. Hola.
    Trato de ejecutar este comando
    sudo useradd -g ftp -d /home/ftp/usuarioftp -c “Nombre usuario” usuarioftp y me arroja error, indica que el grupo no está creado. Sabes que sucede? Gracias

    1. Hola Michael,

      Para solucionar el error que indicas lo que debes de hacer es crear previamente el grupo ftp por el cual te da el error.
      Para ello, si miras un poco más arriba tienes el comando a tu disposición, aunque te lo indico aquí de nuevo:
      groupadd ftp
      Una vez creado el grupo, lanza de nuevo el comando de creación del usuario y te lo creará sin problemas.
      Si necesitas algo más al respecto me dices.

      Saludos.

  2. Hola, me pasa algo muy raro. Todo funciona ok si me conecto por ftp. Cuando me conecto usando SFTP puedo subir y navegar los directorios.

    1. Hola Juan Marcos,

      En este caso, utilizan métodos de conexión diferentes, por lo tanto la configuración a aplicar también deberá de ser diferente, o en su defecto especificar en que casos se debe de aplicar.
      A fin de ayudarte, puedes darme más información acerca de la configuración que has aplicado.

      Saludos

  3. Buenas, me pasa lo mismo, puedo subir hacía arriba, llevo bastante tiempo usando OMV porqué no consigo enjaular correctamente en el debian o raspbian, lo que he conseguido es que no puedan borrar o escribir fuera de su home pero sí leer, te agradecería muchísimo que me orientes en lo que puedo estar haciendo mal, lo estoy probando en raspbian, lo hago todo igual y no me da ningún error en ningún sentido, cuando entro tengo acceso a todo el árbol, no solo a la home. En el archivo de configuración del ftp lo hago todo tal cual, solo que no aparece una linea, que en vez de descomentar tengo que añadir (la última de tu listado).
    Lo dicho quedaría muy agradecido porque es un tema que he probado muchas veces y no consigo hacer.. enhorabuena por el trabajo que hacéis!! sludos!!

    1. Hola Andrés,

      Podrías darme más información de cómo tienen configuradas las directivas a fin de poder descartar errores.
      Si las directivas están correctamente configuradas deberías de poder enjaular al usuario sin problemas.

      Saludos

  4. Yo me conecto con filezilla con SFTP y puedo subir por los directorios hacia arriba.
    Con lo cual esto no esta muy bien enjaulado.

    userlist_deny=YES
    local_root=/mnt/dietpi_userdata
    listen=YES
    listen_ipv6=NO
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    dirmessage_enable=YES
    use_localtime=YES
    connect_from_port_20=YES
    chown_uploads=NO
    #chown_username=whoever
    xferlog_enable=NO
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    idle_session_timeout=60
    data_connection_timeout=30
    #nopriv_user=ftpsecure
    async_abor_enable=NO
    ascii_upload_enable=NO
    ascii_download_enable=NO
    ftpd_banner=DietPi FTP
    #banned_email_file=/etc/vsftpd.banned_emails
    chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd.chroot_list
    allow_writeable_chroot=YES
    ls_recurse_enable=NO
    secure_chroot_dir=/run/vsftpd/empty
    pam_service_name=vsftpd
    rsa_cert_file=/etc/ssl/private/vsftpd.pem

Deja una respuesta

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