Sunteți pe pagina 1din 37

ADSR

Tema 3: Acceso Remoto

Denis Leopoldo Espinoza Hernández


denisjev@gmail.com
Escritorio Remoto con XDMCP y VNC

El Sistema X Windows

El sistema de ventanas X (en inglés X Window System) fue desarrollado a mediados


de los años 1980 en el MIT para dotar de una interfaz gráfica a los sistemas Unix.
Este protocolo permite la interacción gráfica en red entre un usuario y una o más
computadoras haciendo transparente la red para éste.

Generalmente se refiere a la versión más actual X11 (Versión 11).

X es el encargado de mostrar la información gráfica y es totalmente independiente


del sistema operativo. El servidor provee servicios para acceder a la pantalla,
teclado y ratón, mientras que los clientes son las aplicaciones que utilizan estos
recursos para interacción con el usuario.

De este modo mientras el servidor se ejecuta de manera local, las aplicaciones


pueden ejecutarse remotamente desde otras máquinas, proporcionando así el
concepto de transparencia de red. Como en una terminal virtual.

Administración de Servicios de red 2


Escritorio Remoto con XDMCP y VNC

El hecho que exista un estándar definido para X permite que se desarrollen


servidores X para distintos sistemas operativos y plataformas, lo que hace que el
código sea muy portable.

Por ejemplo: permite tener clientes X ejecutándose en un potente servidor UNIX


mientras los resultados son visualizados en una PC de escritorio con cualquier otro
sistema operativo funcionando.

La comunicación entre el cliente X y el servidor se realiza por medio de un protocolo


conocido como Xprotocol, que constituye una serie bytes interpretados como
comandos básicos para generar ventanas, posicionarlas, o controlar eventos.

Los clientes X acceden al Xprotocol mediante el uso de una biblioteca llamada Xlib.

Administración de Servicios de red 3


Escritorio Remoto con XDMCP y VNC

Concepto funcional de las X

Administración de Servicios de red 4


Escritorio Remoto con XDMCP y VNC

Concepto funcional de las X

Protocolo X: Se ejecuta sobre la conexión de red y permite que se efectúen solicitudes y


respuestas entre cliente y servidor. Corre sobre TCP.

Administración de Servicios de red 5


Escritorio Remoto con XDMCP y VNC

Concepto funcional de las X

Xlib: Contiene una rudimentaria interfaz de programación de aplicación. Es una colección de


subrutinas primitivas de C embebidas en todos los clientes X, que proporciona el acceso de
más bajo nivel al protocolo X.

Los procedimientos en Xlib traducen las peticiones de los clientes a solicitudes del protocolo
X y analizan los mensajes que llegan de los servidores X. Es posible escribir aplicaciones
enteras con Xlib.

X Toolkits: Son librerías de software que añaden funcionalidades de alto nivel para
implementar objetos comunes de la interfaz de usuario, como por ejemplo botones, menús,
barras de desplazamiento. La librería, llamada Intrínsecas de Xlib o Xt, constituye las piezas
elementales para construir una serie de objetos de la interfaz llamados widgets.

Widgets: Un widget set es básicamente una ventana X más algunos datos adicionales y un
conjunto de procedimientos para operar sobre ellos. Los widgets son un concepto exclusivo
del cliente. Ni el servidor X ni el protocolo son capaces de entender los widgets.

Administración de Servicios de red 6


Escritorio Remoto con XDMCP y VNC

Ventajas del Servidor X

Hace de X estrictamente un sistema gráfico, de tal modo que un cliente X podría


estar enviando un gráfico a una pantalla, a una impresora o a cualquier otro
hardware sin darse cuenta, flexibilizando la salida gráfica.

Desventajas del Servidor X

Por otro lado, la desventaja que trae el hecho de no tener un único gestor de
ventanas es que los programadores de clientes X que desean hacer uso de los
recursos de los gestores de ventanas (botones, barras de deslizamientos, etc) deben
elegir un gestor de ventanas específico para programar y contar que el usuario
tenga por al menos las bibliotecas de dicho gestor de ventanas instaladas.

