1.- INTRODUCCIÓN A VSFTPD
Vsftpd (Very Secure FTP Daemon) es un equipamiento lógico utilizado para implementar servidores de archivos a través del protocolo FTP en sistemas Linux.
Un servidor FTP es un programa que atiende y procesa las conexiones de los clientes FTP y puede acceder al sistema de ficheros del equipo donde está instalado permitiendo la subida y bajada de estos.
FTP es un protocolo de la capa de aplicación diseñado para ofrecer un servicio estándar de transferencia de ficheros entre sistemas conectados a través de redes TCP/IP. El protocolo está descrito en la RFC 959.
Vsftpd se distingue principalmente porque sus valores predeterminados son muy seguros y por su sencillez en la configuración, comparado con otras alternativas como Pure-ftpd, ProFTPD y Wu-ftpd también para sistemas Linux.
También existen otros tipos de servidores para plataformas Linux como, el servidor FTP del IIS, Filezilla Server o Serv-U.
Actualmente se presume que vsftpd podría ser quizá el servidor FTP más seguro del mundo.
2.- INSTALACIÓN DE VSFTP
apt update && apt upgrade
apt install vsftpd
Se crea el usuario ftp dentro del fichero /etc/passwd, y el grupo ftp en /etc/group. Para comprobar que el servidor se ha iniciado:
ps –ef | grep vsftpd
nmap localhost
// a mí personalmente me gusta esta opción más, pero hay que instalar nmap (apt install nmap
)
3.- INICIAR, DETENER Y REINICIAR EL SERVICIO VSFTPD
Iniciar por primera vez el servicio vsftpd:
service vsftpd start
o bien
/etc/init.d/vsftpd start
Reiniciar el servicio vsftpd o bien hacer que los cambios hechos a la configuración surtan efecto:
service vsftpd restart
o bien
/etc/init.d/vsftpd restart
Detener el servicio vsftpd:
service vsftpd stop
o bien
/etc/init.d/vsftpd stop
Estado del servicio vsftpd:
service vsftpd status
o bien
/etc/init.d/vsftpd status
4.- ARCHIVOS DE CONFIGURACIÓN
Archivos y directorios que se crean en el sistema:
- /etc/init.d/vsftpd
- /usr/sbin/vsftpd
- /srv/ftp
Propiedad de root y cuyo grupo es ftp, donde se alojarán los archivos para usuarios anónimos (accesos anónimos).
- /etc/ftpusers
- /etc/vsftpd.conf
Archivo de configuración de VSFTPD. Está muy bien explicado todos los parámetros, siempre que controlemos el inglés.
- /etc/vsftpd.chroot_list
Contiene la lista de los usuarios locales a enjaular.
Este archivo no se instala, por lo cual hay que crearlo antes de comenzar a trabajar con la configuración.
touch /etc/vsftpd.chroot_list
- /etc/vsftpd.user_list
Contiene la lista de los usuarios locales que pueden acceder al servidor.
Este archivo no se instala, por lo cual hay que crearlo antes de comenzar a trabajar con la configuración.
touch /etc/vsftpd.user_list
4.1.- ARCHIVO /ETC/VSFTPD.CONF – OPCIONES POR DEFECTO
Las siguientes opciones son las que vienen por defecto en el fichero de configuración vsftpd.conf, cabe destacar que hay muchas más pero como he comentado estas son las que vienen por defecto.
NOTA IMPORTANTE: ANTES DE EDITAR EL FICHERO REALIZAR UNA COPIA DE SEGURIDAD DEL MISMO
cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
A continuación, analizaremos las opciones a modificar o añadir según se requiera para necesidades particulares.
Cabe destacar que las líneas que comiencen por # son líneas comentadas y por lo tanto no se tendrán en cuenta.
- El archivo tiene la estructura: directiva=valor
- directiva: propiedad u opción que se configura.
- valor: valor que se le asigna a la directiva.
- No debe haber espacios antes ni después del =
- Valores: boolean (YES, NO), números, cadenas.
- El archivo está dividido en diferentes secciones.
listen=YES
Si ponemos a YES es para que vsftpd se inicie con el sistema.
listen_ipv6=YES
Esta opción es para escuchar en un socket IPv6 en lugar de uno IPv4.
anonymous_enable=YES
Se utiliza para definir si se permitirán los accesos anónimos al servidor. Establezca como valor YES o NO de acuerdo a lo que se requiera.
Los usuarios anónimos acceden por defecto al directorio /srv/ftp
local_enable=YES
Establece si se van a permitir los accesos autenticados de los usuarios locales del sistema. Establezca como valor YES o NO de acuerdo a lo que se requiera.
write_enable=YES
Establece si se permite el mandato write (escritura) en el servidor, y no sólo descargar archivos, es decir, no se pueden subir archivos al servidor. Establezca como valor YES o NO de acuerdo a lo que se requiera.
local_umask = 022
Esta máscara hace que cada vez que subas un archivo, sus permisos sean 755. Es lo más típico en servidores FTP.
anon_upload_enable=YES
Específica si los usuarios anónimos tendrán permitido subir contenido al servidor. Por lo general no es una función deseada, por lo que se acostumbra desactivar ésta.
anon_mkdir_write_enable=YES
Específica si los usuarios anónimos tendrán permitido crear directorios en el servidor. Al igual que la anterior, por lo general no es una función deseada, por lo que se acostumbra desactivar ésta.
Mensajes de bienvenida al servidor
Las siguientes opciones van de la mano.
- dirmessage_enable=YES
Esta opción es para activar los mensajes de bienvenida al servidor FTP que se le dan a los usuarios que se conectan.
- ftpd_banner=Welcome to blah FTP service
Sirve para establecer el banderín de bienvenida que será mostrado cada vez que un usuario acceda al servidor. Puede establecerse cualquier frase breve que considere conveniente, pero sin signos de puntuación. Esta opción viene incluida en la configuración predeterminada.
ftpd_banner=Bienvenido al servidor FTP de Los Teatinos
banned_email_file=/etc/vsftpd.banned_emails
use_localtime=YES
Registro de actividad
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
Ubicación del fichero
xferlog_std_format=YES
connect_from_port_20=YES
chown_uploads=YES
chown_username=whoever
idle_session_timeout=600
data_connection_timeout=120
nopriv_user=ftpsecure
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
deny_email_enable=YES
Acceso a usuarios locales
local_enable=YES
// esta opción fue vista ya, no repetir línea de código
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
Estas 4 opciones vienen de la mano.
De modo predeterminado los usuarios del sistema que se autentiquen tendrán acceso a otros directorios del sistema fuera de su directorio personal puesto que la primera directiva está a YES, local_enable=YES
Si se desea limitar a los usuarios a sólo poder utilizar su propio directorio personal, puede hacerse fácilmente con la opción chroot_local_user que habilitará las opciones chroot_list_enable y chroot_list_file, para establecer el archivo con la lista de usuarios locales que se van a enjaular.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
IMPORTANTE: Con lo anterior cada vez que un usuario local se autentique en el servidor FTP, sólo tendrá acceso a su propio directorio personal y lo que éste contenga. Por favor recuerde crear el archivo /etc/vsftpd.chroot_list debido a que de otro modo será imposible que funcione correctamente el servicio vsftpd.
ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
4.2.- ARCHIVO /ETC/VSFTPD.CONF – OPCIONES ADICIONALES
NOTA IMPORTANTE: ANTES DE TOCAR EL FICHERO REALIZAR UNA COPIA DE SEGURIDAD
cp /etc/vsftpd.conf /etc/vsftpd.conf.backup
Las siguientes opciones ya no vienen por defecto incluidas en el archivo de configuración vsftpd.conf, por lo tanto hay, que crearlas. Es aconsejable añadirlas al final del fichero de configuración para tener un fichero más nítido y mejor controlado.
pasv_min_port y pasv_max_port
Permiten establecer el rango arbitrario de puertos utilizados para las conexiones pasivas. Puede elegirse cualquier rango de puertos entre 1024 y 65535, mismo que deberá ser habilitado en el muro cortafuegos del servidor. En el siguiente ejemplo se establece el rango de puertos para conexiones pasivas de 30300 a 30309:
pasv_min_port=30300
pasv_max_port=30309
Control del ancho de banda.
anon_max_rate
Se utiliza para limitar la tasa de transferencia, en bytes por segundo, para los usuarios anónimos, algo sumamente útil en servidores FTP de acceso público. En el siguiente ejemplo se limita la tasa de transferencia a 500 Kb por segundo para los usuarios anónimos:
anon_max_rate=524288
local_max_rate
Hace lo mismo que anon_max_rate, pero aplica para usuarios locales del servidor. En el siguiente ejemplo se limita la tasa de transferencia a 1 MB por segundo para los usuarios locales:
local_max_rate=1048576
max_clients
Establece el número máximo de clientes que podrán acceder simultáneamente hacia el servidor FTP. En el siguiente ejemplo se limitará el acceso a 20 clientes simultáneos.
max_clients=20
max_per_ip
Establece el número máximo de conexiones que se pueden realizar desde una misma dirección IP. Tome en cuenta que algunas redes acceden a través de un servidor intermediario (Proxy) o puerta de enlace y debido a ésto podrían quedar bloqueados innecesariamente algunos accesos. En el siguiente ejemplo se limita el número de conexiones por IP simultáneas a un máximo de 10.
max_per_ip=10
Subida de archivos para usuarios anónimos.
anon_upload_enable=YES
Mensajes de bienvenida personalizados para los diferentes
usuarios.message_file=.mensaje
Tiempos de conexión:
accept_timeout=60
data_connection_timeout=300
idle_session_timeout=300
Añada éstas al final del archivo de configuración.
5.- FICHEROS DE LOG
Por defecto es /var/log/vsftpd.log
Muy útil cuando tenemos errores y no se levanta el vsftpd
6.- ACCESOS AL SERVIDOR
VSFTPD permite 3 tipos de conexión al servidor.
6.1.- ACCESOS ANÓNIMOS
Si se activa el acceso anónimo el directorio por defecto se encuentra en:
/srv/ftp
Para actívalo hay que ir a /etc/vsftpd.conf
anonymous_enable=YES
Para acceder como usuario anónimo al servidor hay que poner:
- Usuario: anonymous, ftp, o dejarlo en blanco.
- Constraseña: en blanco.
Por defecto está configurado para que los usuarios anónimos sólo puedan descargarse ficheros de ese directorio. Además el usuario anónimo se encuentra “enjaulado”, es decir, no pueden salir del directorio por defecto /srv/ftp.
Como ejemplos de servidores anónimos tenemos:
Ejercicio:
Si queremos permitir que los usuarios anónimos puedan subir archivos al servidor tendremos que tener en cuenta que:
- El usuario ftp no debe ser propietario del directorio dónde se suban los ficheros.
- El usuario ftp no debe ser miembro del grupo propietario del directorio dónde se suban los ficheros.
- El directorio anónimo debe tener los permisos de escritura correspondientes para OTROS.
# En Debian el directorio raíz por defecto del servidor FTP, está situado en:
/srv/ftp
# Y dispone de los siguientes permisos:
drwxr-xr-x 2 root ftp 4096 ene 25 03:45 ftp
anonymous_enable=YES // recordar habilitar acceso anónimo
# Si se desea configurar un directorio raíz diferente para el servidor anónimo se usa:
anon_root=/directorio
# Por lo tanto si queremos crear un directorio anónimo pa- ra escritura el TRUCO está en:
# crear una carpeta por ejemplo llamada pub dentro de
/srv/ftp porque si no saldrá el error 500.
mkdir /srv/ftp/pub
# Comprobar que propietario y grupo esté root por ejemplo
chown root:root /srv/ftp/pub
# Y que tenga permisos de RWX en otros para esa carpeta.
chmod 757 /srv/ftp/pub
# No es necesario modificar el anon_root ya que por defec- to está puesto a /srv/ftp
# Si queremos que los ficheros que subamos tengan unos permisos por defecto
# deberemos utilizar la opcion chown_upload_mode # Por defecto está puesta a: -rw (0600)
# Ejemplo:
chown_upload_mode=0666
Si tras realizar esto nos devuelve el error 500, consultar el punto 8. ERRORES COMUNES EN VSFTPS.
6.2.- USUARIOS LOCALES
Hay que tener en cuenta que los usuarios locales son todos lo que se encuentran en el fichero
/etc/passwd con el UID>=1000.
Hay dos posibles opciones de configuración:
- Que no se le “enjaule” en su directorio home, es decir, puede acceder al resto del árbol de directorios.
Con la directiva local_enable=YES ya conseguimos el cometido.
- Que se le “enjaule” en su directorio home, es decir, no tiene disponible el resto de sistema de archivos. Para ello tienen que estar activas la siguiente 4 directivas:
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
La opción chroot_local_user que habilitará las opciones chroot_list_enable y chroot_list_file, para establecer el archivo con la lista de usuarios locales que se van a enjaular.
IMPORTANTE: Con lo anterior cada vez que un usuario local se autentique en el servidor FTP, sólo tendrá acceso a su propio directorio personal y lo que éste contenga. Recuerda crear el archivo /etc/vsftpd.chroot_list, el cual no viene creado por defecto, debido a que de otro modo será imposible que funcione correctamente el servicio vsftpd.
————————— PRÓXIMAMENTE ——————
Para ampliar más acerca de este apartado leer, ENJAULAR A USUARIOS LOCALES EN VSFTPD
———————————————————————————————————–
6.3.- USUARIOS VIRTUALES
Es posible crear cuentas de usuarios virtuales que no existan como usuarios locales del sistema operativo, y por tanto no se nos llene el home con usuarios.
Las cuentas de usuario se almacenan en ficheros, bases de datos (MySQL, Berkeley) o servicios de directorio como LDAP.
Las cuentas virtuales se mapean en un usuario local del sistema.
7.- CONFIGURACIÓN DE UN SERVIDOR SFTP.
Previante hay que instalar el servicio ssh en el servidor.
apt install ssh
8.- ERRORES COMUNES EN VSFTPD
8.1.- 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Este error se da porque vsftpd no permite que los usuarios puedan escribir en su carpeta raíz. Hay 2 posibles soluciones:
- Una solución es quitarle los permisos de escritura a esa carpeta. Esto hará que el usuario no pueda hacer nada en su propia carpeta, así que lo mejor es crearle otra dentro con permisos normales para que pueda utilizarla.
sudo chmod 555 /home/jesus/
sudo mkdir /home/jesus/ftp/
sudo chown jesus:ftp /home/jesus/ftp/
Reiniciar el servicio y funcionará.
Con todo esto ya deberías poder acceder al servidor FTP con el usuario jesus del sistema sin ningún problema.
Como comentamos anteriormente esto ocurre cuando el directorio del usuario donde se hace el chroot tiene permisos de escritura, pero no se establece en el archivo de configuración que se puede escribir en el directorio.
Por tanto, hay que agregar la siguiente línea en el archivo /etc/vsftpd.conf
allow_writeable_chroot=YES