Tabla de Contenidos
Sistemas de Transferencia de Archivos y Conexión Remota
SSH
SSH es un protocolo seguro que nos permite conectarnos, loguearnos y administrar desde linea de comandos un sistema remoto. Funciona bajo un arquitectura cliente servidor, de modo que necesitamos habilitar un servidor SSH en el sistema que queremos administrar para que no permita conectarnos desde un cliente.
Se diseño inicialmente para sistemas basados en Unix, como reemplazo del protocolo Telnet por su falta de seguridad. Se utiliza generalmente para trabajar en sistemas remotos a través de una interfaz de linea de comandos y ejecutar instrucciones. También es utilizado por algunos protocolos de transferencia de archivos como SFTP o SCP.
Por defecto SSH utiliza el puerto 22, usa una encriptación de clave pública y la implementación más extendida es OpenSSH.
Los clientes más habituales para conectarnos mediante SSH:
- Terminal de Windows o Linux
- PowerShell de Windows
- Putty para Windows
Para instalar un servidor SSH en nuestro sistema linux:
$ apt-get install openssh-server
Al instalar el servicio SSH, también se instalará un servicio de transferencia de archivos conocido como SSH FTP ó SFTP, y que funciona sobre el servicio SSH. Este servicio de transferencia funciona en el puerto 22, y no debemos confundirlo con el servicio FTP.
Para desinstalar:
$ apt-get purge openssh-server
El archivo de configuración de SSH se encuentra en: /etc/ssh/sshd_config
. Si queremos utilizar otro puerto para conexiones al servidor modificaremos ese fichero:
# Descomentaremos la siguiente linea e indicaremos el puerto deseado # Port 22 # Despues reiniciamos el servicio $ systemctl restart sshd
Para conectarnos desde un cliente SSH:
# Conexión al puerto estandar 22 ssh usuario@ip_servidor # Para conexiones en otros puertos ssh -p puerto usuario@ip_servidor
FTP
Es un protocolo usado para la transferencia de ficheros entre un cliente y un servidor a través de una red. Utiliza dos conexiones diferentes: una para los datos y otra para los comandos. Los usuarios se puede conectar mediante un usuario y una contraseña. Es un protocolo muy antiguo, ya que se diseñó en 1971. En aquel momento las implicaciones de seguridad eran bastante distintas a las actuales, por lo que se ha mejorado con algunas implementaciones siendo lo más habitual utilizarlo junto al protocolo SSL/TLS.
Funcionamiento
Como hemos comentado, FTP utiliza dos conexiones para trabajar mantenidas en dos puertos diferentes, que inicialmente eran el 20 y el 21.
El cliente FTP se conecta por el puerto 21 al servidor FTP y se establece una Conexión de Control. Mediante esta conexión se envían diferentes señales: órdenes del cliente al servidor y respuestas por parte de éste. Estas órdenes FTP especifican parámetros para la conexión de datos (puerto de datos, modo de transferencia, etc.), para gestión de la estructura de archivos o subida o descarga de los mismos.
El Proceso de Transferencia de Datos 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.
Implicación en el despliegue Web
Para desplegar una aplicación web es necesario subir una cantidad de ficheros a nuestro servidor. Aunque existan paneles de control instalables en nuestros servidores que nos permiten realizar operaciones de transferencia de archivos desde nuestro navegador web, utilizar servicios de transferencia nos facilita la tarea de copia de grandes cantidades de archivos al mismo tiempo.
Además nos permiten hacer un control de seguridad limitando el espacio máximo permitido de uso, el control de usuarios, escriptar las transmisiones de datos, etc.
En caso de que trabajemos con un servidor virtual privado (VPS), que es la forma más habitual de contratar un servidor profesional, además necesitaremos de una forma de gestión remota que sea segura. Ahí es dónde entra en funcionamiento el protocolo SSH.
Acceso al servicio
Modos de conexión cliente
Modo Activo
Es el modo predeterminado para las conexiones FTP, de hecho fue el primero en desarrollarse. En este modo el servidor utilizará el puerto 20 para la transferencia de datos, mientras que transmitirá los comandos utilizando el puerto 21. El cliente en cambio utilizará un puerto aleatorio P superior al 1023 para la transferencia de comandos, y un puerto P+1 para la transferencia de datos.
- El cliente FTP comienza la conexión desde un puerto de control aleatorio P con destino al puerto 21 del servidor. Como hemos mencionado el puerto P será superior a 1023.
- El servidor responde desde el puerto de control.
- El servidor inicia entonces la conexión del canal de datos: puerto 20 para el servidor y puerto P+1 para el cliente.
- El cliente responde desde el puerto de datos estableciendo así la conexión.
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.
Esta última conexión es iniciada por el servidor en el puerto previamente negociado, y en ocasiones es bloqueada por el firewall del cliente al ser identificada como un intento de conexión externa no autorizada. Lo normal es que los cortafuegos del cliente rechacen estas conexiones aleatorias.
Modo Pasivo
El modo de FTP pasivo surge como consecuencia de los problemas de conexión del modo activo. Este modo mantiene los dos canales (control y datos) pero en este caso es el cliente el encargado de establecer las dos conexiones.
La secuencia de conexión del modo pasivo es la que sigue a continuación:
- El cliente FTP comienza la conexión dese un puerto de control aleatorio P con destino al puerto 21 del servidor.
- El servidor responde desde el puerto de control.
- El cliente inicia la conexión del canal de datos dese el puerto P+1 hacia el puerto Q del servidor.
- El servidor responde desde el puerto de datos estableciendo así la conexión.
Cuotas de disco
Las cuotas de disco permiten a los administradores controlar y limitar la cantidad de espacio en disco que usan los usuarios en los sistemas de archivos de servidores y estaciones de trabajo.
En el marco del alojamiento web, las cuotas de disco tienen una importancia fundamental para la administración del espacio en el servidor. El establecimiento de límites permite distribuir el espacio del disco duro entre los usuarios que comparten un sistema de hardware. Si un usuario sobrepasa el espacio que le fue asignado, se le informa de que ha infringido la cuota.
Usuarios
Existen dos tipos de usuarios:
- Usuarios anónimos: usuarios que tienen acceso y permisos limitados por el sistema de archivos. Al conectarse al servidor FTP sólo deben introducir una contraseña simbólica, por ejemplo, cualquier dirección de correo. Es habitual desactivar el acceso de usuarios anónimos por motivos de seguridad.
- Usuarios del sistema: aquellos que disponen de una cuenta en la máquina que ofrece el servicio FTP. Al conectarse al servidor FTP deben introducir su contraseña de sistema.
- Usuarios virtuales: Este tipos de usuarios solo son permitidos por algunos tipos de servidores FTP. Son usuarios controlados (dados de alta en el servidor) pero que no pertenecen al sistema. Se emplean para separar el uso del servicio FTP del uso del sistema operativo.
Métodos de transferencia
FTP permite dos modos de transferencia de archivos que son relevantes dependiendo del tipo de información que deseamos transmitir.
- Modo Binario: Se debe usar para transferir cualquier archivo binario: Archivos comprimidos, imágenes, videos, sonidos, documentos, etc. Se descomponen en bytes y se transfieres creando una copia exacta a nivel de bytes del archivo original.
- Modo ASCII: El modo ASCII se recomienda cuando se quiere transferir ficheros de texto. Debido a que los distintos sistemas operativos Linux-Windows tienen diferentes formas de formatear los saltos de linea, al utilizar este tipo de transformación el sistema adaptará los ficheros a su formato adecuado.
- Modo Automático: Dependiendo del cliente FTP que utilicemos a veces se nos permite, una selección automática del tipo de transferencia. Esta selección se basa en las extensiones o tipos de los ficheros.
Los ficheros de texto plano son aquellos que contienen cualquier contenido de caracteres legible, como lo es cualquier fichero de código fuente: .html
, .php
, .java
, .css
, etc.
Los archivos binarios son:
- Imágenes (
.jpg
,.bmp
,.png
) - Audio (
.mp3
,.avi
,.wma
) - Video (
.flv
,.mkv
,.mov
,.mp4
) - Archivos (
.zip
,.rar
,.tar
) - Otros (
.exe
,.doc
,.xls
,.pdf
)
Protocolos Seguros
FTPS
File Transfer Protocol Over TLS/SSL. FTPS no utiliza SSH y no es nativo de ningún sistema operativo. Es una extensión del protocolo FTP que utiliza TLS/SSL para asegurar las comunicaciones entre hosts. Esto es muy similar a cómo se usa TLS/SSL para proteger el tráfico web básico.
Aunque existen utilidades de línea de comandos para FTPS, los usuarios de Windows lo utilizan más comúnmente a través de un cliente.
SFTP
SSH File Transfer Protocol es un protocolo que aprovecha la seguridad y autenticación proporcionada por SSH. Puede pensar en SFTP como simplemente FTP (Protocolo de transferencia de archivos) que usa un túnel SSH para asegurar las comunicaciones.
SFTP es una utilidad de transferencia de archivos una funcionalidad similar a FTPS. Aunque SFTP y SCP usan SSH para el transporte, ahí es donde terminan las similitudes. Con SFTP se pueden enumerar directorios, cambiar permisos y propietarios, eliminar y renombrar archivos e incluso crear enlaces simbólicos. Esto proporciona toda la funcionalidad de FTP con la seguridad de SSH.
Dado que es un subsistema de SSH, generalmente está disponible en cualquier sistema que tenga SSH.
SCP
Secure Copy Protocol es un protocolo basado en SSH. Proporciona una manera fácil, aunque limitada, de copiar archivos de forma segura de un sistema a otro. SCP se limita a transferir archivos.
No proporciona un método para eliminar, enumerar, renombrar u otras operaciones de archivos similares. Sin embargo, proporciona una utilidad fácil de usar para copiar de forma rápida y segura un archivo de un sistema a otro.
Tipos de Clientes FTP
Clientes con GUI
Son aplicaciones de escritorio que nos permiten conectarnos a servidores de transferencia de forma gráfica. Esto facilita mucho el trabajo ya que podemos utiliasr el ratón, navegar por un arbol de directorios, arrastrar y soltar archivos, etc. La gran mayoría permiten conectarnos utilizando diferentes protocolos: SCP, SFTP, FTPS,…
Cliente Filezilla
Algunos de los más utilizados son:
- Filezilla: software libre, multiplataforma, gran comunidad de soporte, varios protocolos
- WinSCP: software libre, sistemas Windows, varios protocolos
- CyberDuck: Software libre, Windows y Mac, varios protocolos
Linea de comandos
Desde linea de comandos podemos conectarnos también tanto mediante FTP como SFTP:
fer@debian:~$ ftp 192.168.1.34 fer@debian:~$ sftp usuario@192.168.1.34
Comando | Descripcion |
---|---|
open [ip] | Abre conexión |
quit/exit/bye | Termina FTP |
pwd | Indica la ruta del servidor |
!pwd | Indica la ruta del cliente |
ls/dir | Lista el contenido del directorio del servidor |
!ls/!dir | Lista el contenido del directorio del cliente |
mkdir | Crea un directorio en el servidor |
!mkdir | Crea un directorio en el cliente |
get [archivo] | Descarga el archivo al directorio del cliente |
put [archivo] | Sube el archivo al directorio de servidor |
binary | Establace modo binario de transferencia |
ascii | Establece modo ascii de transferencia |
delete [archivo] | Elimina el archivo del servidor |
Firewall
Tener un Firewall suficientemente configurado es uno de los aspectos más importantes en la seguridad de un sistema. El firewall UFW (Uncomplicated Firewall) es una herramienta que tenemos disponible en las distribuciones Debian o Ubuntu. Tiene una interfaz muy simple para administrar reglas en iptables.
Para instalarlo usaremos apt:
$ apt-get install ufw
Una vez instalado podemos encontrar su fichero de configuración en /etc/default/ufw
. Las configuraciones que hagamos funcionarán tanto en ipv4 como en ipv6, asi que podemos buscar esa directiva:
IPV6=yes
UFW no se activa al instalarse. El firewall por defecto tiene las siguientes configuraciones:
$ ufw default deny incoming $ ufw default allow outgoing
Estas reglas no es necesario crearlas, ya que vienen de serie. El firewall deniega cualquier conexión entrante, y permite cualquier saliente.
Si estamos trabajando a través de SSH debemos abrir dicho puerto para no quedarnos aislados del servidor:
$ ufw allow ssh # O indicando el puerto del servicio $ ufw allow 22
Una vez hecho esto, podemos activar el firewall. También podemos desactivarlo si queremos hacer algunas configuraciones:
$ ufw enable $ ufw disable # Para restaurar el estado inicial (elimina todas las reglas y lo desactiva) $ ufw reset
Las reglas que nosotros creamos en el firewall se almacenan en los ficheros /etc/ufw/user.rules
y user6.rules
. Para mostrar las reglas que hemos creado, podemos hacerlo de diferentes formas:
# Verificar el estado
$ ufw status
$ ufw status verbose
$ ufw status numbered
Otros ejemplos:
# Permitir servicios o direcciones $ ufw allow http $ ufw allow https $ ufw allow from 203.0.113.4 # Permitir rangos de puertos $ ufw allow 6000:6007/tcp $ ufw allow 6000:6007/udp # Denegar $ ufw deny http $ ufw deny from 203.0.113.4
Eliminar Reglas
Si queremos eliminar alguna regla podemos hacerlo del siguiente modo:
$ ufw allow 22 $ ufw allow 443/tcp $ ufw deny 23/tcp $ ufw delete allow 22 $ ufw delete allow 443/tcp $ ufw delete deny 23/tcp
Otra forma es listar las reglas de forma numerada y eliminar la que necesite indicando su número:
$ ufw status numbered $ ufw delete [numero]
Configurar servicio FTP
Para trabajar con el servidor FTP debemos abrir los puertos 20 y 21. Si pretendemos utilizar una conexión cifrada también debemos abrir el puerto 990. Y para permitir el modo pasivo debemos abrir un rango de puertos (atendiendo a la cantidad de usuarios que se van a conectar simultaneamente:
# Abrir puertos para FTP y TLS $ ufw allow 20,21,990/tcp # Abrir un rango de puertos para modo pasivo $ ufw allow 40001:40100/tcp
Para trabajar con el servicio FTP over SSH, o SFTP, solo necesitamos el puerto SSH (22) que ya hemos abierto previamente para conectarnos mediante terminal remoto.
Administración de servidor vsFTPd
VeriSecure FTP daemon es un servidor FTP con licencia GPL que se caracteriza por ser muy ligero, rápido y seguro. Es el utilizado por algunas de las principales compañias de Linux como SUSE o RedHat para sus repositorios FTP.
$ apt-get install vsftpd
Una vez instalado permitirá conectarnos sin ningún tipo de cifrado con permisos de solo lectura.
Fichero de configuración
Para configurar el servidor modificaremos el fichero /etc/vsftpd.conf
. Tenemos una referencia de sus opciones en https://linux.die.net/man/5/vsftpd.conf.
Cada vez que modifiquemos opciones del servidor debemos reiniciarlo para que los cambios tomen efecto:
$ systemctl restart vsftpd
También es recomendable hacer una copia de seguridad del fichero de configuración para restaurar las modificaciones que hagamos:
$ cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
Las siguientes opciones sirven para permitir las conexiones de usuarios y activar la escritura:
- /etc/vsftpd.conf
# Impedir el logueo de usuarios anónimos anonymous_enable=NO # # Permitir a los usuarios del sistema loguearse local_enable=YES # # Permitir a los usuarios escribir, borrar o modificar # Esto solo se permite en los directorios en los que tenga permisos write_enable=YES # # Permisos por defecto de los ficheros subidos local_umask=022
Configurar Modo Pasivo
En el fichero de configuración de vsftpd podemos limitar los puertos que pueden ser usados en el modo pasivo. Debemos tener en cuenta que si tenemos un firewall debemos tener abierto este rango de puertos.
- /etc/vsftpd.conf
pasv_enable=Yes #Deben coincidir con los puertos abiertos por el firewall pasv_min_port=40001 pasv_max_port=40100
Controlar el acceso
Con la configuración anterior permitimos que los usuarios del sistema se puedan loguear con sus credenciales y puedan escribir en los directorios en los que tengan permisos. Pero podrán visualizar todo el sistema de archivos. A continuación se indican diferentes formas de limitar el acceso al sistema de archivos o directamente limitar el acceso al servidor.
Limitar acceso al servicio
Las siguientes opciones permiten crear un fichero con los nombres de los usuarios a los que se quiere permitir o denegar el acceso al servidor FTP:
- /etc/vsftpd.conf
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
La opción userlist_deny
modifica el comportamiento:
YES
: Se impide el acceso a los usuarios de la lista/etc/vsftpd.userlist
NO
: Se concede el acceso solo a los usuarios de la lista/etc/vsftpd.userlist
Directorio por defecto
Mientras no se especifique, los usuarios acceden inicialmente a su directorio personal HOME. Podemos modificar este comportamiento mediante:
- /etc/vsftpd.conf
local_root="ruta_deseada"
Como puede interesarnos que cada usuario acceda a una ruta específica diferente para cada uno, podemos usar las siguiente directiva:
- /etc/vsftpd.conf
user_sub_token=$USER # Cada usuario accede a su propio directorio (creado previamente) local_root=/srv/ftp/$USER
Enjaular usuarios
vsFTPd nos permite limitar el acceso a los usuarios a un directorio concreto sin que puedan salir de él. Esto seconoce como enjaular (chroot). Los usuarios se enjaulan siempre en su directorio raíz indicado en la directiva local_root
- /etc/vsftpd.conf
# Descomentando la siguiene directiva activamos el enjaulamiento chroot_local_user=YES
Al intentar conectarnos al servidor FTP veremos que no se nos permite. Esto ocurre porque no se permite enjaular a un usuario en un directorio sobre el que tiene permisos de escritura.
Para solucionar esto temporalmente en un entorno de pruebas podemos añadir la opcion:
La siguiente directiva nos permite enjaular usuarios en directorios sobre los que tienen permisos de escritura, algo que se desaconseja por motivos de seguridad. En los siguientes puntos se explica cómo hacerlo de forma segura.
- /etc/vsftpd.conf
# Usar esta directiva solamente para pruebas (Se desaconseja) allow_writeable_chroot=YES
Como hemos dicho, la directiva anterior la usaremos para realizar pruebas, pero nunca en una configuración definitiva.Vsftpd Faq.
Enjaular de forma segura
Para enjaular usuarios de forma segura1) en un directorio debemos tener en cuenta que no pueden tener permisos sobre el directorio en el que se enjaulan. Para ello debemos crear un directorio distinto a su directorio personal sobre el que puedan tener permiso de escritura. Podemos crear un directorio concreto para el servicio FTP:
Lo primero es volver a comentar la linea que descomentamos antes, ya que queremos enjaular de forma segura:
- /etc/vsftpd.conf
#allow_writeable_chroot=YES
A continuación creamos la configuración de directorios y permisos:
# Creamos el directorio de enjaulamiento $ mkdir /home/fer/ftp # Hacemos que no pertenezca a nadie $ chown nobody:nogroup /home/fer/ftp # Quitamos los permisos de escritura para todos los usuarios $ chmod a-w /home/fer/ftp # Creamos un directorio en su interior para transferir archivos $ mkdir /home/fer/ftp/archivos # Nos aseguramos que el usuario es el propietario $ chown fer:fer /home/fer/ftp/archivos
La idea es crear esa estructura de directorios para todos los usuarios que queramos que tengan acceso al servicio FTP.
Esta estructura de directorios la podemos utilizar en diferentes contextos. Para un servidor web podemos crear:
/var/www/fer/public_html
.
Ahora en el fichero de configuración indicamos el enjaulamiento:
- /etc/vsftpd.conf
chroot_local_user=YES # Indicamos el directorio de enjaulamiento para todos los usuarios user_sub_token=$USER local_root=/home/$USER/ftp
La variable $USER es una variable del sistema que contiene el nombre del usuario actual. De este modo cada usuario, accede a su propia ruta.
Listas de usuarios enjaulados
Al activar la directiva chroot_local_user
enjaularemos a todos los usuarios del sistema. Pero podemos indicar a qué usuarios queremos enjaular/liberar indicándolo sus nombres en el fichero vsftpd.chroot_list
.
- /etc/vsftpd.conf
# Solo se enjaulan los usuarios del fichero chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list # Solo están sin enjaular los usuarios del fichero chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
Impedir acceso al shell (terminal)
Otra forma de mantener la seguridad es crear usuarios para el servicio FTP que no tengan acceso a la linea de comandos (shell) de Linux. De este modo no podrán ejecutar comandos mediante SSH. Vamos a hacerlo con el shell nologin
.
# Comprobamos que tengamos el shell nologin en el fichero /etc/shells $ cat /etc/shells # Si no está indicado lo añadimos (puedo hacerlo con el comando o cat, o con un editor) $ cat >> /etc/shells /sbin/nologin # Modificamos el shell del usuario $ usermod -s /sbin/nologin fer
Configuración personalizada de usuarios
La opción user_config_dir
permite definir un directorio de configuraciones personalizadas para cada usuario. Si un fichero de ese directorio tiene el nombre de un usuario, se cargara la configuración contenida en él para ese usuario:
- /etc/vsftpd.conf
#Indicamos el directorio de configuraciones de usuarios user_config_dir=/etc/vsftpd
# Creamos un fichero para el usuario "usuario1" e indicamos sus opciones. Con cat o con un editor $ cat > /etc/vsftpd/usuario1 local_root=/srv/ftp/usuario1 write_enable=NO
Al usuario “usuario1” y sólo a él, se le aplican las directivas incluidas en el fichero, que sobreescribirán a la que puedan encontrarse en el fichero general, incluidas las de enjaulamiento.
Cifrar las transferencias
La información enviada por el protocolo FTP no se encripta al ser enviada, ni siquiera las credenciales de login. Podemos encriptarla mediate SSL/TSL, y para ello comenzaremos por crear un certificado SSL mediante el servicio openSSL que ya tenemos instalado:
Generar certificado
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Donde:
- req - gestiona la solicitud de certificados X.509 Certificate Signing Request (CSR).
- x509 - modo X.509 de gestión de datos del certificado.
- days - duración del certificado.
- newkey - indica el procesador de claves del certificado.
- rsa:2048 - procesador de claves RSA genera una clave primavada de 2048 bits.
- keyout - indica la el archivo de almacenamiento de clave.
- out - indica el fichero de almacenamiento del certificado.
Podemos ver que tanto el certificado como la clave se almacenarán en el mismo fichero: /etc/ssl/private/vsftpd.pem
Para crear el certificado se nos solicitarán unos datos, que serviran al cliente para identificar el certificado:
Generating a 2048 bit RSA private key ............................................................................+++ ...........+++ writing new private key to '/etc/ssl/private/vsftpd.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: ES State or Province Name (full name) [Some-State]: CyL Locality Name (eg, city) []: Leon Organization Name (eg, company) [Internet Widgits Pty Ltd]: Centro Educativo Organizational Unit Name (eg, section) []: Despliegue Common Name (e.g. server FQDN or YOUR name) []: despliegueFTP Email Address []: despliegue@ftp . . .
Aplicar configuración
Una vez que lo tengamos generado y conozcamos su ubicación debemos comentar las siguientes lineas del fichero de configuración e indicar los valores correctos:
- /etc/vsftpd.conf
# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key . . . rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
TLS es más seguro que SSL, por lo que vamos a indicar en el fichero de configuración los detalles SSL añadiendo las siguientes lineas:
- /etc/vsftpd.conf
# SSL configuration (TLS v1.2) ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO
Y por último, una vez que tenemos habilitado SSL, vamos a forzar su uso siempre que sea posible:
- /etc/vsftpd.conf
# Prevent anonymous users from using SSL allow_anon_ssl=NO # Force all non-anonymous logins to use SSL for data transfer force_local_data_ssl=YES # Force all non-anonymous logins to use SSL to send passwords force_local_logins_ssl=YES # Impedir reusar certificados por parte de los clientes require_ssl_reuse=NO # Usar certificados de al menos 128 bits ssl_ciphers=HIGH
Cuotas de disco
Las cuotas nos permiten limitar el uso del disco por parte de los usuarios. Son muy útiles combinarlas con los servicios de transferencia de ficheros para evitar un uso descontrolado del espacio del sistema por parte de los usuarios.
$ apt-get install quota
Ahora debemos modificar el fichero /etc/fstab
, que contiene las informaciones que conciernen al montaje de las particiones que hay en el sistema.
Añadimos a la 4ª columna las opciones que queremos (usrquota, y/o grpquota)
Debemos añadir en la columna pass de las particiones en las que nos interese gestionar las cuotas las opciones usrquota
y/o grpquota
en caso de que queramos gestionar la cuotas de usuarios y grupos respectivamente en las particiones indicadas. Separamos las opciones mediante comas ,
.
En el ejemplo lo vamos a usar en el directorio personal de los usuarios /home
y en el directorio de datos del servidor web /var
. Si tan solo tenemos una particion para todo el sistema /
lo añadiremos ahí.
Una vez modificado el fichero, aplicamos los cambios volviendo a montar las particiones modificadas:
$ mount -o remount /home /var #Comprobamos los puntos de montaje con mount $ mount
mount
: muestra los puntos de montaje que soportan cuotas y qué tipo de cuotas
Ahora, debemos crear los ficheros que almacenarán las cuotas del directorio /home
. Haremos el resto del proceso solo para este directorio. El comando quotacheck
verifica los sistemas de archivos que soporten cuotas. Este comando crea, verifica o repara el control de cuotas en los sistemas que lo soporten.
# Crear el fichero de cuotas para el directorio /home $ quotacheck -ugmv /home
Es conveniente ejecutar quotacheck periódicamente para que verifique inconsistencias y se corrijan a tiempo. Las opciones posibles son:
- a - all, es decir verifica todos los sistemas de archivos por cuotas.
- u - user, verifica por soporte de cuotas para usuarios.
- g - group, verifica por soporte de cuotas para grupos.
- m - no-remount, evita que el sistema se remonte como de solo lectura.
- v - verboso, reporta lo que hace conforme progresa, son los mensajes que salen a la terminal.
La opcion a
solo es necesaria si tengo cuotas en más de un punto de montaje. En este caso solo tenemos /home
.
El resultado es similar al siguiente:
Una vez realizado esto, veré que tengo los ficheros referentes a las cuotas que tenga configuradas (usuario y/o grupo) en el directorio que he habilitado para cuotas. Los ficheros son: aquota.user y aquota.group.
Para arrancar el servicio:
# Arrancar el servicio $ quotaon -ugv /home # Parar el servicio $ quotaoff -ugv /home
Una vez que hemos arrancado el servicio ya no hará falta volverlo a hacer. Ahora podemos establecer cuotas para los diferentes usuarios:
# Establecer una cuota para el usuario fer $ setquota -u fer 10240 20480 100 200 /home # Establecer una cuota de forma interactiva $ edquota -u fer # Comprobar cuotas de un usuario tamaño en (MB, GB, etc) $ quota -u -s fer # Comprobar todas las cuotas de usuarios en todas las particiones $ repquota -a -s # Modificar tiempo de gracia en segundos $ setquota -t 86400 86400 /home # Modificar el tiempo de gracia global $ edquota -t # Modificar el tiempo de gracia global de un usuario $ edquota -T -u fer
Al establecer cuotas se definen valor a los siguientes parámetros:
- Bloques: Los bloques son unidades de tamaño de 1 Kb. Establecemos dos niveles:
- Soft Limit: Límite en el cual el sistema te avisa de que sobrepasas.
- Hard Limit: Límite que no permite ser sobrepasado.
- Inodos: Representan la cantidad de archivos permitidos
- Soft Limit: Límite de aviso.
- Hard Limit: Límite que no permite ser sobrepasado.
En cuanto al tiempo de gracia, si no se indica nada se ofrecen 7 días desde que se supera el soft limit.
Servicio SSH FTP (SFTP)
El servicio SSH FTP está habilitado en el momento en que tengamos un servidor SSH. Podemos utilizarlo desde un cliente gráfico o desde linea de comandos con los comandos que usamos para el protocolo FTP. Para utilizar este servicio desde un cliente debo indicar que la conexión la realizo al puerto SSH: puerto 22
.
Debemos entender que el servicio SFTP se basa en SSH, y es completamente independiente del servicio FTP: no es necesario tener un servidor FTP para usar SFTP.
Aun así, vamos a comentar algúnas opciones que pueden resultar interesantes. El fichero de configuración lo podemos encontrar en /etc/ssh/sshd_config
. Siempre es recomendable hacer una copia del fichero de configuración, para poder restaurarla en caso de error.
Si en algún momento no soy capaz de realizar una configuración, puedo desinstalar el servidor ssh:
$ apt-get purge openssh-server
Control de Acceso
Para modificar las configuraciones de los usuarios debemos editar su fichero de configuración /etc/ssh/sshd_config
.
Denegar el acceso por SSH
Esta configuración impide el acceso por SSH, por lo que tampoco podremos usar el servicio SSH FTP. Podemos denegar a usuarios concretos, o a todo un grupo:
- /etc/ssh/sshd_config
# Denegar a usuarios concretos DenyUsers nombre-usuario # Denegar a un grupo DenyGroups nombre-grupo
También puedo indicar a quién concedo el acceso
- /etc/ssh/sshd_config
# Permitir a usuarios concretos AllowUsers nombre-usuario # Permitir a usuarios concretos AllowGroups nombre-grupo
Permitir solo SFTP
Si queremos que el usuario “user1” solo pueda usar el servicio SFTP, y no se le permita conectarse mediante SSH:
- /etc/ssh/sshd_config
Match User user1 ForceCommand internal-sftp PasswordAuthentication yes
Enjaular usuarios
Del mismo modo que hemos hecho con el servicio FTP, puede ser interesante limitar el acceso al sistema a ciertos usuarios. Para ello podemos crear ciertos usarios que solo puedan utilizar este servicio con unas limitaciones. Para enjaular usuarios, SSH requiere que el directorio de enjaulamiento cumpla unas condiciones:
- El directorio de enjaulamiento y sus directorios padres debe pertenecer al usuario y al grupo root
- Ningún otro usuario puede tener permisos de escritura sobre el directorio de enjaulamiento
Para ello podemos crear un directorio para enjaular a todos los usuarios o un directorio diferente para cada usuario.
A continuación crearemos la estructura de directorios necesaria para enjaular a los usuarios user1 y user2:
$ mkdir -p /home/sftp/jaula_user1 /home/sftp/jaula_user2 $ chown root:root /home/sftp/jaula_user1 $ chown root:root /home/sftp/jaula_user2 $ chmod 755 /home/sftp/jaula_user1 $ chmod 755 /home/sftp/jaula_user2
Lo que acabo de hacer es:
- Crear el directorio
sftp
en/home
, para contener las jaular de los dos usuarios. El propietario debe ser root. - Crear los directorios jaula de los 2 usuarios dentro del directorio
/home/sftp
:jaula_user1
yjaula_user2
. Estos directorios también deben pertenecer a root. - Asegurar que nadie más que root tiene permisos de escritura sobre los directorios jaulas. Si los hemos creado desde el usuario root, los permisos ya serán correctos.
Ahora ambos directorios de enjaulamiento (jaula_user1, jaula_user2) pertenecen a root y nadie más tiene permisos de escritura. Vamos a crear un directorio para que ambos usuarios puedan transferir ficheros.
$ mkdir /home/sftp/jaula_user1/ficheros /home/sftp/jaula_user2/ficheros $ chown user1:user1 /home/sftp/jaula_user1/ficheros $ chown user2:user2 /home/sftp/jaula_user2/ficheros
Lo que acabamos de hacer es:
- Crear un directorio dentro de la jaula de cada usuario, en el que los usuarios tienen permisos de escritura.
Recordemos: Para que SSH nos permita enjaular a un usuario, no puede tener permisos sobre el directorio jaula (jaula_userX
), pero si quiero que pueda subir ficheros, debe tener permisos en algún directorio dentro de la jaula.
Y ahora procedemos a editar el fichero de configuración. Debemos añadir las siguientes directivas por cada usuario que desee enjaular:
- /etc/ssh/sshd_config
Match User user1 ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /home/sftp/jaula_user1 PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
ForceCommand internal-sftp
: Fuerza al servidor SSH a usar SFTP para este usuario, impidiendo el acceso al terminal de comandos.AllowAgentForwarding no
,AllowTcpForwarding no
,X11Forwarding no
. Desactiva la redirección de puertos, el tunneling, y la redirección X11. La finalidad es limitar el acceso al servidor.
En caso de que tengamos más usuarios, repetiremos ese código para cada usuario dentro del fichero de configuración.
Una vez realizados los cambios, reiniciamos el servicio:
$ systemctl restart sshd
Configuración de grupo
Si preveemos que vamos a tener muchos usuarios para acceder a este servicio podemos crear un grupo de usuarios:
$ addgroup sftpusers $ adduser user1 sftpusers $ adduser user2 sftpusers
Ahora editamos el fichero de configuración pero añadiendo solo una sección para el grupo:
- /etc/ssh/sshd_config
Match Group sftpusers ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /home/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Prácticas
- Práctica 2: Configuración de Servicios de Transferencia de Archivos
© 2024 Fernando Valdeón