El documento proporciona información sobre FTP (File Transfer Protocol), incluyendo su definición como un protocolo de red para la transferencia de archivos entre sistemas conectados a una red TCP. También describe los modos activo y pasivo de conexión de un cliente FTP, así como programas que funcionan como servidores FTP como vsftpd, el cual es preferido para Red Hat Enterprise Linux. Finalmente, cubre temas como la instalación, configuración y operación de vsftpd.
2. Definición
FTP (File Transfer Protocol) es un protocolo de red para la
transferencia de archivos entre sistemas conectados a una
red TCP, basado en la arquitectura cliente-servidor. Desde un
equipo cliente se puede conectar a un servidor para
descargar archivos desde él o para enviarle archivos,
independientemente del sistema operativo utilizado en cada
equipo.
3. TCP/IP
El Servicio FTP es ofrecido por
la capa de Aplicación del
modelo de capas de red
TCP/IP al usuario, utilizando
normalmente el puerto de red
20 y el 21. Un problema básico
de FTP es que está pensado
para ofrecer la máxima
velocidad en la conexión,
pero no la máxima seguridad,
ya que todo el intercambio de
información, desde el login y
password del usuario en el
servidor hasta la transferencia
de cualquier archivo, se
realiza en texto plano sin
ningún tipo de cifrado, con lo
que un posible atacante
puede capturar este tráfico,
acceder al servidor, o
apropiarse de los archivos
transferidos.
4. El Modelo FTP
En el modelo, el intérprete de protocolo (PI) de usuario, inicia la conexión de
control en el puerto 21. Las órdenes FTP estándar las genera el PI de usuario y se
transmiten al proceso servidor a través de la conexión de control. Las respuestas
estándar se envían desde el PI del servidor al PI de usuario por la conexión de
control como respuesta a las órdenes.
Estas órdenes FTP especifican parámetros para la conexión de datos (puerto de
datos, modo de transferencia, tipo de representación y estructura) y la naturaleza
de la operación sobre el sistema de archivos (almacenar, recuperar, añadir,
borrar, etc.). El proceso de transferencia de datos (DTP) de usuario u otro proceso
en su lugar, debe esperar a que el servidor inicie la conexión al puerto de datos
especificado (puerto 20 en modo activo o estándar) y transferir los datos en
función de los parámetros que se hayan especificado.
Vemos también en el diagrama que la comunicación entre cliente y servidor es
independiente del sistema de archivos utilizado en cada computadora, de
manera que no importa que sus sistemas operativos sean distintos, porque las
entidades que se comunican entre sí son los PI y los DTP, que usan el mismo
protocolo estandarizado: el FTP.
También hay que destacar que la conexión de datos es bidireccional, es decir, se
puede usar simultáneamente para enviar y para recibir, y no tiene por qué existir
todo el tiempo que dura la conexión FTP
6. Servidor FTP
Un servidor FTP es un programa especial que se ejecuta en
un equipo servidor normalmente conectado a Internet
(aunque puede estar conectado a otros tipos de redes, LAN,
MAN, etc.). Su función es permitir el intercambio de datos
entre diferentes servidores/computadoras.
Por lo general, los programas servidores FTP no suelen
encontrarse en los computadoras personales, por lo que un
usuario normalmente utilizará el FTP para conectarse
remotamente a uno y así intercambiar información con él.
Las aplicaciones más comunes de los servidores FTP suelen
ser el alojamiento web, en el que sus clientes utilizan el
servicio para subir sus páginas web y sus archivos
correspondientes; o como servidor de backup (copia de
seguridad) de los archivos importantes que pueda tener una
empresa. Para ello, existen protocolos de comunicación FTP
para que los datos se transmitan cifrados, como el SFTP
(Secure File Transfer Protocol).
7. Cliente FTP
Cuando un navegador no está equipado con la función FTP, o si
se quiere cargar archivos en una computadoras remota, se
necesitará utilizar un programa cliente FTP. Un cliente FTP es un
programa que se instala en la computadora del usuario, y que
emplea el protocolo FTP para conectarse a un servidor FTP y
transferir archivos, ya sea para descargarlos o para subirlos.
Para utilizar un cliente FTP, se necesita conocer el nombre del
archivo, la computadora en que reside (servidor, en el caso de
descarga de archivos), el ordenador al que se quiere transferir el
archivo (en caso de querer subirlo nosotros al servidor), y la
carpeta en la que se encuentra.
Algunos clientes de FTP básicos en modo consola vienen
integrados en los sistemas operativos, incluyendo Windows, DOS,
Linux y Unix. Sin embargo, hay disponibles clientes con opciones
añadidas e interfaz gráfica. Aunque muchos navegadores
tienen ya integrado FTP, es más confiable a la hora de
conectarse con servidores FTP no anónimos utilizar un programa
cliente.
8. Modos de conexión del cliente FTP
FTP admite dos modos de conexión del cliente. Estos modos
se denominan Activo (o Estándar, o PORT, debido a que el
cliente envía comandos tipo PORT al servidor por el canal de
control al establecer la conexión) y Pasivo (o PASV, porque
en este caso envía comandos tipo PASV). Tanto en el modo
Activo como en el modo Pasivo, el cliente establece una
conexión con el servidor mediante el puerto 21, que
establece el canal de control.
Modo Activo
En modo Activo, el servidor siempre crea el canal de
datos en su puerto 20, mientras que en el lado del cliente
el canal de datos se asocia a un puerto aleatorio mayor
que el 1024. Para ello, el cliente manda un comando
PORT al servidor por el canal de control indicándole ese
número de puerto, de manera que el servidor pueda
abrirle una conexión de datos por donde se transferirán
los archivos y los listados, en el puerto especificado.
Lo anterior tiene un grave problema de seguridad, y es
que la máquina cliente debe estar dispuesta a aceptar
cualquier conexión de entrada en un puerto superior al
1024, con los problemas que ello implica si tenemos el
equipo conectado a una red insegura como Internet. De
hecho, los cortafuegos que se instalen en el equipo para
evitar ataques seguramente rechazarán esas conexiones
aleatorias. Para solucionar esto se desarrolló el modo
Pasivo.
9. Modos de conexión del cliente FTP
Modo Pasivo
Cuando el cliente envía un
comando PASV sobre el canal de
control, el servidor FTP abre un
puerto efímero (cualquiera entre el
1024 y el 5000) e informa de ello al
cliente FTP para que, de esta
manera, sea el cliente quien
conecte con ese puerto del
servidor y así no sea necesario
aceptar conexiones aleatorias
inseguras para realizar la
transferencia de datos.
Antes de cada nueva
transferencia, tanto en el modo
Activo como en el Pasivo, el cliente
debe enviar otra vez un comando
de control (PORT o PASV, según el
modo en el que haya conectado),
y el servidor recibirá esa conexión
de datos en un nuevo puerto
aleatorio (si está en modo pasivo) o
por el puerto 20 (si está en modo
activo).
10. Programas que funcionan como
servidor ftp
AceFTP
CoreFTP
FileZilla
SmartFTP
WS_FTPLE
11. Servidores FTP
Red Hat Enterprise Linux se entrega con dos
servidores FTP diferentes:
Acelerador de Contenidos Red Hat — Un servidor Web
basado en el kernel que ofrece un servidor web y
servicios FTP de alto rendimiento. Puesto que la
velocidad es su objetivo principal de diseño, su
funcionalidad es limitada y solamente se ejecuta como
FTP anónimo. Para más información sobre la
configuración y administración del Acelerador de
Contenidos Red Hat, consulte la documentación
disponible en línea en
http://www.redhat.com/docs/manuals/tux/.
vsftpd — un demonio FTP rápido y seguro, preferido para
Red Hat Enterprise Linux. El resto de este capítulo se
enfoca en vsftpd.
12. vsftpd
El demonio FTP vsftpd (o Very Secure FTP Daemon) está diseñado
desde la base para ser rápido, estable y lo más importante,
seguro. Su habilidad para manejar grandes números de
conexiones de forma eficiente y segura es lo que hace que
vsftpd sea el único FTP independiente distribuido con Red Hat
Enterprise Linux.
El modelo de seguridad utilizado por vsftpd tiene tres aspectos
principales:
Clara separación de procesos privilegiados y sin
privilegios — Procesos separados manejan tareas
diferentes y cada uno de estos procesos se ejecuta con
los privilegios mínimos requeridos para la tarea.
Las tareas que requieren altos privilegios son manejadas
por procesos con los mínimos privilegios necesarios —
Influenciando las compatibilidades encontradas en la
biblioteca libcap, las tareas que usualmente requieren
privilegios de superusuario se pueden ejecutar de forma
más segura desde un proceso menos privilegiado.
13. vsftpd
La mayoría de los procesos se ejecutan enjaulados
en un ambiente chroot — Siempre que sea posible,
se cambia la raíz de los procesos al directorio
compartido; este directorio se considera luego
como la jaula chroot. Por ejemplo, si el directorio
/var/ftp/ es el directorio compartido principal,
vsftpd reasigna /var/ftp/ al nuevo directorio raíz,
conocido como /. Esto previene actividades
maliciosas de cualquier hacker potencial en algún
directorio que no están por debajo del nuevo
directorio root.
14. vsftpd
El uso de estas prácticas de seguridad tiene el efecto
siguiente en cómo vsftpd trata con las peticiones:
El proceso padre se ejecuta con el mínimo de privilegios
requerido — El proceso padre calcula dinámicamente el
nivel de privilegios requerido para minimizar el nivel de
riesgos. Los procesos hijo manejan la interacción directa
con los clientes FTP y se ejecutan casi sin ningún privilegio.
Todas las operaciones que requieren altos privilegios son
manejadas por un pequeño proceso padre — Similar a
Servidor Apache HTTP, vsftpd lanza procesos hijos sin
privilegios para manejar las conexiones entrantes. Esto
permite al proceso padre privilegiado, ser tan pequeño
como sea posible y manejar relativamente pocas tareas.
El proceso padre no confía en ninguna de las peticiones
desde procesos hijos sin privilegios — Las comunicaciones
con procesos hijos se reciben sobre un socket y la validez
de cualquier información desde un proceso hijo es
verificada antes de proceder.
15. vsftpd
La mayor parte de la interacción con clientes FTP la
manejan procesos hijo sin privilegios en una jaula chroot. —
Debido a que estos procesos hijo no tienen privilegios y
solamente tienen acceso al directorio que está siendo
compartido, cualquier proceso fallido solamente permitira
al atacante acceder a los archivos compartidos. — El
proceso padre calcula dinámicamente el nivel de
privilegios requerido para minimizar el nivel de riesgos. Los
procesos hijo manejan la interacción directa con los clientes
FTP y se ejecutan casi sin ningún privilegio.
16. Instalando el Servidor ftp
Para asegurarse que vsftpd esta instalado escribir el
siguiente comando en la terminal
# rpm -qa | grep vsftpd
o
# rpm -q vsftpd
De lo contrario
#yum install vsftpd
o
# rpm -Uvh latest_vsftpd.rpm
17. Archivos instalados con vsftpd
El RPM vsftpd instala el demonio (/usr/sbin/vsftpd), su archivo
de configuración y otros archivos relacionados, así como
también directorios FTP en el sistema.
/etc/rc.d/init.d/vsftpd — El script de inicialización (initscript)
utilizado por el comando /sbin/service para iniciar, detener o
volver a cargar vsftpd
/etc/pam.d/vsftpd — El archivo de configuración de los
Pluggable Authentication Modules (PAM) para vsftpd. Este
archivo define los requerimientos que debe cumplir un usuario
para conectarse a un servidor FTP.
/etc/vsftpd/vsftpd.conf — El archivo de configuración para
vsftpd
/etc/vsftpd/ftpusers — Una lista de los usuarios que no tienen
permitido conectarse a vsftpd. Por defecto esta lista incluye a los
usuarios root, bin y daemon, entre otros.
18. Archivos instalados con vsftpd
/etc/vsftpd/user_list — Este archivo se puede configurar para
negar o permitir el acceso a los usuarios listados,
dependiendo de si la directriz userlist_deny está configurada
a YES (por defecto) o a NO en /etc/vsftpd/vsftpd.conf. Si se
utiliza /etc/vsftpd.user_list para permitir acceso a los usuarios,
los nombres de usuarios listados no deben aparecer en
/etc/vsftpd.ftpusers.
El directorio /var/ftp/ — El directorio que contiene los archivos
servidos por vsftpd. También contiene el directorio
/var/ftp/pub/ para los usuarios anónimos. Ambos directorios
están disponibles para la lectura de todos, pero sólo el
superusuario o root puede escribir en el.
19. Iniciar y detener vsftpd
Para iniciar el servidor, escriba como usuario root, lo siguiente:
#/sbin/service vsftpd start
parar
#/sbin/service vsftpd stop
reiniciar
#/sbin/service vsftpd restart
La opción condrestart (reinicio condicional) solamente
arranca vsftpd si está ejecutándose en ese momento.
Esta opción es muy útil para scripts, puesto que no
arranca el demonio si este no se está ejecutando.
#/sbin/service vsftpd condrestart
20. Opciones de configuración
vsftpd
Toda la configuración de vsftpd es manejada por su archivo de
configuración, /etc/vsftpd/vsftpd.conf. Cada directriz está en su propia
línea dentro del archivo y sigue el formato siguiente:
sintaxis
<directive>=<value>
Para cada directriz, reemplace <directive> con una directriz válida y <value>
con un valor válido.
Importante
No deben existir espacios entre la <directive>, el símbolo de igualdad y el
<value> en una directriz.
Se debe colocar el símbolo de almohadilla (#) antes de una línea en
comentarios. El demonio ignorará cualquier línea en comentarios.
21. Directivas de Opciones de
demonios
La lista siguiente presenta las directrices que controlan el comportamiento general
del demonio vsftpd.
listen — Cuando está activada, vsftpd se ejecuta en modo independiente.
Red Hat Enterprise Linux configura este valor a YES. Esta directriz no se puede
utilizar en conjunto con la directriz listen_ipv6.
El valor predeterminado es NO.
listen_ipv6 — Cuando esta directriz está activada vsftpd se ejecuta en modo
independiente, pero solamente escucha a los sockets IPv6. Esta directriz no se
puede utilizar junto con la directriz listen.
El valor predeterminado es NO.
session_support — Si está activada, vsftpd intentará mantener sesiones de
conexión para cada usuario a través de Pluggable Authentication Modules
(PAM). Si no es necesario hacer sesiones de conexión, el desactivar esta
opción hace que vsftpd se ejecute con menos procesos y privilegios más
bajos.
El valor por defecto es YES.
22. Opciones de conexión y control de
acceso
anonymous_enable — Al estar activada, se permite que los usuarios
anónimos se conecten. Se aceptan los nombres de usuario anonymous y ftp.
El valor por defecto es YES.
banned_email_file — Si la directriz deny_email_enable tiene el valor de YES,
entonces esta directriz especifica el archivo que contiene una lista de
contraseñas de correo anónimas que no tienen permitido acceder al
servidor.
El valor predeterminado es /etc/vsftpd.banned_emails.
banner_file — Especifica un archivo que contiene el texto que se mostrará
cuando se establece una conexión con el servidor. Esta opción se sobrepone
cualquier texto especificado en la directriz ftpd_banner.
Esta directriz no tiene un valor predeterminado.
cmds_allowed — Especifica una lista delimitada por comas de los comandos
FTP que permite el servidor. Se rechaza el resto de los comandos.
Esta directriz no tiene un valor predeterminado.
23. Opciones de conexión y control de
acceso
deny_email_enable — Si está activada, se le niega el acceso al servidor a
cualquier usuario anónimo que utilice contraseñas de correo especificadas
en /etc/vsftpd.banned_emails. Se puede especificar el nombre del archivo al
que esta directriz hace referencia usando la directriz banned_email_file.
El valor predeterminado es NO.
ftpd_banner — Si está activada, se muestra la cadena de caracteres
especificada en esta directriz cuando se establece una conexión con el
servidor. banner_file puede sobreescribir esta opción.
Por defecto, vsftpd muestra su pancarta estándar.
local_enable — Al estar activada, los usuarios locales pueden conectarse al
sistema. El valor por defecto es YES.
pam_service_name — Especifica el nombre de servicio PAM para vsftpd.
El valor predeterminado es ftp, sin embargo, bajo Red Hat Enterprise Linux, el
valor es vsftpd.
tcp_wrappers — Al estar activada, se utilizan TCP wrappers para otorgar
acceso al servidor. También, si el servidor FTP está configurado en múltiples
direcciones IP, la opción VSFTPD_LOAD_CONF se puede utilizar para cargar
diferentes archivos de configuración en la dirección IP solicitada por el cliente.
El valor predeterminado es YES
24. Opciones de conexión y control de
acceso
userlist_deny — Cuando se utiliza en combinación con la directriz
userlist_enable y con el valor de NO, se les niega el acceso a todos los
usuarios locales a menos que sus nombres esten listados en el archivo
especificado por la directriz userlist_file. Puesto que se niega el acceso
antes de que se le pida la contraseña al cliente, al configurar esta
directriz a NO previene a los usuarios locales a proporcionar
contraseñas sin encriptar sobre la red.
El valor por defecto es YES.
userlist_enable — Cuando está activada, se les niega el acceso a los
usuarios listados en el archivo especificado por la directriz userlist_file.
Puesto que se niega el acceso al cliente antes de solicitar la
contraseña, se previene que los usuarios suministren contraseñas sin
encriptar sobre la red.
El valor predeterminado YES.
userlist_file — Especifica el archivo al que vsftpd hace referencia
cuando la directriz userlist_enable está activada. El valor
predeterminado es /etc/vsftpd.user_list y es creado durante la
instalación.
cmds_allowed — Especifica una lista separada por comas de los
comandos FTP que permite el servidor. Cualquier otro comando es
rechazado. Esta directriz no tiene un valor predeterminado.
25. Opciones del usuario local
La siguiente es una lista de las directrices que caracterizan la
forma en que los usuarios locales acceden al servidor. Para
utilizar estas opciones, la directriz local_enable debe estar a
YES.
chmod_enable — Cuando está activada, se permite el comando FTP SITE
CHMOD para los usuarios locales. Este comando permite que los usuarios
cambien los permisos en los archivos.
El valor por defecto es YES.
chroot_list_enable — Cuando está activada, se coloca en una prisión de
chroot a los usuarios locales listados en el archivo especificado en la
directriz chroot_list_file.
Si se utiliza en combinación con la directriz chroot_local_user, los usuarios
locales listados en el archivo especificado en la directriz chroot_list_file, no
se colocan en una prisión chroot luego de conectarse.
El valor predeterminado es NO.
26. Opciones del usuario local
chroot_list_file — Especifica el archivo que contiene una lista de los usuarios
locales a los que se hace referencia cuando la directriz chroot_list_enable está
en YES.
El valor por defecto es /etc/vsftpd.chroot_list.
chroot_local_user — Si está activada, a los usuarios locales se les cambia el
directorio raíz (se hace un chroot) a su directorio principal luego de la conexión.
El valor predeterminado es NO.
Aviso: Al activar chroot_local_user se abren varios problemas de seguridad,
especialmente para los usuarios con privilegios para hacer cargas. Por este
motivo, no se recomienda su uso.
guest_enable — Al estar activada, todos los usuarios anónimos se conectan
como guest, el cual es el usuario local especificado en la directriz
guest_username.
El valor predeterminado es NO.
guest_username — Especifica el nombre de usuario al cual guest está asignado.
El valor por defecto es ftp
27. Opciones del usuario local
local_root — Especifica el directorio al cual vsftpd se cambia después de
que el usuario se conecta.
Esta directriz no tiene un valor predeterminado.
local_umask — Especifica el valor de umask para la creación de archivos.
Observe que el valor por defecto está en forma octal (un sistema
numérico con base ocho), que incluye un prefijo de "0". De lo contrario el
valor es tratado como un valor entero de base 10.
El valor por defecto 022.
passwd_chroot_enable — Cuando se activa junto con la directriz
chroot_local_user, vsftpd cambia la raiz de los usuarios locales basado en
la ocurrencia de /./ en el campo del directorio principal dentro de
/etc/passwd.
El valor predeterminado es NO.
user_config_dir — Especifica la ruta a un directorio que contiene los
archivos de configuración con los nombres de los usuarios locales.
Contiene información específica sobre ese usuario. Cualquier directriz en
el archivo de configuración del usuario ignora aquellas encontradas en
/etc/vsftpd/vsftpd.conf.
Esta directriz no tiene un valor predeterminado
28. Opciones de directorio
La siguiente es una lista de directrices que afectan a los directorios.
dirlist_enable — Al estar activada, los usuarios pueden ver los listados de
directorios.
El valor por defecto es YES.
dirmessage_enable — Al estar activada, cada vez que un usuario entra en
un directorio con un archivo de mensaje. Este mensaje se encuentra
dentro del directorio al que se entra. El nombre de este archivo se
especifica en la directriz message_file y por defecto es .message.
El valor predeterminado es NO, sin embargo, bajo Red Hat Enterprise Linux
el valor está configurado a YES.
force_dot_files — Al estar activada, se listan en los listados de directorios los
mensajes que comienzan con un punto (.), a excepción de los archivos .
y ...
El valor predeterminado es NO.
hide_ids — Cuando está activada, todos los listados de directorios
muestran ftp como el usuario y grupo para cada archivo.
El valor predeterminado es NO.
29. Opciones de directorio
message_file — Especifica el nombre del archivo de mensaje
cuando se utiliza la directriz dirmessage_enable.
El valor predeterminado es .message.
text_userdb_names — Cuando está activado, se utilizan los
nombres de usuarios y grupos en lugar de sus entradas UID o
GID. Al activar esta opción puede que reduzca el rendimiento
del servidor.
El valor predeterminado es NO.
use_localtime — Al estar activada, los listados de directorios
revelan la hora local para el computador en vez de GMT.
El valor predeterminado es NO
30. Opciones de transferencia de
archivos
download_enable — Cuando está activada, se permiten las
descargas de archivos.
El valor por defecto es YES.
chown_uploads — Si está activada, todos los archivos cargados
por los usuarios anónimos pertenecen al usuario especificado en
la directriz chown_username.
El valor predeterminado es NO.
chown_username — Especifica la propiedad de los archivos
cargados anónimamente si está activada la directriz
chown_uploads.
El valor predeterminado es root.
write_enable — Cuando está activada, se permiten los comandos
FTP que pueden modificar el sistema de archivos, tales como
DELE, RNFR y STOR.
El valor por defecto es YES.
31. Opciones de conexión
A continuación se presenta una lista con las directrices que
afectan el comportamiento de conexión de vsftpd.
dual_log_enable — Cuando se activa en conjunto con xferlog_enable,
vsftpd escribe simultáneamente dos archivos: un registro compatible con
wu-ftpd al archivo especificado en la directriz xferlog_file (por defecto
/var/log/xferlog) y un archivo de registro estándar vsftpd especificado en
la directriz vsftpd_log_file (por defecto /var/log/vsftpd.log).
El valor predeterminado es NO.
log_ftp_protocol — Cuando está activado en conjunto con xferlog_enable
y con xferlog_std_format configurada a NO, se registran todos los
comandos y respuestas. Esta directriz es muy útil para propósitos de
depuración.
El valor predeterminado es NO.
syslog_enable — Cuando se activa en conjunto con xferlog_enable, todos
los registros que normalmente se escriben al archivo estándar vsftpd
especificado en la directriz vsftpd_log_file, se envían al registro del sistema
bajo la facilidad FTPD.
El valor predeterminado es NO.
32. Opciones de conexión
vsftpd_log_file — Especifica el archivo de registro de vsftpd. Para que
se utilice este archivo, xferlog_enable debe estar activado y
xferlog_std_format debe ser bien sea NO o, si está en YES, entonces
dual_log_enable debe estar activado. Es importante resaltar que si
syslog_enable está en YES, se utiliza el registro del sistema en lugar del
archivo especificado en esta directriz.
El valor por defecto es /var/log/vsftpd.log.
xferlog_enable — Cuando se activa, vsftpd registra las conexiones
(solamente formato vsftpd) y la información de transferencia, al
archivo de registro especificado en la directriz vsftpd_log_file (por
defecto es /var/log/vsftpd.log). Si xferlog_std_format está
configurada a YES, se registra la información de transferencia de
archivo pero no las conexiones y en su lugar se utiliza el archivo de
registro especificado en xferlog_file (por defecto /var/log/xferlog). Es
importante observar que se utilizan ambos archivos y formatos de
registro si dual_log_enable tiene el valor de YES.
El valor predeterminado es NO, sin embargo, bajo Red Hat Enterprise
Linux el valor está configurado a YES.
33. Opciones de conexión
xferlog_file — Especifica el archivo de registro compatible con wu-
ftpd. Para que se utilice este archivo, xferlog_enable debe estar
activado y xferlog_std_format debe tener el valor de YES. También
se utiliza si dual_log_enable tiene el valor de YES.
El valor por defecto es /var/log/xferlog.
xferlog_std_format — Cuando se activa en combinación con
xferlog_enable, sólo se escribe un archivo de registro compatible
con wu-ftpd al archivo especificado en la directriz xferlog_file (por
defecto /var/log/xferlog). Es importante resaltar que este archivo
solamente registra transferencias de archivos y no las conexiones al
servidor.
El valor predeterminado es NO, sin embargo, bajo Red Hat
Enterprise Linux el valor está configurado a YES.
34. Opciones de red
Lo siguiente lista las directrices que afectan cómo vsftpd interactua con la red.
accept_timeout — Especifica la cantidad de tiempo para un cliente usando
el modo pasivo para establecer una conexión.
El valor por defecto 60.
anon_max_rate — Especifica la cantidad máxima de datos transmitidos por
usuarios anónimos en bytes por segundo.
El valor por defecto es 0, lo que no limita el ratio de transferencia.
connect_from_port_20 — Cuando está activada, vsftpd se ejecuta con
privilegios suficientes para abrir el puerto 20 en el servidor durante las
transferencias de datos en modo activo. Al desactivar esta opción, se permite
que vsftpd se ejecute con menos privilegios, pero puede ser incompatible
con algunos clientes FTP.
El valor predeterminado es NO, sin embargo, bajo Red Hat Enterprise Linux el
valor está configurado a YES.
connect_timeout — Especifica la cantidad máxima de tiempo que un cliente
usando el modo activo tiene para responder a una conexión de datos, en
segundos.
El valor por defecto 60.
35. Opciones de red
data_connection_timeout — Especifica la cantidad máxima de tiempo que las
conexiones se pueden aplazar en segundos. Una vez lanzado, se cierra la
conexión con el cliente remoto.
El valor predeterminado es 300.
ftp_data_port — Especifica el puerto utilizado por las conexiones de datos
activas cuando connect_from_port_20 está configurado a YES.
El valor predeterminado es 20.
idle_session_timeout — Especifica la cantidad máxima de tiempo entre
comandos desde un cliente remoto. Una vez disparado, se cierra la conexión
al cliente remoto.
El valor predeterminado es 300.
listen_address — Especifica la dirección IP en la cual vsftpd escucha por las
conexiones de red.
Esta directriz no tiene un valor predeterminado
listen_address6 — Especifica la dirección IPv6 en la cual vsftpd escucha por
conexiones de red cuando listen_ipv6 está configurada a YES.
Esta directriz no tiene un valor predeterminado.
36. Opciones de red
listen_port — Especifica el puerto en el cual vsftpd escucha por
conexiones de red.
El valor predeterminado es 21.
local_max_rate — Especifica la máxima tasa de transferencia de
datos para los usuarios locales conectados en el servidor en bytes
de segundo.
El valor por defecto es 0, lo que no limita la tasade transferencia.
max_clients — Especifica el número máximo de clientes
simultáneos que tienen permitido conectarse al servidor cuando se
ejecuta en modo independiente. Cualquier conexión adicional
resultará en un mensaje de error.
El valor predeterminado es 0, lo que no limita las conexiones.
max_per_ip — Especifica el máximo número de clientes que tienen
permitido conectarse desde la misma dirección IP fuente.
El valor predeterminado es 0, lo que no limita las conexiones.
37. Opciones de red
pasv_address — Especifica la dirección IP para la IP del lado público del
servidor para los servidores detrás de cortafuegos Network Address
Translation (NAT). Esto permite que vsftpd entregue la dirección correcta
de retorno para las conexiones pasivas.
Esta directriz no tiene un valor predeterminado.
pasv_enable — Cuando está activa, se permiten conexiones en modo
pasivo. El valor por defecto es YES.
pasv_max_port — Especifica el puerto más alto posible enviado a los
clientes FTP para las conexiones en modo pasivo. Esta configuración es
utilizada para limitar el intervalo de puertos para que las reglas del
cortafuegos sean más fáciles de crear.
El valor predeterminado es 0, lo que no limita el rango de puertos pasivos
más alto. El valor no puede exceder de 65535.
pasv_min_port — Especifica el puerto más bajo posible para los clientes
FTP para las conexiones en modo pasivo. Esta configuración es utilizada
para limitar el intervalo de puertos para que las reglas del cortafuego
sean más fáciles de implementar. El valor predeterminado es 0, lo que no
limita el intervalo de puertos pasivos más bajo.
El valor no debe ser menor que 1024.
38. Opciones de red
pasv_promiscuous — Cuando está activada, las conexiones de
datos no son verificadas para asegurarse de que se originan
desde la misma dirección IP. Este valor solamente es útil para
ciertos tipos de tunneling.
Atención no active esta opción a menos que sea absolutamente
necesario ya que desactiva una funcionalidad de seguridad muy
importante la cual verifica que las conexiones en modo pasivo
partan desde la misma dirección IP que la conexìón de control
que inicia la transferencia de datos.
El valor predeterminado es NO.
port_enable — Cuando está activada, se permiten las conexiones
en modo activo.
El valor por defecto es YES.
39. Ejemplo:
si tenemos montado un servidor Web para que los diseñadores y
webmasters puedan dejar allí sus creaciones sin molestar a los
administradores, nosotros. Con este objetivo, vamos a montar un
servidor ftp.
Usuario: client1
Acceso a su directorio: /var/www/dominio1
Sin shell en el sistema y en un entorno chroot
Usuario: client2
Acceso a su directorio: /var/www/dominio2
Sin shell en el sistema y en un entorno chroot
Usuario: webmaster
Acceso a su directorio: /var/www
Sin shell en el sistema y en un entorno chroot
40. Ejemplo:
Preparación del sistema
Antes de instalar el servidor ftp vamos a crear los usuarios y securizarlos para que
tengan los mínimos permisos y sólo puedan hacer lo que nosotros definamos.
Crearemos un grupo llamado ftp al cual asociaremos los usuarios.
# groupadd ftp
Creamos los usuarios con sus correspondientes características.
#useradd -g ftp -d /var/www/dominio1 -c " Cliente 1 " client1
#useradd -g ftp -d /var/www/dominio2 -c " Cliente 2 " client2
#useradd -g ftp -d /var/www -c " webmaster " webmaster
Les asignamos un password a los usuarios con el comando passwd. Si no tiene
password no funcionará.
Ahora creamos una shell fantasma en el directorio correspondiente.
#mkdir /bin/ftp
41. Ejemplo:
Editamos el archivo/etc/shells y la añadimos en la ultima línea
/bin/ftp
Editamos el archivo /etc/passwd y buscamos las líneas donde
están definidos los usuarios que hemos creado antes y les
añadimos el shell falso:
client1:x:501:50: Cliente 1 :/var/www/dominio1:/bin/ftp
client2:x:502:50: Cliente 2 :/var/www/dominio2:/bin/ftp
webmaster:x:503:50: webmaster :/var/www:/bin/ftp
42. Configuración del servidor
El archivo de configuración del servidor se encuentra en
/etc/vsftpd/vsftpd.conf. Lo editamos para configurarlo a nuestro
gusto y objetivo. El contenido es algo parecido, buscamos las líneas
indicadas y las modificamos:
# Example config file /etc/vsftpd/vsftpd.conf
#Escuchando
listen=YES
#
................................................
# Desactivamos el acceso anónimo
anonymous_enable=NO
#
# Descomentamos la línea para que se puedan conectar
local_enable=YES
#
# Permitimos a usuarios locales escribir
write_enable=YES
#
43. Configuración del servidor
# APLICA CONFIGURACIÓN UMASK
local_umask=003
#Mensajes welcome
dirmessage_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
............................
#
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format
xferlog_std_format=YES
44. Configuración del servidor
# Se descomenta esto para crear una jaula
chroot_local_user=YES
# You may specify an explicit list of local users to chroot() to their
home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
#
# Debian customization
# secure_chroot_dir=/var/run/vsftpd
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=NO
45. Configuración del servidor
A continuación creamos el archivo chroot_list el cual tendrá la lista de usuarios que no
tendrán acceso al servidor:
# touch /etc/vsftpd/chroot_list
asignamos los datos a este archivo desde etc/password con el comando.
# cat /etc/passwd | awk -F: '{ print $1 }' > /etc/vsftpd/chroot_list
Esto nos genera un archivo con los login de usuarios del sistema del cual quitamos los que si
queremos que tengan acceso y los ponemos en el archivo /etc/vsftpd/user_list.
Contenido de chroot_list
# usuarios con no acceso
root
daemon
bin
sys
sync
games
man
lp
mail
news
46. Configuración del servidor
vsftpd.user_list
#usuarios con acceso
webmaster
client1
client2
Afinando aún más
Dentro del archivo de configuración (vsftpd.conf) algunas opciones
interesantes que también podemos controlar son las siguientes:
#opciones de transferencia
#ancho banda por usuario anónimo 5kb
anon_max_rate=5100
#ancho de banda por usuario local 5kb
local_max_rate=5100
#número máximo clientes simultáneos
max_clients=5
#máximo conexiones por ip
max_per_ip=2
#envía al sistema
syslog_enable=YES
session_support=YES