Instalar servidor FTP en linux

Yo soy de los que piensan que hay que instalar lo mínimo posible en un sistema. Me enfrento cada día a servidores y máquinas de usuario que tienen instalado servicios que no se han utilizado nunca.

El software, por muy depurado que esté, no está exento de errores y aunque lo estuviera, cuando instalamos un servicio en un sistema, estamos consumiendo valiosos recursos del sistema y abriendo huecos hacia el exterior.

Antes de todo una pequeña definición extraida de la red de lo que es un servidor FTP:

FTP (siglas en inglés de File Transfer Protocol, Protocolo de Transferencia de Archivos), 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 cliente se puede conectar a un servidor para descargar archivos desde él o para enviarle archivos, independientemente del sistema operativo utilizado en cada equipo.

Ahora procedemos a la instalación y como siempre abrimos un terminal y nos conectamos por ssh al servidor.

Para nuestro propósito vamos a utiliza vsftpd, que es un servidor muy fácil de instalar y configurar.

sudo apt-get install vsftpd

y lo configuramos editando el fichero /etc/vsftpd.conf Tened en cuenta que en otras distribuciones podría cambiar la ubicación de este fichero.

Tenemos varias opciones de configuración como por ejemplo la de habilitar el soporte para IPv6, pero no las vamos a utilizar. En nuestro caso nos interesan las siguientes líneas:

anonymous_enable=YES
Aquí le estamos diciendo al servidor si queremos habilitar las conexiones anónimas. Yo recomiendo deshabilitarlo a no ser que el propósito de nuestro servidor sea ese.

local_enable
Esta línea indica que si se permite o no el acceso de usuarios locales a sus respectivas carpetas privadas. Si se permite el acceso habría que poner local_enable=YES (local_enable=NO en caso contrario).

chroot_local_user
Permite enjaular a los usuarios en su propio directorio. Si deshabilitamos esta opcion con chroot_local_user=NO, el usuario podría acceder a todo el sistema de archivos. Es recomendable activarlo para mejorar la seguridad.

write_enable
Con esta directiva se puede permitir o denegar la subida de ficheros al servidor FTP. Si se permite que los usuarios suban archivos al servidor FTP habría que poner write_enable=YES. Nuevamente dependerá del propósito de nuestro servidor. Si deseamos que los usuarios sólo puedan bajar ficheros, es recomendable desactivar esta opcion.

local_umask
Sirve para establecer los permisos con los que quedará el archivo al subirlo al servidor FTP. local_umask=022 indicará que los permisos de los archivos serán 644, es decir, lectura y escritura para el propietario del fichero, y sólo lectura para el grupo y los demás.

anon_upload_enable
Permite activar la subida de ficheros a los usuarios anónimos.

anon_mkdir_write_enable
Permite la creación de directorios a los usuarios anónimos.

anon_max_rate
Se utiliza para limitar la tasa de transferencia a usuarios anónimos al valor que establezcamos.

local_max_rate
Se utiliza para limitar la tasa de transferencia a los usuarios logueados.

max_clients
Indica el número máximo de cliente que podrán conectarse simultáneamente al servidor.

Una vez que tenemos configurados los principales parámetros de nuestro servidor, debemos especificar los usuarios. Lo normal es crear un nuevo usuario en el sistema, asignarle una contraseña y poco mas, pero debido a la naturaleza del servicio ftp, que está pensado para la transferencia de archivos y no siempre por usuarios de confianza… deberíamos mejorar en este punto la seguridad.

Cuando creamos un nuevo usuario en el sistema, le estamos dando acceso a nuestro servidor, por lo tanto, podría conectarse a nuestro servidor y ejecutar comandos. Para ello, en los siguientes pasos, vamos a crear un usuario, lo vamos a enjaular en una carpeta determinada y vamos a asignarle un shell “fantasma” para que cuando intente conectarse al servidor por otros medios, (por ejemplo ssh) no pueda ejecutar comandos.

useradd usuario -d /ruta/directorio/usuario/
passwd usuario

creamos el shell fantasma

mkdir /bin/ftp

editamos el fichero que tiene la lista de los shells del sistema y añadimos el nuevo:

vi /etc/shells

y añadimos la siguiente linea al final /bin/ftp

Especificamos que el shell para el usuario va a ser /bin/ftp editanto el fichero /etc/passwd (con cuidado)

vi /etc/passwd

buscamos la linea de nuestro usuario y cambiamos /bin/bash o algo parecido por /bin/ftp

Se supone que ya tenemos todo configurado, pero recordad, que hay que indicar en el archivo de configuración de vsftpd que queremos enjaular a los usuarios en su directorio personal.

Si hemos seguido todos los pasos, habremos configurado correctamente un servidor ftp sin problemas, pero seguro que alguno de vosotros quiere dar de alta un usuario ftp que pueda acceder al directorio /var/www por ejemplo para un hosting compartido.

En este caso existen varias alternativas a las que recurren los administradores de sistemas. Que cada uno estudie la que mas le interese;

1) Definimos el directorio del usuario como /var/www/directorio/personal. En este caso también tendríamos que definir correctamente los permisos de lectura y escritura en la carpeta correspondiente. Tened en cuenta que vsftp no permite que la carpeta raiz de usuario tenga permisos de escritura.

2) Montamos con mount –bind en la carpeta personal de usuario la carpeta /www/var/carpetadeusuario y nuevamente asignamos permisos.

Este sistema operativo es tan abierto, que seguro que se os pueden ocurrir mas combinaciones. Dependiendo de cada configuración nos interesarán unas u otras.

Deja un comentario

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