User FTP Server

El UFTPS o User FTP Server es un pequeño servidor FTP pensado para ser utilizado como usuario no privilegiado para poder realizar transferencias entre ordenadores. En principio, está programado para ser compilado y ejecutado en Linux (usa algunas características propias de este kernel). Si necesitas soluciones alternativas más portables, quizá te interese echarle un vistazo a Canute.

NOTA: Los clientes probados con éxito por el momento han sido LFTP, Firefox, Midnight Commander (modo consola) y Nautilus.

Faltan por testear el WGet y el Konqueror, pero es probable que funcionen también.

Descarga

Compilación e instalación

Para compilar basta con ejecutar make y se creará un ejecutable llamado uftps. Es posible optimizar el binario resultante (a través de flags del compilador) o construir la versión de debug; en cualquiera de estos casos lo más fácil es ejecutar make help donde se mostrará toda la información al respecto.

El resultado de compilar es un único binario llamado uftps. Basta con copiar dicho fichero a algún directorio indicado en el $PATH para poder ejecutarlo desde cualquier parte sin calentamientos de cabeza.

Funcionamiento

Colócate en el directorio desde el cual deseas que tus amigos puedan ver qué tienes y qué se pueden transferir. Desde ahí simplemente ejecuta uftps (siempre que el ejecutable uftps esté en algún directorio del $PATH, no me cansaré de repetirlo). Si resulta que tu puerto TCP 2211 no está disponible puedes seleccionar otro indicándolo como argumento en la línea de comandos.

Desde ese momento tus amigos ya podrán conectarse con su cliente FTP favorito, al puerto que tú hayas indicado, o al puerto 2211 por defecto.

Sintaxis: uftps [puerto_alternativo]

Otros detalles de interés

Limitaciones

El servidor únicamente permite descarga. Las expectativas de implementar subida (o upload) se han descartado por falta de tiempo y mantenimiento. Tampoco hay una motivación clara para portar el servidor a otras plataformas, de momento.

Restricciones de las rutas

Como se comentaba antes, al no requerir autenticación hay que mirar de proteger un poquito la intimidad del ordenador que esté sirviendo. Es decir, sería adecuado que UFTPS trabajara en un entorno chroot. El problema es que esa posibilidad está reservada al usuario root, lo cual vuelve a entrar en conflicto con uno de los principales propósitos de este servidor:

  1. Ejecutarse como usuario normal y corriente.
  2. Carecer de autenticación.

Entonces aparecen riesgos básicamente de dos fuentes. Una es el comando CWD (cambiar de directorio de trabajo), y la otra son las rutas a ficheros indicadas como posible parámetro de los comandos: RETR, LIST, NLST, SIZE y MDTM.

El problema radica en que debemos examinar el parámetro de estos comandos y verificar que dicha ruta no intenta acceder a ningún elemento que esté por encima, en la jerarquía de directorios, del directorio desde el que ejecutamos el servidor. Por lo tanto aplicamos las siguientes restricciones:

Quizá pueda parecer descabellada la segunda restricción, pero resulta que todos los clientes FTP que he probado gestionan por sí mismos el directorio de trabajo. Lo suelen hacer almacenando la ruta absoluta del directorio de trabajo, así cuando tiene que volver al directorio padre lo hacen suministrando una ruta absoluta en lugar de una referencia de tipo “..” que simplifica mucho más la tarea de verificar la seguridad de las rutas.