Instalación y configuración de VSFTPD

FTP

Es un protocolo TCP para carga y descarga de archivos. Trabaja sobre el modelo cliente/servidor. El demonio FTP escucha continuamente peticiones de clientes remotos. FTP gestiona el login y ajusta la conexión.

Hay dos modos de acceso:
  • Anónimo
  • Autenticado
En el modo anónimo los clientes pueden acceder usando una cuenta predeterminada llamada "anonymous" o "ftp", y enviando un emailaddress como contraseña.
En el modo autenticado un usuario debe tener una cuenta y una contraseña.
El usuario accede a los directorios y archivos del servidor FTP dependiendo de los permisos definidos en la cuenta usada como login. Como norma general, el demonio FTP ocultará el directorio root al servidor FTP y lo cambiará por el directorio Home. Esto oculta el resto del sistema de archivos.

Instalación del demonio

vsftpd es un demonio disponible. Es fácil de instalar, ajustar y mantener.

sudo apt-get install vsftpd

Configuración con usuario autenticado

Para permitirles la carga de archivos edita /etc/vsftpd.conf:

local_enable=YES
write_enable=YES

Ahora reinicia el demonio:

sudo /etc/init.d/vsftpd restart


Ahora cuando los usuarios hagan login arrancarán en su directorio home donde ellos pueden descargar, cargar, crear directorios, etc..

Por defecto, los usuarios anónimos no se les permite la carga de archivos. Cambiar esto puede suponer un riesgo de seguridad extremo.

El archivo de configuración varios parámetros configurables. La información sobre cada parámetro se encuentra en el propio archivo de configuración. También puedes consultar man 5 vsftpd.conf.

Antes de editar el archivo vsftpd.conf de configuración, es recomendable hacer una copia vsftpd.conf.original

Asegurando FTP


Hay opciones en /etc/vsftpd.conf para ayudarte a asegurar el demonio. Por ejemplo, los usuarios pueden estar limitados a su home descomentando:

chroot_local_user=YES

Tambien puedes limitar un lista especifica de usuarios:

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Después de descomentar lo de arriba, crea una /etc/vsftpd.chroot_list conteniendo una lista de usuarios, uno por linea. Luego reinicia el demonio:

sudo /etc/init.d/vsftpd restart


También, el archivo /etc/ftpusers es una lista de usuarios que tienen el acceso no permitido. La lista predeterminada incluye root, daemon, nobody, etc. Para discapacitar usuarios simplemente añadelos a la lista.

FTP puede encriptar usando FTPS. FTPS es diferente de SFTP. FTPS es FTP sobre SSL. SFTP es FTP con conexión encriptada SSH. Los usuarios de SFTP necesitan tener una cuenta shell en el sistema. Proveer a todos los usuarios de una shell puede no ser ideal para algunos entornos, tales como webhost compartido.

Para configurar FTPS edita /etc/vsftpd.conf y añade al fondo:

ssl_enable=Yes

Ajusta las opciones de certificado y clave relacionadas:

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Por defecto, son las provistas por el paquete ssl-cert. En un entorno de producción debes sustituirlo por certificado y clave generado por el host especifico.

Reinicia el demonio:

sudo /etc/init.d/vsftpd restart


Para permitir que los usuarios con una shell de /usr/sbin/nologin accedan a FTP, pero que no tengan acceso de shell, edita /etc/shells añadiendo el nologin shell.

Esto es necesario porque, por defecto, vsftpd usa PAM para autenticación, y el /etc/pam.d/vsftpd contiene:

auth    required    pam_shells.so

El módulo PAM de shells restringe el acceso a las shells listadas en /etc/shells.

La mayoría de los populares clientes de FTP pueden ser configurados para conectarse a través de FTPS. El cliente FTP de linea de comandos lftp tiene la habilidad de usar FTPS también.

Ejemplo configuración del archivo vsftpd.conf para copypaste:

Configuración para usuarios locales:

write_enable=YES
dirmessage_enable=YES
ftpd_banner=Bienvenido a FTP!
connect_from_port_20=YES
idle_session_timeout=600
data_connection_timeout=120
pasv_enable=YES
pam_service_name=vsftp
listen=YES
max_clients=5
max_per_ip=5
pasv_min_port=40000
pasv_max_port=40020

#Acceso usuarios locales
local_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

#Ajustes de log
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
log_ftp_protocol=YES

Acceso anónimo sólo descarga:

Ejecutar en consola:

sudo /etc/init.d/vsftpd stop
cd /var/run/vsftpd
sudo mkdir anonimo
sudo chmod 755 anonimo
sudo chown root:root anonimo
sudo touch anonimo/prueba.txt
sudo vim /etc/vsftpd.conf

Ahora editamos el archivo de configuración:

anonymous_enable=YES
anon_root=/var/run/vsftpd/anonimo
anon_world_readable_only=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_max_rate=2048

#si queremos impedir el acceso a usuarios locales modificamos la variable local_enable
local_enable=NO

Configuración con usuarios virtuales:

anonymous_enable=NO
local_enable=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.deny_list

Ahora debemos crear la lista de usuarios bloqueados

sudo vim /etc/vsftpd.deny_list