Las bibliotecas de los gestores de ventanas se conocen como "Toolkits", el estándar


X provee sólo de un conjunto de herramientas básicas llamadas Xintrisics que
permiten a los programadores de los gestores de ventanas armar sus Toolkits sobre
éstas.
Administración de Servicios de red 7
Escritorio Remoto con XDMCP y VNC

Los gestores de ventana

Un gestor de ventanas o en inglés window manager, es un programa que controla la


ubicación y apariencia de las ventanas bajo un sistema de ventanas en una interfaz
gráfica de usuario con todas sus acciones (minimizar, mover, ….)

Las plataformas Windows y Mac OS X ofrecen un gestor de ventanas estandarizado


por sus vendedores e integrado en el propio sistema operativo. En cambio el
sistema gráfico X Window, popular en el ámbito de sistemas Unix y similares, como
GNU/Linux, permite al usuario escoger entre varios gestores.

En un entorno Unix, un gestor de ventanas, es un conjunto de aplicaciones que te


permiten manejar un ordenador visualmente.

En Linux hay gran cantidad de gestores de ventanas, los más conocidos son GNOME
y KDE.

Administración de Servicios de red 8


Escritorio Remoto con XDMCP y VNC

Integración de los elementos

Gestor de Ventanas

Cliente X

Xlib

Servidor X

Administración de Servicios de red 9


Escritorio Remoto con XDMCP y VNC

El escritorio GNOME

GNOME es un entorno de escritorio para sistemas operativos de tipo Unix bajo


tecnología X Window. Forma parte oficial del proyecto GNU. Nació como una
alternativa a KDE bajo el nombre de GNU Network Object Model Environment.

Objetivo

El proyecto GNOME proporciona dos cosas:

• El entorno de escritorio GNOME.


• La plataforma de desarrollo GNOME, un extenso marco para la creación de
aplicaciones que se integran en el resto del escritorio.

El Proyecto pone un gran énfasis en la simplicidad, usabilidad y en hacer que las


cosas funcionen.

Administración de Servicios de red 10


Escritorio Remoto con XDMCP y VNC

GTK+

GTK+ o The GIMP Toolkit es un grupo importante de bibliotecas o rutinas para


desarrollar interfaces gráficas de usuario (GUI) principalmente para los entornos
gráficos GNOME, XFCE y ROX de sistemas UNIX.

Es software libre (bajo la licencia LGPL), multiplataforma y parte importante del


proyecto GNU.

Cabe mencionar que Qt es una alternativa a GTK que también es muy utilizada (en
el entorno KDE, por ejemplo).

GTK+ se ha diseñado para permitir programar con lenguajes como C, C++, C#, Java,
Ruby, Perl, PHP o Python. Actualmente su última versión es GTK+ 2, con una
cantidad importante de mejoras respecto a la primera versión, aunque sin embargo,
no es compatible con ella.

Administración de Servicios de red 11


Escritorio Remoto con XDMCP y VNC

XDMCP

