Instalar un servicio FTP

Práctica Completa

Esta es la práctica final, centrada en FTP, del tema Servicio de Transferencia de Archivos . Puedes usar cualquier servidor y cualquier sistema operativo. Para ver los pasos que hay que hacer lo he concretado en el uso de vsftpd sobre Debian 10 en la máquina pública cesareo.freeddns.org.

La opción ideal es instalar un servidor ftp de acceso local. Vamos a descartar, por la complejidad con el firewall y los riesgos de seguridad, instalarlo como servicio público.

Requisitos previos

  1. Tienes tu máquina instalada y con acceso remoto (Acceder a un servidor remoto)

  2. Tienes tu servidor FTP ya instalado

> apt-get install vsftpd
  1. Puedes acceder en local (localhost / 127.0.0.1)

> systemctl status vsftpd
(...)
> ftp localhost
(... Código 220 y Banner Bienvenida)

Tareas de Configuración

Uso como raíz del servidor ftp: FTP_DIR=/srv/ftp. Revisa los parámetros de configuración de vsftpd y cambia la configuración poco a poco. Reinicia el servicio para que use la configuración nueva.

  1. El repositorio público estará en $FTP_DIR/pub

anon_root=/srv/ftp/pub  # Para usuario anonymous/ftp
  1. Crea un mensaje de bienvenida: «Hola! Soy un servidor ftp»

ftpd_banner=Hola! Soy un servidor ftp
  1. Permite (o no) que los usuarios puedan ver el listado de los directorios

dirlist_enable=YES
  1. Permite (o no) que los usuarios locales puedan entrar al servidor FTP

local_enable=YES
  1. Fuerza a que los usuarios locales estén enjaulados en su home

chroot_local_user=YES
  1. Crea dos usuarios locales (ftp1 y ftp2)

> adduser --home /home/ftp1 --shell /bin/sh ftp1
> adduser --home /home/ftp2 --shell /bin/sh ftp2

(puedes comprobar con cat /etc/passwd)

Ojo a comprobar los permisos de sus directorios:
> ls -l /srv/ftp/private
  1. Desactiva la posibilidad de subir archivos como usuario anónimo.

anon_upload_enable=NO
  1. Los usuarios no pueden escribir en sus directorios locales

write_enable=NO # Se puede activar y desactivar
  1. Asegúrate con qué usuario está corriendo el servidor (porque los permisos de ese usuario aplica a los directorios)

nopriv_user=ftp
  1. Asegúrate que sabes en qué archivo está el log

xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log # Así puedes revisar con tail -f /var/log/vsftpd (o vía journalctl -u vsftpd).

Comprobar

Y con esto, comprueba el acceso al servidor ftp en local

> ftp localhost

Debe funcionar con los cambios que has hecho (con acceso local).

Ejemplo de archivo /etc/vsftpd

Hay multitud de funcionalidad, y configurarlo en detalle puede ser tedioso. Este es un ejemplo sencillo de archivo /etc/vsftpd

listen=YES
listen_ipv6=NO
anonymous_enable=YES

#local_umask=02
anon_root=/srv/ftp/pub

dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log

idle_session_timeout=600
data_connection_timeout=120

nopriv_user=ftp
ftpd_banner=Hola, Soy un servidor ftp cualquiera

# Configuración Usuarios Locales
local_enable=YES
write_enable=NO
chroot_local_user=YES
allow_writeable_chroot=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list

secure_chroot_dir=/var/run/vsftpd/empty

# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
#ssl_enable=NO

# Configurando en modo pasivo. Recuerda abrir estos puertos en el firewall
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50010

Configuración para Acceso Público

Para poder acceder de forma pública (desde el exterior) necesitas que el servidor escuche en la interfaz de red pública y abrir los puertos en el firewall. En el tema de Asegurar Servicios usaremos transferencia de archivos con FTP para evitar los problemas de seguridad y configuración de usuarios.

Mejor descartarlo y usar otra forma de transferencia de archivos (vía HTTP, SSH, rsync, SFTP o WebDAV).