FTP con usuarios virtuales

En esta entrada se verá como instalar y configurar vsftpd para trabajar con usuarios virtuales en lugar de usuarios locales.

Instalar paquetería

1
apt-get install vsftpd libpam-pwdfile apache2-utils

Configurar vsftpd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
mkdir /etc/vsftpd/
cp /etc/vsftpd.conf /etc/vsftpd.conf.ori
cat <<EOF>> /etc/vsftpd.conf
# General options
listen=YES
ftpd_banner Welcome to blog.guillen.io webserver
xferlog_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# User options
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
local_root=/var/ftp/pub/
local_umask=022
user_sub_token=root
# Virtual users settings
guest_enable=YES
guest_username=vsftpd
nopriv_user=vsftpd
pam_service_name=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_users_virtualdir
# Directory options
hide_ids=YES
use_localtime=YES
# SSL
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_ciphers=HIGH
rsa_cert_file=/etc/vsftpd/blog.guillen.io.pem
rsa_private_key_file=/etc/vsftpd/blog.guillen.io.pem
# Port to llocate for PASV. Open this port range on firewall
pasv_min_port=29900
pasv_max_port=29999
EOF

Opciones generales

  • listen, si se activa el demonio se ejecutará de forma independiente. Valor por defecto YES
  • ftpd_banner, define el banner a mostrar cuando un usuario se conecta al servidor.
  • xferlog_enable, Si se activa se registrará un log detallado de las conexiones y las acciones llevadas a cabo por los usuarios.
  • vsftpd_log_file, especifica el archivo donde se registrará el log.

Opciones de usuario

  • anonymous_enable, controla si se permite el acceso anónimo.
  • local_enable, controla si se permite el acceso a cuentas de usuarios (/etc/passwd), si no se permite el acceso anónimo debe estar activo incluso si solo se desea usar usuarios virtuales.
  • write_enable, controla si se permiten los comandos FTP que permiten modificaciones en el sistema de archivos, estos comandos son STOR, DELE, RNFR, RNTO, MKD, RMD, APPE y SITE.
  • local_root, define el directorio raíz del FTP.
  • chroot_local_user, define si a los usuarios se les cambia el directorio raíz (chroot) a su directorio principal.
  • local_umask, configura el valor de umask, máscara, para la creación de archivos.
  • user_sub_token, controla si los usuarios virtuales serán encerrados, chroot, en el directorio raíz del FTP, user_sub_token=root, o en un directorio exclusivo para cada usuario, user_sub_token=$USER.
  • nopriv_user, define el usuario bajo el cual correrá el demonio vsftpd.
  • virtual_use_local_privs, controla si los usuarios virtuales tendrán los mismos privilegios que los usuarios locales (YES) o que los usuarios anónimos (NO). Valor por defecto NO.

Opciones de directorio

  • hide_ids, controla si la información relativa al propietario y grupo debe ser mostrada como ftp en el listado de directorios.
  • use_localtime, si se activa el listado de directorios mostrará la hora local en lugar de la hora GMT.

Opciones de SSL

  • ssl_enable, activa conexiones seguras a través de SSL.
  • ssl_tlsv1, controla si se permite el protocolo TLS v1
  • ssl_sslv2, controla si se permite el protocolo SSL v2
  • ssl_sslv3, controla si se permite el protocolo SSL v3
  • allow_anon_ssl, permite que los usuarios anónimos se conecten a través de conexiones seguras. Requiere _ssl_enable=YES_.
  • force_local_logins_ssl, define si se fuerza usar una conexión segura para el envio de contraseñas.
  • force_local_data_ssl, define si se fuerza usar una conexión segura para el envío y recepción de datos.
  • ssl_ciphers, define el cifrado SSL a usar.
  • rsa_cert_file, indica el certificado a usar.
  • rsa_private_key_file, indica la clave privada.

Opciones de firewall

  • pasv_min_port, indica el puerto más bajo a usar en las conexiones en modo pasivo.
  • pasv_max_port, indica el puerto más alto a usar en las conexiones en modo pasivo.

Más información: man vsftpd y Red Hat Enterprise Linux 4: Manual de referencia. Capítulo 15. FTP

Crear el usuario que correrá el servicio vsftpd

1
useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Configurar los permisos

1
2
chmod 555 /var/ftp
chown vsftpd -R /var/ftp

Configurar PAM

1
2
3
4
cat <<EOF>> /etc/pam.d/vsftpd
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftp.users.passwd account required pam_permit.so
#
EOF

Crear usuario ftp virtual

Contraseña insegura (máximo 8 caracteres)

1
2
3
htpasswd -cd /etc/vsftpd/ftp.users.passwd antonio.guillen
New password:
Re-type new password:

Nota: El parámetro -c crea un archivo nuevo, por ello si ya existen usuarios virtuales es necesario omitirlo. En este caso, se presupone que no existen usuarios, por ello se fuerza la creación con el parámetro -c.

Contraseña segura (sin límite de caracteres)

1
htpasswd -pb /etc/vsftpd/ftp.users.passwd antonio.guillen $(openssl passwd -1 -noverify MY-PASSWORD)

Nota: El parámetro -c crea un archivo nuevo, por ello si ya existen usuarios virtuales es necesario omitirlo. En este caso, se presupone que existen usuarios, por ello se omite el uso del parámetro -c.

Indicar el directorio virtual del usuario

1
echo "local_root=/var/www/html/blog.guillen.io/" > vsftpd_users_virtualdir/antonio.guillen

Entradas de interés

Contenidos
  1. 1. Instalar paquetería
  2. 2. Configurar vsftpd
    1. 2.1. Opciones generales
    2. 2.2. Opciones de usuario
    3. 2.3. Opciones de directorio
    4. 2.4. Opciones de SSL
    5. 2.5. Opciones de firewall
  3. 3. Crear el usuario que correrá el servicio vsftpd
  4. 4. Configurar los permisos
  5. 5. Configurar PAM
  6. 6. Crear usuario ftp virtual
    1. 6.1. Contraseña insegura (máximo 8 caracteres)
    2. 6.2. Contraseña segura (sin límite de caracteres)
  7. 7. Indicar el directorio virtual del usuario