Servidor de nombres

Anuncio
Servidor de nombres
En un sistema distribuido, se usa algún nombre para hacer referencia a algún recurso como nodos de
procesamiento (computadoras), puertos, servicios y usuarios. Los nombres son útiles al momento en que se
desea establecer una comunicación o compartir recursos en un sistema distribuido. A continuación se listan
algunos tipos de nombres:
• Identificadores de puertos y procesos.
• Nombres textuales de servicios.
• Identificadores de recursos.
• Nombres de archivos.
• Direcciones físicas y lógicas de redes.
Muchos de los nombres usados en un sistema distribuido se refieren a un servicio en particular; por ejemplo,
un cliente (usuario o proceso) usa tal nombre para solicitar un determinado servicio para ejecutar alguna
operación sobre un objeto o recurso con un nombre propio.
A la asociación entre un nombre y un objeto se llama liga o conexión. Cada objeto en un sistema tiene ciertos
atributos. Por ejemplo, los servicios y las computadoras tienen direcciones físicas; los usuarios cuentan con
direcciones de correo electrónico, números telefónicos y direcciones de sus computadoras personales,
agregando llaves de acceso, directorios de trabajo, etc. En general, los valores de los atributos o son valores
primitivos tales como enteros o son en sí nombres, o una dirección de Internet como 221.230.321.111.
Servicio de nombres.
Un servicio de nombres administra una base de datos con las ligas que guardan entre sí un conjunto de
nombres textuales (legibles a primera vista por humanos) y atributos de objetos tales como computadoras y
usuarios. La operación que se presenta más comúnmente en un servicio de nombres es la resolución de un
nombre; operación que consiste en encontrar sus atributos en la base de datos.
En sistemas distribuidos, el uso de nombres para propósitos de comunicación no es del todo suficiente, por
que los procesos de comunicación van de una computadora a otra, y es necesario el conocimiento de su
ubicación. Esto nos lleva al problema de los nombres en un sistema de comunicaciones. Existen tres
conceptos básicos en esta área:
• El nombre de un objeto, por ejemplo un recurso o servidor; especifica lo que busca un proceso.
• Una dirección especifica dónde se encuentra el objeto.
• Una ruta especifica cómo llegar ahí.
Por lo regular, los nombres no consisten en simples cadenas, sino que también se forman de varios
componentes llamados contextos; por ejemplo, [email protected].
4.2. Seguridad, criptografía
La seguridad y la protección se encargan del control del uso y del acceso no autorizado a los recursos de
hardware y software de un sistema de computación, ya que organizaciones de negocios y oficinas de servicios
usan en gran medida a las computadoras para almacenar información, por lo que es necesario prevenir su uso
y acceso no autorizado.
1
Podemos clasificar a las violaciones de seguridad en tres categorías [Sing−Shiv94]:
• Liberación no autorizada de información. Ocurre cuando una persona no autorizada tiene la
posibilidad de leer y tomar ventaja de la información almacenada en una computadora. También se
incluye el uso no autorizado de un programa.
• Modificación no autorizada de información. Este tipo de violación se da cuando una persona tiene la
posibilidad de alterar la información almacenada en un sistema computacional.
• Bloqueo no autorizado de servicios. Se da cuando una persona no autorizada bloquea la capacidad de
algún usuario autorizado, a accesar la información almacenada en un sistema computacional.
La seguridad en los sistemas computacionales puede dividirse en dos tipos: seguridad externa y seguridad
interna. La seguridad externa (llamada comúnmente seguridad física), se encarga de regular el acceso al
hardware del sistema, incluyendo: discos, cintas, reguladores y no−breaks, acondicionadores de aire,
terminales, procesadores.
La seguridad interna se encarga del acceso y uso del software almacenado en el sistema. A diferencia de la
seguridad física, existe el tema de autenticación, en el cual el usuario se registra (login) en el sistema para
accesar a los recurso de hardware y software del mismo.
Protección y seguridad.
Cabe distinguir entre los conceptos de protección y seguridad. Se deben adoptar varias políticas de seguridad,
que sean diseñadas para todas las actividades realizadas en el sistema. Se emplean los mecanismos de
seguridad para implementar las políticas diseñadas. Debemos notar que las políticas de seguridad son
independientes de la tecnología usada en el sistema.
Las políticas se refieren a lo que debería hacerse y los mecanismos se refieren a cómo deberían hacerse las
cosas.
Ejemplo: Sistema de seguridad Kerberos
Kerberos es un sistema de autenticación basado en el protocolo Needham y Schroeder [Sing−Shiv94]. El
sistema fue desarrollado en el Instituto de Tecnología de Massachussets (MIT, por sus siglas en inglés) para
proveer de un variado número de servicios de autenticación y seguridad. Este protocolo es usado en el MIT
para proveer acceso seguros a NFS, el sistema de archivos Andrew y muchos otros servicios.
Principalmente, Kerberos trata con tres diferentes tipos de objetos de seguridad:
• Un boleto que es un token emitido al cliente por el servicio de entrega de tokens, con fines de presentación
a un servidor, verificando que el emisor ha sido recientemente autentificado por Kerberos.
• Se usa un autentificador, que es un token construido por un cliente y enviado a un servidor para probar la
identidad del usuario y la comunicación en uso con el servidor. El autentificador, que puede ser usado sólo
una vez, contiene el nombre del cliente y una marca de tiempo y es encriptado en la sesión en que es usado.
• Existe una llave de sesión, que es una llave secreta generada aleatoriamente por Kerberos y es enviada al
cliente, para ser usada durante la comunicación con determinado servidor.
Un servidor Kerberos es conocido como un centro de distribución de llaves (KDC, por sus siglas en inglés).
Cada KDC ofrece un Servicio de Autenticación (AS, por sus siglas en inglés) un Servicio de Concesión de
Boletos (TGS, por sus siglas en inglés). Siempre que un usuario se registra en un servidor (login), el usuario
es autentificado por el Servicio de Autenticación y se provee al proceso, que actúa a favor del usuario, con un
boleto otorgado y una llave de sesión para comunicarse con el Servicio de Entrega de Boletos (TGS).
Subsecuentemente, el proceso cliente original y sus descendientes pueden usar el boleto concesionado para
2
obtener boletos y llaves de sesión para obtener otros servicios específicos.
El sistema Kerberos usa en los boletos valores de tiempo (enteros que representan una fecha y una hora), los
cuales sirven para dos propósitos:
• Proteger contra las réplicas de mensajes viejos interceptados en la red, o la reutilización de boletos
viejos almacenados en la memoria de computadoras usadas por usuarios autorizados, y que fueron
desconectados (logged−out).
• Aplicar un tiempo de vida a los boletos, permitiendo la revocación de los derechos de un usuario,
cuando por ejemplo, los boletos expiran para autorizar a un usuario a seguir usando el sistema.
La mayoría de los servidores registrados en una red, solicitan un boleto a cada cliente al inicio de cada
interacción cliente−servidor, incluyendo almacenamiento de archivos (NFS o Argus), correo electrónico,
enlace e impresión remotos. Las llaves de acceso (passwords) de los usuarios son sólo conocidas por cada uno
de ellos y por el sistema de autenticación de Kerberos. Los servicios poseen llaves secretas que son conocidas
solamente por Kerberos y por los servidores proveedores del servicio.
Criptografía
En un sistema en el que participan varios usuarios, existe la posibilidad de que algún usuario no autorizado
intente tener acceso a información confidencial [Mullender89]. Por ejemplo, un usuario puede traspasar el
mecanismo de protección de un sistema o intervenir un canal físico, para robar información que se transporta
en la red. Debido a esto, es necesario agregar otros mecanismos de protección para que los intrusos (usuarios
no autorizados), si logran irrumpir en el sistema; no entiendan o hagan uso de la información que puedan
obtener de manera no autorizada.
La criptografía es un proceso para transformar datos [Sing−Shiv94], generalmente de datos representados
como un texto claro a un texto clave o cifrado, y que sólo puede ser convertido nuevamente en un texto claro
y entendible usando una llave en particular y aplicándole un algoritmo apropiado. Por lo general, las técnicas
de criptografía se aplican antes de que la información sea almacenada o transmitida por algún canal físico, en
el caso de una red. Existen varios tipos o categorías en que se clasifican las técnicas de encriptación de
información.
Sistemas de encriptación
• Sistemas convencionales
• Sistemas modernos
♦ Sistemas de llave pública
♦ Sistemas de llave privada
Sistemas convencionales de encriptación.
Este tipo de encriptación se basa en la sustitución de cifras, en la cual, cada caracter en un texto claro o base
es sustituido por otro caracter. Existen varias técnicas que a continuación se discuten:
Cifra Caesar.
En éste método, cada letra del texto original se transforma en la tercer letra siguiente en el alfabeto o tabla de
códigos. Por ejemplo, el texto "CASA" es transformado en "FDVD", de acuerdo al equivalente en la tabla de
códigos ASCII.
Sustitución simple.
3
En este método, cualquier permutación de letras puede ser identificado al lenguaje Español o Inglés y elimina
la relación posicional de la Cifra Caesar, debido a que cada permutación de letras es una llave, hay 26!
(>1026) llaves en una cifra como ésta, lo que hace muy costosa una búsqueda exhaustiva. Sin embargo, la
cifra por sustitución simple preserva la frecuencia de sustitución de las letras de un alfabeto porque se ejecuta
la misma sustitución en todas las ocurrencias de una letra, y puede usarse un análisis estadístico para
desencriptar la cifra.
Cifra polialfabética.
La cifra polialfabética usa una secuencia periódica de n letras de sustitución, es decir; el método actúa con n
sustituciones alfabéticas periódicamente. Este método puede tener un mayor impacto si se escoge
apropiadamente la sustitución. Una forma de aplicar este método es usar la Cifra Caesar con diferentes llaves.
Por ejemplo, se puede tener la secuencia de enteros 11, 19, 4, 22, 9, 25 y se obtendría el texto cifrado
agregando repetidamente cada entero al texto original.
Sistemas modernos de encriptación
Los métodos de criptografía moderna van más allá de los métodos tradicionales y usan información
representada en forma binaria (el texto original −plain text− y el texto cifra −cipher text− se mantienen en
forma binaria). Generalmente, en estos métodos se conocen las técnicas de encriptación y desencriptación,
pero la llave requerida para desencriptar el texto cifra se mantiene en secreto. Los esquemas de criptografía
moderna se basan en el principio de la búsqueda exhaustiva, aunque se conozca el mecanismo de
desencriptación, el procedimiento de desencriptación es tan intensivo computacionalmente, que tomaría un
tiempo prohibitivo para encontrar la llave.
Método de llave privada
La criptografía por llave privada se ha convertido en un estándar. Fue desarrollado por IBM y ha sido el
estándar usado por el gobierno de los Estados Unidos. Este método es conocido como el Estándar de
Encriptación de Datos (DES, por sus siglas en inglés), y utiliza básicamente dos operaciones:
Se usa una operación de permutación para permutar los bits de una palabra y su objetivo es difundir o esparcir
la correlación y las dependencias entre los bits de una palabra.
Una operación de sustitución reemplaza una entrada de m bits por una salida n de bits, sin que exista una
relación directa entre ambas. Generalmente, una operación de sustitución consta de tres pasos: primero, la
entrada de m bits se convierte a una forma decimal; segundo, se permuta la forma decimal (para obtener otro
número decimal); y finalmente, la salida decimal se convierte en una salida de n bits.
Procedimiento de encriptación.
El método consiste en encriptar bloques de datos de 64 bits usando una llave de 56 bits, que por detección de
errores se incrementa en 8 bits de paridad. Hay tres pasos básicos envueltos en la encriptación: primero, el
bloque del texto original sufre una permutación inicial PI, en la cual se permuta el bloque de 64 bits; segundo,
el bloque permutado sufre una transformación compleja, esta transformación usa la llave y se envuelve en 16
iteraciones; tercero, la salida del segundo paso sufre una permutación final PI−1, que resulta la inversa de la
permutación del primer paso y el resultado de este tercer paso es el bloque cifrado.
Ahora se describirá la transformación iterativa del segundo paso, que resulta la parte principal de este método.
Asignar a Li y Ri las mitades izquierda y derecha de 32 bits del bloque criptado de 64 bits, después de la
i−ésima iteración (1 <= i <= 16). Li−1, Ri−1 y ki son las entradas para la i−ésima iteración, donde ki es una
4
llave de 48 bits usada en la i−ésima iteración y es derivada de llave y el número de iteración, ki = ð(llave,i).
Para la iteración 0, L0 y R0 son respectivamente la parte izquierda y derecha del bloque de 64 bits después de
la permuta
4.3. Protección
Los usuarios de un sistema ya sea centralizado o distribuido, confían en que el sistema mantendrá segura su
información [Sing−Shiv94]. La seguridad en los sistemas de computadoras incluye muchos aspectos:
confiabilidad, autenticidad, integridad, privacía; y se relaciona con la prevención de que usuarios no
autorizados hagan uso de los datos y recursos.
El fin de estos mecanismos es el de prevenir que algunos usuarios puedan robar espacio en disco, ciclos de
procesamiento, que los archivos no sean leídos por personas ajenas o que modifiquen bases de datos que no
les pertenezcan. Los mecanismos de protección sólo resultan seguros en principio, ya que en ocasiones no son
usados propiamente y la mayoría de los problemas son causados por errores humanos.
Los mecanismos de protección tienen que poner atención en los siguientes temas:
• Privacidad de almacenamiento. Se refiere a que los usuarios deben poder mantener su información en
secreto; dicho en otras palabras, prevenir que otros usuarios la vean.
• Privacidad en el paso de mensajes. La privacidad tiene que ver con que a los usuarios se les garantice que
la información que entreguen sea usada solamente para los propósitos para los que fue remitida.
• Autenticidad. La información que se entregue a algún usuario debe ser auténtica, es decir; se debe poder
verificar y asegurar la fuente de donde proviene la información.
• Integridad. La información almacenada por el sistema no debe ser corrupta ya sea por el sistema o por
algún usuario no autorizado.
Es común que asociemos los derechos para accesar ciertos objetos a cierta persona en específico y los
derechos de acceso comúnmente son pasados de un usuario (o servidor), a cualquier proceso ejecutado por ese
usuario. Se usa el término dominio para indicar al conjunto de cosas (usuarios, servidores y procesos) que
pueden accesar a ciertos objetos; por ejemplo, el derecho de un usuario para escribir en su propio directorio es
parte del dominio de protección de cada usuario; y sin embargo, no es parte del dominio de protección de
otros usuarios, así que los procesos ejecutados por otros usuarios no heredarán el derecho de escribir sobre ése
directorio.
Los objetos resguardados por los mecanismos de protección van desde los archivos y los directorios, hasta los
procesos, y aún los mismos dominios de protección.
4.4. Archivos distribuidos; NFS
Todos los usuarios en un sistema distribuido son creadores y consumidores potenciales de información
[Mullender89]. En ocasiones, los usuarios desearían modificar o consultar su información desde una terminal
remota; lo que trae que la ubicación física o territorial del usuario requiere que la información esté disponible
desde cualquier lugar. El gran reto técnico a esta necesidad, es lograr que la información que sea compartida o
no, esté segura, sea confiable y eficiente, en una forma en que no importe el tamaño del sistema distribuido.
Al hablar de archivos, debemos tener en cuenta el medio de almacenamiento para éstos; y debemos hablar de
medios de almacenamiento permanente. Los medios de almacenamiento permanente consisten en un conjunto
de objetos que explícitamente desde su creación, son inmunes a fallas del sistema, y persisten hasta que son
físicamente destruidos.
5
En un modelo de un sistema de computación con un sólo usuario, en un sólo sitio de procesamiento; se
observan cuatro apartados clave en el sistema de archivos [Mullender89]:
• Nombres. Tiene que ver con la forma en que los usuarios pueden nombrar a los archivos, que tan largos
pueden ser los nombres de los archivos o si tienen alguna extensión.
• Interfaz de programación. Contempla la forma en los archivos serán accesados desde las aplicaciones, ya
sea por un mapa en donde se dirigen los archivos a una dirección de memoria usada por un proceso y
accesar su contenido como si fuese memoria virtual, o incorporar en el sistema operativo una serie de
operaciones para tratar a los archivos.
• Almacenamiento físico. Trata en la forma en que será llevada a cabo la organización de los archivos en los
medios de almacenamiento físico, si la interfaz de programación es independiente del medio de
almacenamiento, como se balancean los requerimientos de ejecución con los problemas de fragmentación.
• Integridad. Se debe considerar la consistencia de los archivos en contra de fallas en la alimentación
eléctrica, hardware, medio de almacenamiento y software.
Otro nivel que se considera en el diseño, es lo referido a un sistema computacional de un sólo usuario con
múltiples procesos en un sólo nodo de procesamiento [Tanenbaum96]. En este nivel toma mucha importancia
el control de concurrencias, ya que el sistema tiene que trabajar con varias reglas de sincronización.
4.5. Duplicidad
Se usa la duplicidad de los datos para mantener en línea copias de información y de otros recursos. La
duplicidad resulta un campo clave en los sistemas distribuidos, ya que provee un mejor desempeño, alta
disponibilidad y tolerancia a fallas. Por ejemplo, el sistema USENET administra copias de partidas o mensajes
emitidos a mesas de boletines a través de Internet, el sistema de nombres DNS administra copias de mapas de
nombres de direcciones de computadoras y otros recursos y es usado día a día en Internet. Otro ejemplo donde
se usa la duplicidad es en el caché de información, ya que éstos representan réplicas de un servidor en otro
[Mullender89].
A continuación se mencionan algunas de las razones principales de la duplicidad [Mullender89].
• Desempeño. La réplica de información puede ser usada para incrementar el tiempo de respuesta a un
servicio, ya que la información compartida por un número grande de usuarios no debería ser
almacenada en un sólo sitio, pues esa computadora se convertiría en un cuello de botella y
aumentarían los tiempos de respuesta. Es preferible distribuir varias copias de información en varios
servidores y lograr que cada uno de ellos atienda a un número de usuarios más reducido.
• Disponibilidad. Al tener varias copias de información en dos o más servidores independientes a fallas
ejecutando software similar, disponibles por líneas de conexión independientes, y si llegase a fallar el
servidor por defecto, el software cliente puede accesar a un servidor alternativo y obtener los servicios
requeridos.
• Tolerancia a fallas. Si cada uno de los servidores de una colección procesa en paralelo cada petición
de un cliente, entonces es posible garantizar el procesamiento correcto de una petición, aún si uno o
más de los servidores llegaran a fallar.
El mayor requerimiento que se presenta al duplicar información, es la transparencia de almacenamiento. Esto
quiere decir que los usuarios no deben preocuparse o tener en cuenta de que existen varias copias físicas de la
información.
Fallas de partición
6
Cuando llega a fallar la comunicación entre dos sitios que contienen copias de los mismos datos lógicos, se
hace difícil asegurar la consistencia mutua entre las copias[Mullender89] . Las fallas más dañinas son las
fallas de partición, las cuales fragmentan la red en subredes aisladas llamadas particiones. A menos que las
fallas de partición sean detectadas y reconocidas por todos los procesadores afectados, las modificaciones
independientes y no coordinadas pueden aplicarse a las diferentes copias de la información, comprometiendo
la correctitud (integridad) de ella.
El diseño de un algoritmo para administración de información duplicada y tolerante a fallas es notoriamente
difícil. Típicamente, las causas o extensión de las fallas de partición no pueden ser percibidas por los propios
procesadores. En el mejor de los casos, un procesador tiene la posibilidad de identificar a un procesador
dentro de su partición; pero para los aquellos que se encuentran fuera de su partición, no podrá distinguir el
caso donde se encuentran aislados. Agregando a esto, las respuestas lentas pueden causar que la red parezca
particionada cuando no lo está, complicando el diseño de un sistema tolerante a fallas.
Sin embargo, los problemas relacionados con el funcionamiento correcto de un sistema de archivos
distribuidos particionado no se limita sólo a aquellos asociados con que la información almacenada sea
correcta. Debido al costo y la complejidad de mantener información duplicada, la mayoría de los sistemas de
archivos distribuidos limitan la cantidad de réplicas a algunas cuantas copias. Ya que la información no se
encuentra duplicada en todos los sitios de la red, se pueden montar consultas (queries, − transacciones que
ejecutan operaciones para la lectura de información−) durante una partición de la red, por lo que no toda la
información se encuentre disponible en determinado momento.
Beneficios de la duplicidad
En un sistema distribuido, es común que la información se duplique para mejorar el desempeño y la
disponibilidad. Almacenando copias de información compartida en procesadores donde sea frecuentemente
accesada, se decrementará el uso de accesos de lectura remotos [Mullender89] .
Además, almacenando copias de la información que resulta crítica en procesadores con modos de falla
independientes, se aumentará la probabilidad de que estará disponible al menos una copia de la información
crítica.
Es común que la duplicidad resulte central al resolver algunos problemas de computación distribuida. Por
ejemplo, las consideraciones de modularidad y precio − desempeño que surgen en una fábrica automatizada.
Sin embargo, muchas fábricas usan dispositivos controlados por procesadores dedicados que requieren de
respuestas en tiempo real. Cualquier demora impuesta por la red a los controladores debe ser resuelta, pero en
un sistema donde la información no es duplicada o almacenada en caché, esto es difícil de garantizar debido a
la perdida de paquetes. Por lo anterior, los sistemas distribuidos de tiempo real necesitan de algún método
para duplicar información crítica requerida en rutas críticas.
La duplicidad de la información beneficia altamente el trabajo en red, ya que en el caso de alguna caída de
alguna máquina se puede propagar la falla a otras más. Puede ser necesario tener respaldos de procesos que se
restablecerán para completar el proceso interrumpido.
7
Descargar