Servidor FTP. El protocolo FTP (File Transfer Protocol) es una de las herramientas más usadas entorno a la administración de portales web y tiene como principal función la transferencia de archivos. Esta transacción puede ser efectuada desde una LAN (Red de área local) o en una WAN (Red de área amplia).
El protocolo FTP está basado principalmente en la arquitectura Cliente-Servidor, la cual consiste básicamente en un programa “Cliente” que realiza peticiones a otro programa “Servidor” el cual responde a su petición. Visto de otra forma podemos entenderlo como el equipo cliente que se conecta al servidor para descargar archivos desde el o para enviarle archivos.
FTP hace uso del modelo TCP/IP y trabaja directamente sobre la capa de aplicación del antes mencionado.
Así mismo el protocolo FTP hace uso de los puertos 20 y 21 para la comunicación y control de datos. 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 mediante la ayuda de un sniffer y acceder al servidor.
Una forma de solucionar este gran problema de seguridad es mediante la utilización de aplicaciones como “SCP” y el “SFTP”, los cuales permiten transferir archivos pero cifrando el tráfico. Por lo general, estas aplicaciones son incluidas en el paquete de openSSH, tema que veremos más adelante.
Funcionamiento del Protocolo FTP
Generalmente se origina cuando el cliente FTP envía la petición al servidor para indicarle que requiere establecer una comunicación con él, entonces el cliente FTP inicia la conexión hacia el servidor FTP mediante el puerto 21 el cual establecerá un canal de control. A partir de este punto, el cliente FTP enviará al servidor las acciones que este debe ejecutar para poder llevar a cabo el envío de datos. Estas acciones incluyen parámetros para la conexión de datos, así como también la manera en como serán gestionados y tratados estos datos.
Algunos de los parámetros enviados por el cliente FTP para la conexión de datos son los siguientes:
- Puerto de datos
- Modo de transferencia
- Tipo de representación y estructura.
Los parámetros relacionados a la gestión de datos son los siguientes:
- Almacenar
- Recuperar
- Añadir
- Borrar
- Obtener.
El proceso de transferencia de datos desde el servidor hacia el cliente deberá esperar a que el servidor inicie la conexión al puerto de datos especificado (en modo activo) y luego de ello transferir los datos en función a los parámetros de conexión especificados anteriormente.
Modos de conexión del cliente en un servidor FTP
FTP establecerá dos modos de conexión diferentes para el cliente: el modo activo y el modo pasivo.
Modo Activo
El modo activo generalmente es conocido también como modo estándar y este opera de la siguiente forma.
Se establecen dos conexiones distintas, la primera conexión establece una comunicación para la transmisión de comandos a través de un puerto aleatorio mayor que el 1024 del cliente FTP hacia el puerto 21 del servidor FTP y por esa misma conexión se le notifica al servidor FTP cuál es el puerto de nuestro cliente FTP, quien está a la espera de los datos.
Entonces y para comprender mejor, si usted descarga algún archivo mediante la ayuda de algún cliente de FTP, es el servidor FTP el que inicia la transmisión de datos, desde su puerto 20 al puerto que aleatoriamente el cliente FTP le ha indicado. Se le llama modo activo porque la transmisión de datos es iniciada por el propio servidor FTP.
Modo Pasivo
Esto se logra cuando el cliente FTP inicia la conexión con el servidor FTP mediante el envío del comando PASV. En este punto, el cliente FTP establece una comunicación mediante un canal de control, el cual generalmente utiliza un puerto aleatorio mayor al 1024 para comunicarse con el servidor FTP a través de su puerto 21.
Al pasar a modo pasivo el cliente FTP pedirá al servidor FTP que habrá un puerto, el cual deberá ser aleatorio y mayor al 1024, recibida la contestación, será el cliente FTP el que establezca la conexión de datos al servidor FTP a través del puerto especificado anteriormente.
Modo Activo vs Modo Pasivo
Como hemos explicado antes, en el modo activo se abre una conexión para datos desde el servidor FTP al cliente FTP, esto es, una conexión de fuera hacia adentro, entonces, si el cliente FTP se encuentra detrás de un firewall, este filtrara o bloqueara la conexión entrante.
En el modo pasivo, el cliente FTP es el que inicia tanto la conexión de control como la de datos, con lo cual el firewall no tendrá ninguna conexión entrante que filtrar.
Modos de acceso del cliente FTP
Un cliente FTP es la aplicación o software que servirá de intermediario entre el servidor FTP y nuestro equipo. Asimismo, existen dos versiones de clientes FTP, los gráficos y los que se usan a línea de comandos.
En la mayoría de los casos se implementaran clientes gráficos de FTP esto debido a que son mas fáciles y sencillos de manejar por el usuario. Nosotros recomendamos usar el cliente FTP FileZilla.
FileZilla es un cliente FTP, gratuito, multiplataforma , libre y de código abierto. Sustenta los protocolos FTP, SFTP y SFTP.
A su vez, los clientes FTP pueden acceder a los servidores FTP de tres formas distintas. Estas son:
- El Acceso Anónimo
- Acceso de Usuario
- Acceso de Invitado.
Acceso Anónimo
El acceso anónimo a un servidor FTP se caracteriza porque este no pide ningún tipo de autenticación al cliente FTP (login y password) para entrar en él. Generalmente, este tipo de accesos son implementados para que cualquier usuario tenga acceso a los recursos que ahí se comparten, los cuales normalmente solo pueden ser leídos o copiados, restringiendo a los usuarios la función de crear o modificar dichos recursos.
Acceso de Usuario
Este tipo de acceso se caracteriza porque este sí requiere autenticación del cliente FTP (login y password) ante el servidor FTP. Generalmente estos accesos son implementados para un grupo selecto de usuarios, los cuales tendrán ciertos privilegios sobre los recursos del servidor como podría ser modificar, eliminar, crear, subir o descargar archivos o carpetas.
Otra característica de este acceso es que permite al usuario FTP acceder a cualquier parte del sistema operativo, lo cual es un grave fallo de seguridad.
Acceso de Invitado
El acceso de invitado bien podría ser un híbrido entre el acceso anónimo y el acceso de usuario, ya que en este tipo de acceso de requiere autenticación del cliente FTP (login y password) ante el servidor FTP. Lo que lo diferencia de los últimos dos es que el usuario FTP solo podrá trabajar en un directorio de trabajo destinado exclusivamente para él, evitando así que el este tenga acceso a otras partes del sistema operativo. (Pero sin restringir los privilegios que tiene sobre su propio directorio de trabajo).
Proceso de instalación del servidor FTP
Instalando VSFTPD
La instalación de VSFTPD es relativamente sencilla, solo debe teclear en terminal el siguiente comando:
[root@ localhost ~]# yum install -y vsftpd
Recuerde que este comando se debe ejecutar como root.
Archivos de configuración de VSFTPD
La configuración de VSFTPD se realizará sobre dos ficheros distintos, uno de configuración general propio de VSFTPD y otro para especificar al servidor FTP los usuarios que harán uso del acceso de invitado.
El primer fichero de configuración de VSFTPD lo encontramos en la siguiente ruta:
/etc/vsftpd/vsftpd.conf
El segundo fichero de configuración debe ser creado por usted mismo ya que de otra forma nunca podrá especificar al servidor FTP los usuarios que harán uso del acceso de invitado. La ruta en la que se debe crear dicho fichero es la siguiente:
/etc/vsftpd
Y será nombrado con el nombre siguiente:
chroot_list
A este fichero deberán ser agregados los nombres de los usuarios de FTP que trabajarán en su directorio de trabajo. De esta manera se restringe a estos usuarios el acceso a otras partes del sistema operativo. Cualquier otro usuario no agregado a este archivo podrá acceder a cualquier parte del sistema operativo, lo cual es un grave fallo de seguridad.
Al final nuestros archivos deberán estar ubicados en las siguientes ruta:
/etc/vsftpd/vsftpd.conf ---> Fichero de configuración propio de VSFTPD
/etc/vsftpd/chroot_list ---> Fichero que definirá los usuarios
que harán uso del acceso de invitado
[RECUERDE QUE ESTE FICHERO DEBE SER
GENERADO POR USTED]
El siguiente paso sera editar y configurar los ficheros que previamente creamos.
Configuración del fichero vsftpd.conf
Para llevar a cabo la configuración de este fichero le recomendamos usar el editor de textos VIM. A continuación le presentamos las diferentes opciones que pueden ser habilitadas o negadas en el fichero de configuración vsftpd.conf
Habilitando o negando accesos anónimos al servidor FTP
Al haber abierto el fichero, trate de buscar la línea siguiente:
anonymous_enable=YES|NO
Para habilitar el acceso anónimo al servidor FTP solo deberá teclear la palabra YES, caso contrario si usted desea tener deshabilitada esta opción solo deberá teclear la palabra NO.
Habilitar o negar autenticarse a los usuarios
Para habilitar o negar los accesos autenticados de los usuarios locales en el servidor FTP deberá buscar la siguiente linea:
local_enable=YES|NO
Deberá teclear la palabra YES para habilitar la autenticación. En caso contrario, si usted desea tener deshabilitada esta opción, solo deberá teclear la palabra NO.
Habilitar o negar la escritura en el servidor FTP
Para habilitar o negar la escritura en el servidor FTP, deberá buscar la siguiente línea:
write_enable=YES|NO
Una vez ubicada esta línea, recuerde borrar (si es que está) el signo de número (#) para habilitar esta función. Establezca el valor YES o NO de acuerdo a lo que se requiera.
Estableciendo un mensaje de bienvenida en el servidor FTP
Este parámetro sirve para establecer un mensaje de bienvenida el cual será mostrado cada vez que un usuario acceda al servidor de archivos.
Una vez ubicada esta línea, recuerde borrar el signo de número (#) para habilitar esta función.
Para agregar este mensaje al servidor FTP, deberá buscar la siguiente línea y editarla.
ftpd_banner=Bienvenido al Servidor FTP de Linux Para Todos
Habilitar el acceso de invitado para ciertos usuarios de FTP
Para limitar a los usuarios a trabajar en su propia carpeta de trabajo, se deberán editar las siguientes líneas del fichero “vsftpd.conf”:
chroot_list_enable=YES |NO
Una vez ubicada esta línea recuerde borrar (si es que está) el signo de número (#) para habilitar esta función.
Habilitar este parámetro indicara al servidor FTP que el usuario solo podrá trabajar dentro de su carpeta de trabajo. Para ello, solo habrá que teclear la palabra YES. En caso contrario, use la palabra NO. El siguiente parámetro se encuentra en función del anterior, de forma que si usted lo habilitó, también tendrá que habilitar este último, para ello solo deberá borrar el “#”.
chroot_list_file=/etc/vsftpd/chroot_list
Luego, está el siguiente parámetro:
/etc/vsftpd/chroot_list
Este indica la ruta en la cual se encuentra el fichero con los nombres de los usuarios que serán limitados a trabajar en su propia carpeta de trabajo.
Recuerde que usted creó previamente este fichero.
Recuerde que usted creo previamente este fichero
Habilitar al usuario anónimo la función de subir contenido al servidor FTP
Para habilitar o negar al usuario anónimo el subir datos al servidor FTP deberá buscar la siguiente linea:
anon_upload_enable=YES|NO
Una vez ubicada esta linea recuerde borrar ( si es que esta ) el signo de numero (#) para habilitar esta función.
Establezca el valor YES o NO de acuerdo a lo que se requiera.
Habilitar al usuario anónimo la función de crear carpetas en servidor FTP
Para habilitar o negar al usuario crear carpetas en servidor FTP deberá buscar la siguiente linea:
anon_mkdir_write_enable=YES|NO
Una vez ubicada esta línea recuerde borrar (si es que está) el signo de número (#) para habilitar esta función.
Establezca el valor YES o NO de acuerdo a lo que se requiera.
Estableciendo permisos de escritura, lectura y ejecución al contenido albergado en el servidor FTP
La siguiente línea indica que los archivos subidos al servidor quedarán con los permisos 022, es decir, sólo escritura para el grupo y los demás.
local_umask=022
Si deseas agregar otro tipo de permisos sobre el contenido que será albergado en tu servidor FTP solo deberás modificar el valor 022 por el que tu creas más conveniente. Nosotros recomendamos usar el permiso “664”:
local_umask=664
Es decir, lectura y escritura para el propietario del fichero, y solo lectura para el grupo y los demás.
Limitando la tasa de transferencia a los usuarios anónimos
Usted puede limitar la tasa de transferencia (en bytes) para los usuarios anónimos, solamente deberá agregar la siguiente línea al final del archivo:
anon_max_rate=10240
Como podemos observar, hemos limitado la tasa de transferencia a solo 10 Kb para los usuarios anónimos, usted podrá definir ese parámetro de acuerdo a sus necesidades.
Limitando la tasa de transferencia a los usuarios autenticados
Usted puede limitar la tasa de transferencia (en bytes) para los usuarios anónimos. Para ello, solamente deberá agregar la siguiente línea al final del archivo:
local_max_rate=10240
Limitando el número de conexiones hacia el servidor FTP
Usted podrá establecer un numero máximo de conexiones que podrán acceder simultáneamente al servidor FTP, para ello solo habrá que añadir la siguiente linea al final de archivo.
max_clients=3
Como podemos observar hemos limitado el acceso a solamente 3 clientes FTP.
Limitando el número de conexiones por IP hacia el servidor FTP
Usted podrá establecer un numero máximo de conexiones desde una misma dirección IP que podrán acceder simultáneamente al servidor FTP, para ello solo habrá que añadir la siguiente linea al final de archivo.
max_per_ip=3
Como podemos observar hemos limitado el acceso a simultaneo a solamente 3 IP´s.
Configuración del fichero chroot_list
La configuración de este fichero es relativamente fácil. Solo deberá añadir dentro de él los nombres de los usuarios que serán limitados a trabajar dentro de su carpeta personal de trabajo.
Ejemplo:
[root@ localhost ~]# vim /etc/vsftpd/chroot_list
paty
angelica
erika
viridiana
iliana
regina
"chroot_list"
Al terminar solo deberá guardar los cambios hechos al fichero.
Iniciar, detener o reiniciar el servidor FTP
Para iniciar el servidor FTP por primera vez solo deberá teclear en terminal el siguiente comando:
[root@ localhost ~]# /etc/init.d/vsftpd start
Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el status en el que se encuentra el servidor FTP. Estas opciones pueden ser consultadas en la siguiente tabla:
star | Inicia el servicio |
stop | Detiene el servicio |
restart | Reinicia el servicio.-La diferencia con reload radica en que al ejecutar un restart este mata todos los procesos relacionado con el servicio y los vuelve a generar de nueva cuenta |
reload | Recarga el servicio.-La diferencia con restart radica en que al ejecutar un reload este solamente carga las actualizaciones hechas al fichero de configuración del servicio sin necesidad de matar los procesos relacionados con el mismo, por lo que podría entenderse que hace el cambio en caliente. |
condrestart | Reinicio Condicional.- Solamente se inicia si el servicio se encuentra ejecutándose. |
status | Da a conocer el estado en el que se encuentra el servicio |
Como alternativa también podemos ocupar el siguiente comando para iniciar el servidor FTP
[root@ localhost ~]# service vsftpd start
Y de igual manera podemos usar las opciones antes descritas en la tabla anterior.
Recuerde que estos comandos se ejecutan como root.
Creación de cuentas de usuario en el servidor FTP
Crear cuentas de usuario en el servidor FTP es un proceso muy parecido a dar de alta usuarios en Linux.
La sintaxis general para dar de alta usuarios es la siguiente:
servidor FTP
Adicionalmente se tiene que asignar una contraseña al usuario FTP.
[root@ localhost ~]# passwd sistemas
Cambiando la contraseña del usuario .
Nueva UNIX contraseña: xxxxxxxxxx
Vuelva a escribir la nueva UNIX contraseña:xxxxxxxxxx
passwd: todos los tokens de autenticación se actualizaron exitosamente.
Ejemplo:
[root@ localhost ~]# useradd -d /home/ftp/javier -s /sbin/nologin \ >
cual_quier_nombre
Explicación:
Como podemos observar, estamos creando una cuenta en el servidor ftp, para ello estamos usando el comando:
useradd
El parámetro siguiente es:
-d /home/ftp/cual_quier_nombre
Este parámetro le indica a Linux que la carpeta de trabajo de javier esta ubicada en la ruta [/home/ftp/cual_quier_nombre]. El último parámetro es el siguiente
-s /sbin/nologin
Este le indica a Linux que el usuario no podrá logearse en el sistema lo cual es ideal para usuarios con acceso a FTP pero sin acceso al interprete de comandos.
Accediendo al servidor FTP
La forma en que accederemos a los recursos del servidor FTP sera a través de la siguiente sintaxis