SERVIDOR FTP EN LINUX
vsftpd
ÍNDICE
1. Instalación y configuración por defecto del servidor FTP vsftpd ...................................... 4
2. Clientes FTP ............................................................................................................................. 5
3. Arranque, parada y reinicio del servicio vsftpd ................................................................... 7
4. Permisos.................................................................................................................................... 7
4.1. Permitir a usuarios del sistema descargar información .............................................. 7
4.2. Permitir usuarios del sistema subir y modificar la información. ................................ 7
4.2.1. Recordatorio sobre permisos en Linux ................................................................ 7
4.2.2. Subida y modificación de ficheros ........................................................................ 9
4.3. Evitar salir del home a los usuarios locales ................................................................. 9
4.3.1. Creación de usuarios en Linux............................................................................ 10
4.4. Indicar un único directorio de trabajo para todos los usuarios ................................ 11
4.5. Creación de usuarios virtuales ..................................................................................... 12
4.6. Limitaciones en las conexiones .................................................................................... 12
4.7. Configuración modo pasivo ........................................................................................... 13
4.8. Configuración de SSL sobre FTP. ............................................................................... 14
4.9. Otras opciones de configuración.................................................................................. 15
~2~
~3~
1. Instalación y configuración por defecto del servidor
FTP vsftpd
El programa servidor ftp que utilizaremos en Linux es vsftpd (very secure file
transfer protocol demon).
Podemos realizar su instalación mediante el comando: apt install vsftpd
La gestión y administración del servidor vsftpd se podrá realizar desde su fichero
de configuración, localizado en /etc/vsftpd.conf.
Al instalar el servicio vsftpd por defecto:
El fichero de configuración creado es /etc/vsftpd.conf.
Únicamente se permite la conexión de usuarios anónimos, pudiéndose utilizar
indistintamente anonymous y ftp, sin clave de conexión, que se crean en la
instalación, así como su grupo de pertenencia ftp.
El directorio por defecto para la descarga de los usuarios anónimos del servicio
ftp se localiza en /srv/ftp, cuyo propietario es root y su grupo es ftp.
El directorio de trabajo de usuarios anónimos es /srv/ftp y no pueden salir de él
hacia niveles superiores, aunque si pueden adentrarse en directorio hijos, en
caso de que existieran. Se suele utilizar el término “enjaulado”.
Únicamente disponen de permiso de lectura, por lo que no pueden subir
información al servidor, solamente bajar.
El puerto de atención de peticiones de conexión es el 21.
Crea el archivo /etc/ftpusers con la lista de usuarios que no pueden conectarse
al servicio FTP.
~4~
2. Clientes FTP
Navegador web
El cliente por defecto FTP que podemos utilizar en cualquier sistema operativo es el
navegador web.
Línea de comandos
También se puede acceder al servicio FTP a través de la línea de comandos:
ftp [nombre_maquina | IP]
A continuación se muestran los comandos básicos:
Establecer conexión ftp nombre_servidor o bien ftp IP_servidor
Órdenes generales
help Muestra las órdenes disponibles
? Muestra las órdenes disponibles
help <orden> Muestra ayuda sobre la orden
? <orden> Muestra ayuda sobre la orden
status Muestra el estado actual de la sesión FTP
! <orden> Ejecuta la orden especificada en el equipo local
prompt Activa o desactiva la aparición de mensajes de confirmación cuando se completan las órdenes
ascii Fija el modo de transferencia ascii (texto plano)
binary Fija transferencia en binario (datos, ejecutables, texto con formato…)
passive Activa o desactiva el modo pasivo para la transferencia
Antes de realizar la transferencia, se selecciona el modo de transferencia. En general se
utiliza binary, utilizando ascii en caso de archivos de texto sin formato. Si no se especifica,
el servidor decide el modo más adecuado.
Órdenes para iniciar o terminar una sesión
open <servidor> Inicia una sesión FTP con un servidor remoto, especificado por su dirección IP o su FQDN
close Termina la sesión actual pero no sale del programa
disconnect Termina la sesión actual pero no sale del programa
bye Termina la sesión y sale del programa FTP
quit Termina la sesión y sale del programa FTP
user <nombre> Inicia una sesión FTP con el nombre de usuario indicado
~5~
Órdenes para el manejo de directorios
ls <ruta> Muestra el contenido del directorio especificado en el servidor
dir <ruta> Muestra el contenido del directorio especificado en el servidor
mdir <ruta> Muestra el contenido del directorio especificado en el servidor. Admite caracteres comodín
cd <directorio> Cambio de directorio en el servidor remoto
lcd <directorio> Cambio de directorio en el equipo local
mkdir <directorio> Crea el directorio en el servidor remoto
rmdir <directorio> Elimina el directorio en el servidor remoto
pwd Muestra el directorio actual en el servidor remoto
Órdenes para el manejo de archivos
put <arch1> <arch2> Copia el fichero <arch1> del sistema local en el sistema remoto con nombre
<arch2>
mput <archivos> Copiado de múltiples ficheros desde el sistema local al sistema remoto
get <arch1> <arch2> Copia el fichero <arch1> del sistema remoto en el sistema local con nombre
<arch2>
mget <archivos> Copiado de múltiples ficheros desde el sistema remoto al sistema local
delete <archivo> Elimina el archivo especificado en el servidor remoto
mdelete <archivos> Borrado de múltiples ficheros en el sistema remoto
rename <arch1> <arch2> Cambia el nombre del archivo <arch1> situado en el sistema remoto por <arch2>
Para hacer transferencias múltiples de archivos sin tener que confirmar cada archivo,
primero se ejecuta prompt, y después mget o mput, según corresponda.
Clientes gráficos
En el caso de Linux se pueden instalar varios clientes. A continuación se deja un enlace
donde se explican los diferentes clientes gráficos en Linux:
FTP client list and installation on Ubuntu 20.04 Linux Desktop/Server - Linux Tutorials -
Learn Linux Configuration
En el siguiente enlace se muestran varios clientes gráficos de FTP para Windows/Linux:
7 clientes FTP gratis para Windows, macOS, GNU/Linux, Android e iOS (xataka.com)
~6~
3. Arranque, parada y reinicio del servicio vsftpd
Se debe tener en cuenta que por cada modificación que se hace sobre el fichero
vsftpd.conf se debería reiniciar el servicio vsftpd para que se activen las nuevas
modificaciones.
systemctl stop vsftpd
systemctl start vsftpd
systemctl restart vsftpd
systemctl status vsftpd
4. Permisos
4.1. Permitir a usuarios del sistema descargar información
Los usuarios anónimos se habilitan mediante: anonymous_enable=YES
Para permitir a los usuarios del sistema conectarse deberemos indicar
local_enable=YES, con ello permitimos la conexión al servidor de los usuarios locales
únicamente para bajadas de información y con su home como directorio de trabajo.
4.2. Permitir usuarios del sistema subir y modificar la información.
Antes de hablar de la posibilidad de subir información al servidor, deberíamos
hacer un pequeño recordatorio sobre permisos de fichero y directorio en Linux.
4.2.1. Recordatorio sobre permisos en Linux
Cuando creamos un fichero en Linux, por defecto se le asignan permisos de lectura
y escritura que se pueden representar mediante tres dígitos decimales, donde el primer
dígito se corresponde con el valor asignado al usuario, el segundo al grupo y el tercero al
resto de usuarios.
Ejemplo: Fichero con 640: 6 → Propietario; 4 → Grupo; 0 → Resto de usuarios.
~7~
Los valores numéricos representan algunos de los siguientes valores o su suma, de
tal manera que:
1 → Permiso de ejecución (001)
2 → Permiso de escritura (010)
4 → Permiso de lectura (100)
Sumas de los valores anteriores:
1+2=3 → Permisos de ejecución y escritura.
…
4+2=6 → Permisos de escritura y lectura.
…
Los permisos pueden ser modificados para que se asignen otros distintos a los que
vienen por defecto, para ello utilizaremos el comando umask.
Generalmente el valor por defecto de umask es 022 en casi todas las distribuciones
Linux a nivel de sistema operativo, aunque es configurable. En el caso de los permisos
por defecto en vsftpd, el valor de umask es 077, es decir, los permisos finales de subida
aplicados a los ficheros es 600 (rw-------).
Los permisos por defecto de los ficheros son 666 y los de los directorios 777
partiendo de ésta base, para determinar los permisos de creación de ficheros y de
directorios tenemos que restar los valores de umask de los permisos por defecto del
sistema.
Ejemplos:
Directorios
Permisos por defecto para directorios: 777
Permisos definidos en umask: 022
Operación: restarle el umask a los permisos de defecto: 777 – 022 = 755
Los directorios se crearán con permisos de lectura, escritura y ejecución para el
propietario y solo de lectura y ejecución para el grupo y todos los demás.
Ficheros
Permisos por defecto para ficheros: 666
Permisos definidos en umask: 022
Operación: restarle el umask a los permisos de defecto:
666 – 022 = 644
En el S.O., los ficheros se crearán con permisos de lectura y escritura para el
propietario y solo de lectura para el grupo y todos los demás.
~8~
4.2.2. Subida y modificación de ficheros
Para permitir la subida y modificación de ficheros deberíamos desmarcar dos
líneas:
write_enable=YES, con ello permitimos cualquier operación que conlleve
escritura en el servidor, como subir información, borrarla, renombrarla, crear
directorios, …
local_umask=022, vsftpd incluye por defecto una umask de 077 y con este
comando podemos modificarlo al valor deseado. El valor que incluye en el
ejemplo termina fijando unos permisos tras la subida de 644, con ello
posibilitaremos la creación de directorios y ficheros con los permisos
normalmente utilizados por defecto en todas las distribuciones Linux, es decir:
o Directorios: con control total para el propietario y permisos de lectura
y ejecución para el grupo y todos los demás.
o Ficheros: con permisos de lectura y escritura para el propietario y
lectura para el grupo y todos los demás.
Evidentemente, como administradores del servicio podemos modificar el valor
de local_umask para especificar el deseado en cada caso.
4.3. Evitar salir del home a los usuarios locales
Una opción muy extendida y que añade seguridad el servidor ftp es evitar que los
usuarios puedan salir de su home y navegar libremente por el sistema, con los riesgos
para la seguridad que conlleva. Para ello se utiliza el entorno chroot (jaula chroot) que
viene de change root o cambiar raíz.
Cuando se conecta un usuario local hay dos opciones:
Se conecta como usuario del sistema, en cuyo caso su directorio home es el
suyo propio como usuario del sistema (/home/nombre_usuario) y tiene como
directorio raíz el propio directorio del sistema completo. Este usuario puede
descargarse archivos de todo el sistema de archivos, en función de los
permisos asignados.
~9~
Se conecta como usuario del sistema, pero se le cambia su directorio raíz a
su directorio home, con lo que no tiene disponible el resto del sistema de
archivos. Para ello hay que activar la directiva siguiente:
chroot_local_user=YES
Puede ocurrir que nos interese que algunos usuarios puedan salir de su home
asignado, como para el caso de usuarios administradores u otros. En estas ocasiones
deberíamos indicar que utilice una lista de usuarios a los que se permite salir de su home,
así como el fichero contenedor de dicha lista, para ello deberíamos desmarcar dos líneas:
chroot_list_enable=YES, con lo que especificamos que utilizaremos una lista
para identificar los usuarios a los que evitar salir del home.
chroot_list_file=/etc/vsftpd.chroot_list, para indicar el fichero contenedor de
la lista. Se debe tener en cuenta que se deberá crear dicho fichero de texto
plano y su contenido será el nombre del usuario al que evitar salir. En caso de
querer incluir más usuarios, se especificará su nombre de forma individual en
líneas separadas.
Existe el archivo /etc/ftpusers donde se indican los usuarios a los que no se les
permite utilizar el servicio ftp.
4.3.1. Creación de usuarios en Linux
Para poder especificar usuarios a encerrar y otros para no encerrar debemos tener
más usuarios en el sistema. Para crear usuarios tenemos varias opciones. La más
eficiente y directa es adduser.
sudo useradd -m -g Usuarios -G gestion - s /bin/bash usuario
Explicación:
-m: Crear automáticamente la carpeta del usuario en la carpeta
/Home/<NombreUsuario>
-g: grupo principal al que será agregado
-G: grupos secundarios al que pertenecerá.
-s: shell que utilizara por defecto el usuario.
usuario: Nombre del usuario.
~ 10 ~
Después de este comando queda asignar la contraseña, para ello utilizamos el
comando «passwd».
sudo passwd usuario
La anterior es la forma estándar y recomendada, pero también se puede hacer por
pasos de la siguiente forma.
Creación del usuario:
sudo useradd usuario
Asociación de una contraseña:
sudo passwd usuario
Creación de la carpeta del usuario:
sudo mkdir /Usuarios/Clase1/usuario
Ponemos como propietario de esa carpeta al usuario que hemos creado:
sudo chown usuario:usuario -R /Usuarios/Clase1/usuario
Le asignamos los atributos de «755»:
sudo chmod 755 -R /Usuarios/Clase1/usuario
Asignamos la carpeta al usuario como su carpeta personal:
sudo usermod -d /Usuarios/Clase1/usuario usuario
Ahora únicamente queda asignar a qué grupos va a pertenecer. Esto lo
podemos hacer de dos maneras, mediante el comando «adduser», o editando
el fichero «/etc/group/». Ejemplo con adduser:
sudo adduser usuario grupo
Finalmente, fijamos la shell:
sudo usermod -s /bin/bash
Para comprobar la correcta creación del usuario, podemos ejecutar:
cat /etc/passwd
4.4. Indicar un único directorio de trabajo para todos los usuarios
En algunas ocasiones nos puede interesar que todos los usuarios locales tengan
como directorio de trabajo una misma carpeta del disco, para ello deberemos incluir una
nueva línea que, por comodidad, añadiremos al final del fichero vsftpd.conf:
local_root=ruta_de_la_carpeta.
Ejemplo: local_root=/srv/ftp_local
No sólo debemos añadir la línea indicando la carpeta local en el fichero de
configuración de vsftpd, ya que es necesario crear dicha carpeta con unos permisos
especiales, es decir:
Perteneciente al grupo ftp.
Control total al propietario como al grupo.
Permiso de lectura y ejecución para otros.
Por último, debemos añadir al grupo ftp todos los usuarios del sistema que tendrán
acceso a dicha carpeta.
Nota. En nuestro caso utilizaremos un servidor sin entorno gráfico, por lo que
necesitarás conocer los comandos para crear una carpeta, modificar sus permisos y
añadir usuarios a un grupo concreto.
~ 11 ~
4.5. Creación de usuarios virtuales
vsftpd permite la conexión de usuarios virtuales además de usuarios anónimos y usuarios
locales. Es decir, es posible crear cuentas de usuarios virtuales, que no existen en el
sistema operativo, pero que tienen acceso al servicio ftp.
Se debe crear un grupo controlado por el servicio de vsftpd. Todos los usuarios virtuales
pertenecerán a dicho grupo:
> groupadd grupoftp
Tras ello crear el home donde se va a alojar el usuario:
> mkdir /home/grupoftp/usuario
Crear un shell virtual o fantasma, para que los usuarios no puedan conectarse a una
sesión del sistema operativo.
> mkdir /bin/grupoftp
Tras ello editar el siguiente archivo:
> nano /etc/shells
Agregar al final del archivo /etc/shells.
/bin/grupoftp
Crear usuarios para nuestro servicio ftp mediante el siguiente comando:
> useradd -g ftp -d /home/grupoftp/usuario -s /bin/grupoftp usuario
Agregarle una contraseña al usuario creado:
> passwd usuario
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
>
Darle permiso al usuario pueda ser el dueño de su home:.
> cd /home/grupoftp
> chown usuario.grupoftp usuario/
Ya puede acceder el usuario virtual usuario al servicio FTP.
4.6. Limitaciones en las conexiones
En el servidor vsftpd se pueden establecer varias limitaciones sobre las conexiones o
sesiones establecidas por los clientes. Vamos a ver varios ejemplos de limitaciones y las
directivas necesarias para realizarlas.
Puedes comprobar que se pueden establecer varias sesiones simultáneas con un mismo
servidor, incluso desde una misma máquina cliente. Para limitar a tres el máximo de
conexiones realizadas desde una misma dirección IP de cliente y que puedan establecer
conexiones simultáneas un máximo de diez clientes:
~ 12 ~
Para limitar la máxima velocidad de transferencia de los usuarios anónimos a 20
KBytes/seg y de los usuarios locales a 50 Kbytes/seg:
Para establecer que se desconecte a un cliente, si está inactivo durante seis minutos:
Durante una transferencia de un archivo grande, se transfieren varios bloques de datos.
Puede establecerse una limitación para que cuando haya inactividad excesiva durante
una transferencia se cancele la transferencia. Para especificar que el tiempo máximo de
inactividad durante una transferencia sea de 2 minutos:
Para establecer en 20 segundos el tiempo máximo que un cliente tiene para responder a
una conexión activa:
Para listar recursivamente dentro de un directorio (muestra el contenido de todos los
subdirectorios a partir de la carpeta donde está situado el usuario):
ls_recurse_enable=YES
Para habilitar que se pueda visualizar un mensaje cuando entras a un directorio:
dirmessage_enable=YES
Para ello se debe crear un archivo (del nombre que se quiera, en este caso .mensaje),
dentro del directorio en el que al hacer el cambio se va a mostrar el mensaje. Tras hacerlo
indicar en vsftpd.conf el fichero que contiene el mensaje:
message_file=.mensaje
4.7. Configuración modo pasivo
Es necesario habilitar una serie de directivas en el fichero de configuración para poder
habilitar el modo pasivo en el servidor (puertos > 1024):
pasv_enable=YES
pasv_min_port=puertoInicio
pasv_max_port=puertoFin
pasv_address=IPServidor
listen=YES
listen_ipv6=NO
Desde el cliente, por línea de comandos:
Una vez configurado el servidor, cuando el cliente quiera activar/desactivar el modo
pasivo para la transferencia de datos deberá usar el comando passive:
~ 13 ~
El puerto elegido en este caso para la transferencia de datos es 39*256+38=10022
Para conectarnos en modo pasivo desde un cliente Linux:
ftp -p servidor
Para conectarnos en Windows en modo pasivo:
ftp servidor
ftp> quote pasv
4.8. Configuración de SSL sobre FTP.
Vamos a configurar vsftpd para que acepte conexiones seguras (TLS/SSL/SFTP)
¿Por qué es tan importante que el servidor acepte conexiones seguras? El protocolo FTP,
aunque muy práctico no codifica los datos ni siquiera de los credenciales del usuario. El
hecho de que alguien pudiera capturar un paquete en la ruta, sería muy grave para la
seguridad del sistema, tened en cuenta que los servicios de FTP normalmente tienen
acceso a datos relevantes. La solución es utilizar un protocolo seguro.
SSL sobre FTP
Lo primero que debemos hacer es instalar ssh: apt-get install openssh
Tras ello debemos generar un certificado que almacenaremos en /etc/vsftpd y le daremos
un tiempo de vida de un año (365 días). La instrucción es la siguiente:
> openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
Ahora sólo nos queda modificar el fichero de configuración. Probablemente no estarán las
siguientes líneas escritas, por lo que podéis añadirlas al final del mismo.
~ 14 ~
Tras reiniciar el servicio ya podemos conectarnos. Deberemos indicarle a nuestro cliente
de FTP los mismos datos que antes pero escogiendo:
Tipo de servidor: SFTP, SSH FTP
Puerto: 22
4.9. Otras opciones de configuración.
Existen otras muchas posibilidades de configuración para lo que se debería
consultar el manual de Linux sobre vsftpd.conf, mediante el comando:
man vsftpd.conf
También podemos consultar el manual online en la siguiente página:
http://vsftpd.beasts.org/vsftpd_conf.html
~ 15 ~