XDMCP (siglas de "X Display Manager Control Protocol", "Protocolo de Control de


Administrador de la Pantalla X") es un protocolo utilizado en redes para comunicar
un ordenador servidor que ejecuta un sistema operativo con un gestor de ventanas
basado en X-Window con el resto de clientes que se conectarán a éste con
propósitos interactivos.

Un X Display Manager (administrador de pantalla X) mantiene los procesos del


servidor X activos en él, conectándolo a una pantalla física y proporcionando un
cuadro de diálogo que permita iniciar sesión en el mismo a todos los ordenadores
que lo requieran.

Escucha el User Datagram Protocol (UDP) en el puerto 177 y responde a peticiones


de tipo QUERY y BROADCAST_QUERY enviando un paquete tipo WILLING al equipo
que le contactó.

Administración de Servicios de red 12


Escritorio Remoto con XDMCP y VNC

El gestor de pantalla X (XDM) es una parte opcional del sistema X Window que se
usa para el manejo de sesiones. Esto es útil para diferentes situaciones tales como
“Terminales X” con escritorios mínimos y grandes servidores de red.

Como X Window System es independiente del protocolo y de la red hay muchas


posibles configuraciones para ejecutar clientes y servidores X en diferentes equipos
conectados a una red. XDM se encarga de registrar, mantener y liberar las sesiones
de los usuarios.

Para conectarnos a una máquina que este corriendo XDM tecleamos en una
terminal:

sudo X :1.0 -query ip_del_servidor

Administración de Servicios de red 13


Escritorio Remoto con XDMCP y VNC

VNC (Virtual Network Computing)

VNC es una aplicación cliente-servidor que nos permite la conexión remota entre
equipos conectados en Red.

En el caso de VNC, la aplicación cliente-servidor, nos permite manejar desde uno de


los ordenadores (Cliente) las aplicaciones y recursos de otro ordenador (Servidor),
para ello, es preciso instalar dos programas: un servidor VNC, en la maquina a la
que queramos acceder, y un visualizador VNC en la maquina Cliente.

De esta manera podemos ejecutar un sistema Windows desde un Macintosh,


plataforma Linux o cualquier otro sistema operativo, como Unix, Novel, etc...

VNC fue creado para posibilitar la administración en equipos remotos.

Administración de Servicios de red 14


Escritorio Remoto con XDMCP y VNC

La herramienta ofrece múltiples combinaciones:

• Visualizar una aplicación ejecutada en nuestro ordenador VNC Server y ser


visualizada por todos los ordenadores VNC Cliente. Si nos situáramos en una
actividad de aula, todo el alumnado podría visualizar la pantalla del profesor
mientras se desarrolla la lección.

• En condiciones ideales, VNC puede ser utilizado para que muchos ordenadores
de baja potencia puedan acceder a un servidor de aplicaciones con altas
prestaciones.

Administración de Servicios de red 15


Escritorio Remoto con XDMCP y VNC

Conectividad:

Administración de Servicios de red 16


Escritorio Remoto con XDMCP y VNC

Configuración del Servidor XDMCP y VNC:

Sistema -> Preferencias -> Escritorio Remoto: Activamos las opciones y asignamos
una contraseña.

En el fichero /etc/gdm/gdm.conf

[xdmcp]
Enable=true

Y reiniciamos la máquina

Administración de Servicios de red 17


Acceso remoto con OpenSSH

¿Qué es OpenSSH?
Open Secure Shell es un conjunto de aplicaciones que permiten realizar
comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado
como una alternativa libre y abierta al programa Secure Shel.

Historia
Sus desarrolladores aseguran que OpenSSH es más seguro que el original por su
código limpio y perfectamente auditado. Su seguridad también es atribuible al
hecho de que su código fuente se distribuya libremente con una licencia BSD.

¿Qué es una licencia BSD?


Principalmente de los sistemas BSD (Berkeley Software Distribution). Esta licencia
tiene menos restricciones que GPL. La licencia BSD al contrario que la GPL permite
el uso del código fuente en software no libre.

Administración de Servicios de red 18


Acceso remoto con OpenSSH

¿Qué es la licencia GPL?


GNU General Public License (GNU GPL), es una licencia creada por la Free Software
Foundation a mediados de los 80, y está orientada principalmente a proteger la
libre distribución, modificación y uso de software. Su propósito es declarar que el
software cubierto por esta licencia es software libre y protegerlo de intentos de
apropiación que restrinjan esas libertades a los usuarios.

Portabilidad
OpenSSH es una aplicación de comunicación entre ordenadores y debe funcionar
en la mayor cantidad de sistemas operativos posibles, para lo que OpenSSH
Portability Team añade el código necesario.

Administración de Servicios de red 19


Acceso remoto con OpenSSH

Aplicaciones incluidas
•ssh, reemplaza a telnet para permitir shell el acceso remoto a otra máquina.

•scp, reemplaza a rcp y se utiliza para copiar los datos desde una máquina a otra.

•sftp, conexión ftp segura a través de un túnel: sftp tero@ejemplo.com

•sshd, el servidor demonio SSH sshd.

•ssh-keygen, una herramienta para inspeccionar y generar claves RSA y DSA que son
usadas para la autenticación del usuario.

•ssh-agent y ssh-add, herramientas para autenticarse de manera más fácil,


manteniendo las claves listas para no tener que volver a introducir la frase de
acceso cada ves que utilice la calve.

•ssh-keyscan, que escanea una lista de clientes y recolecta sus claves públicas.
Administración de Servicios de red 20
Acceso remoto con OpenSSH

Instalación de OpenSSH
Dentro de Ubuntu, la instalación suele hacerse como cualquir otro paquete, para
ello basta con realzar:
apt-get install openssh-server

Esto instalará todos los paquetes que antes hemos mencionado con sus respectivos
paquetes de configuración. Todos los archivos de configuración quedan instalados
dentro de /etc/ssh/.

En nuestro caso con solo instalarlo ya podríamos acceder vía ssh desde otras PC’s.m
Para eso solo tendríamos que teclear:

ssh denis@192.168.1.1

Donde denis sería el usuario con el cual nos queremos loguear y 192.168.1.1 la IP
de nuestra PC.

Administración de Servicios de red 21


Acceso remoto con OpenSSH

Inicio, parada y reinicio del servicio


En cualquier momento que lo deseemos podemos detener, arrancar o reiniciar el
servicio ssh asi como cualquier otro servicio. Los scritp para trabajar con los
demonios se ubican dentro: /etc/init.d/.

Para utilizarlos se hace de la manera siguiente:


/etc/init.d/ssh start
/etc/init.d/ssh stop
/etc/init.d/ssh restart

Administración de Servicios de red 22


Acceso remoto con OpenSSH

Secuencia de eventos para el inicio de una conexión segura

La siguiente serie de eventos lo ayudan a proteger la integridad de la comunicación


SSH entre dos host.

•Se lleva a cabo un 'handshake' (apretón de manos) encriptado para que el cliente
pueda verificar que se está comunicando con el servidor correcto.

•La capa de transporte de la conexión entre el cliente y la máquina remota es


encriptada mediante un código simétrico.

•El cliente se autentica ante el servidor.

•El cliente remoto interactúa con la máquina remota sobre la conexión encriptada.

Administración de Servicios de red 23


Acceso remoto con OpenSSH

Ficheros de configuración de OpenSHH


Dentro del directorio de configuración de ssh quedan los siguientes ficheros:

moduli — Contiene grupos Diffie-Hellman usados para el intercambio de la clave


Diffie-Hellman que es imprescindible para la construcción de una capa de
transporte seguro. Cuando se intercambian las claves al inicio de una sesión SSH, se
crea un valor secreto. Este valor se usa para proporcionar la autenticación del host.

Diferencia entre encriptación y autenticación:

-Encriptación es el hecho de que una información sea codificada utilizando una


clave en concreto.

-Autenticación es el hecho de que la máquina remota sea quién dice ser. Evitando
de esa manera una suplantación de identidad.

Administración de Servicios de red 24


Acceso remoto con OpenSSH

Ficheros de configuración de OpenSHH

ssh_config — El archivo de configuración del sistema cliente SSH por defecto. Este
archivo se sobreescribe si hay alguno ya presente en el directorio principal del
usuario (~/.ssh/config).

sshd_config — El archivo de configuración para el demonio sshd.


Administración de Servicios de red 25
Acceso remoto con OpenSSH

Ficheros de configuración de OpenSHH (cont.)

ssh_host_dsa_key — La clave privada DSA usada por el demonio sshd.

ssh_host_dsa_key.pub — La clave pública DSA usada por el demonio sshd.

ssh_host_key — La clave privada RSA usada por el demonio sshd para la versión 1
del protocolo SSH.

ssh_host_key.pub — La clave pública RSA usada por el demonio sshd para la versión
1 del protocolo SSH.

ssh_host_rsa_key — La clave privada RSA usada por el demonio sshd para la versión
2 del protocolo SSH.

ssh_host_rsa_key.pub — La clave pública RSA usada por el demonio sshd para la


versión 2 del protocolo SSH.
Administración de Servicios de red 26
Acceso remoto con OpenSSH

Configuración del demonio sshd (sshd_config)

Port: Especifica el puerto en el que escucha el servidor. es recomendable cambiarlo


ya que la mayoría de los hackcer intentan peticiones al puerto 22.
Port 3425

ListenAddress: Por defecto (0.0.0.0), el servicio de SSH responderá peticiones a


través de todas las interfaces del sistema. Por seguridad puede establecerse que
acepte conexiones sobre la interfaz con IP 192.168.1.254 por ejemplo:
ListenAddress 192.168.1.254

PermitRootLogin: Establece si se va a permitir el acceso directo del usuario root al


servidor SSH.
PermitRootLogin yes

X11Forwarding: Establece si se permite o no la ejecución remota de aplicaciones


gráficas.
X11Forwarding yes
Administración de Servicios de red 27
Acceso remoto con OpenSSH

Configuración del demonio sshd (sshd_config)

AllowUsers: Permite restringir el acceso por usuario y, opcionalmente, anfitrión


desde el cual pueden hacerlo. El siguiente ejemplo restringe el acceso hacia el
servidor SSH para que solo puedan hacerlo los usuarios fulano y mengano, desde
cualquier anfitrión.
AllowUsers fulano mengano

El siguiente ejemplo restringe el acceso hacia el servidor SSH para que solo puedan
hacerlo los usuarios fulano y mengano, solamente desde los anfitriones 10.1.1.1 y
10.2.2.1.

AllowUsers fulano@10.1.1.1 mengano@10.1.1.1 fulano@10.2.2.1 mengano@10.2.2.1

Administración de Servicios de red 28


Acceso remoto con OpenSSH

Probando OpenSSH
Acceso a través de intérprete de mandatos

Para acceder hacia un puerto en particular, se utiliza el parámetro -p. En el siguiente


ejemplo, utilizando la cuanta del usuario juan, se intentará acceder hacia el servidor
con dirección IP 192.168.0.99, el cual tiene un servicio de SSH que responde
peticiones a través del puerto 52341.
ssh -p 52341 juan@192.168.0.99

Ejecutando aplicaciones de manera remota

También se pueden ejecutar aplicaciones que solo se encuentran instaladas en la


máquina remota y visualizar el resultado en nuestra máquina:

ssh juan@192.168.0.99 ‘vi’ //Ejecuta el proceso vi en la máquina remota


//Y el resultado se muestra en la nuestra
ssh –X juan@192.168.0.99 ‘firefox’ //Lo mismo de antes pero con una aplicación
//gráfica.
Administración de Servicios de red 29
Acceso remoto con OpenSSH

Probando OpenSSH
SFTP FTP Seguro con OpenSSH

El intérprete de mandatos de SFTP es muy similar al utilizado para el protocolo FTP


y tiene las mismas funcionalidades.

Para acceder hacia un puerto en particular, en el cual está trabajando el servicio de


SSH, se hace través de el parámetro -o, con la opción Port=número de puerto.

sftp -o Port=52341 juan@192.168.0.99

Copiando archivos de manera remota

Para realizar transferencias de ficheros a través de SCP, es necesario conocer las


rutas de los directorios objetivo del anfitrión remoto.

Administración de Servicios de red 30


Acceso remoto con OpenSSH

A continuación se describen algunas opciones de scp:

-p Preserva el tiempo de modificación, tiempos de acceso y los modos


del fichero original.
-P Especifica el puerto para realizar la conexión.
-r Copia recursivamente los directorios especificados.

En el siguiente ejemplo, se transferirá el fichero algo.txt, preservando tiempos y


modos, hacia el directorio de inicio del usuario fulano en el servidor 192.169.0.99.

scp -p algo.txt fulano@192.168.0.99:/ home/pepe

En el siguiente ejemplo, se transferirá la carpeta Mail, junto con todo su contenido,


preservando tiempos y modos, hacia el directorio de inicio del usuario fulano en el
servidor 192.169.0.99.
scp -rp Mail fulano@192.168.0.99:~/

Administración de Servicios de red 31


Acceso remoto con OpenSSH

Túneles seguros
Muchas aplicaciones pueden ser securizadas con OpenSSH, haciendo de este
sistema una potente alternativa para sistemas VPN.
Cualquier aplicación que use conexiones por TCP (preferiblemente con un sólo
puerto tcp) puede ser utilizada a través de túnel seguro.

El túnel para el X Window System se crea automáticamente entre dos ordenadores


corriendo Unix, así que las aplicaciones con interfaz gráfico pueden ser ejecutadas
desde ordenadores remotos simplemente escribiendo su nombres:

Administración de Servicios de red 32


Acceso remoto con OpenSSH

Túneles seguros (cont.)

Lo que ocurre es una redirección de puertos.

Administración de Servicios de red 33


Acceso remoto con OpenSSH

Túneles seguros (cont.)

ssh -L puerto_local:maquina_destino:puerto_destino maquina_segura.

El puerto_local especifica un puerto TCP de la máquina local y la máquina_destino y


el puerto_destino especifican justo lo que indica su nombre. La idea es que
mientras tenemos la conexión SSH, si nos conectamos a localhost:puerto_local, esa
conexión TCP será redirigida a través del túnel SSH (con la seguridad
correspondiente) a la máquina la maquina_segura, y desde ahí se establecerá una
conexión a maquina_destino:puerto_destino.

Es muy importante tener en cuenta que maquina_destino se resolverá en la


maquina_segura así que si ponemos ahí localhost convertiremos automáticamente
la maquina_destino en la maquina_segura.

Administración de Servicios de red 34


Acceso remoto con OpenSSH

Ejemplos de Túneles seguros

ssh -L 8080:localhost:3128 miproxy.segu.ro:

Suponiendo que tengamos acceso SSH a miproxy.segu.ro, y que esta máquina esté
ejecutando un proxy en el puerto 3128, con este comando conseguimos que todas
las conexiones al puerto 8080 local se vayan por el túnel SSH al puerto 3128 de
miproxy.segu.ro.

Así que configuramos el navegador para que use como proxy localhost:8080, y en
realidad estaremos usando miproxy.segu.ro:3128, solo que la comunicación irá
protegida por SSH.

Administración de Servicios de red 35


Acceso remoto con OpenSSH

Ejemplos de Túneles seguros

ssh -L 110:mipop3:110 miservidor.segu.ro:

Supongamos que tenemos acceso SSH a miservidor.segu.ro, y una cuenta POP3 en


la máquina mipop3, que está en la misma red local que miservidor.segu.ro. O bién
no tenemos acceso a mipop3 desde fuera, o bién nos da miedo que nuestro
password viaje sin paswword hasta llegar a él.

Usando este comando SSH conseguimos que las conexiones al puerto local 110 sean
redirigidas a mipop3:110, via miservidor.segu.ro, y la conexión entre la máquina
local y miservidor.segu.ro va protegida por SSH.

Administración de Servicios de red 36


Acceso remoto con OpenSSH

Túneles seguros Inversos

La versión con -R es muy parecida, pero el primer puerto que se especifica es


remoto y el host:puerto que vienen después se resuelven en local. Por supuesto la
redirección se hace en sentido contrario.

Es decir, si hacemos

ssh -R 6110:localhost:110 miservidor.segu.ro

Conseguimos que las conexiones a miservidor.segu.ro:6110 sean redirigidas de


forma transparente a través del túnel SSH al puerto 110 local. Así que si en la
máquina local tenemos un servidor POP3 funcionando, las máquinas de la parte
remota pueden usarlo accediendo al puerto 6110 de miservidor.segu.ro.

Administración de Servicios de red 37