La
especialización de protección en un lenguaje de programación permite la descripción
de alto nivel de políticas para la asignación y usos de recursos.
La especificación de protección en un
lenguaje de programación permite la descripción de alto nivel de políticas para
la asignación y uso de recursos.
La implementación del lenguaje puede proveer
software para hacer cumplir la protección cuando no se pueda validar si el
hardware está soportado.
Interpretar las especificaciones de
protección para generar llamadas en cualquier sistema de protección provisto
por el hardware y el SO.
Protección en java:
La protección la maneja la máquina virtual
(JVM)
La JVM asigna un dominio de protección a una
clase cuando la carga.
El dominio de protección indica qué operaciones
puede (y no puede) realizar la clase.
Si se invoca un método de biblioteca y éste
realiza una operación privilegiada, se examina el stack para asegurar que la
biblioteca pueda realizar la operación
La protección que se ofrece en los sistemas de
computación existentes casi siempre se ha logrado con la ayuda del núcleo de un
sistema operativo, que actúa como agente de seguridad que inspecciona y valida
cada intento por acceder a un recurso protegido. Puesto que la validación de
todos los accesos puede dar pie a un gasto extra considerable, debemos apoyarla
con hardware para reducir el costo de cada validación o bien debemos aceptar
que el diseñador del sistema podría inclinarse por sacrificar los objetivos de
la protección. Es difícil satisfacer todos estos objetivos si los mecanismos de
soporte con que se cuenta restringen la flexibilidad para implementar diversas
políticas de protección.
A medida que ha aumentado la complejidad de
los sistemas operativos, sobre todo al trata de ofrecer interfaces de más alto
nivel con el usuario, lo objetivos de la protección se han vuelto mucho más
refinados. En esta refinación observamos que los diseñadores de los diseñadores
de los sistemas de protección se han apoyado mucho en ideas que se originaron
en los lenguajes de programación y especialmente en los conceptos de tipos de
datos abstractos y objetos. Los sistemas de protección ahora se ocupan no sólo
de la identidad de un recurso al cual se intenta acceder, sino también de la
naturaleza funcional de ese acceso. En los sistemas de protección más nuevos,
el interés en la función que se invocará se extiende más allá de un conjunto de
funciones definidas por el sistema, como los métodos de acceso a archivos
estándar, para incluir funciones que también podrían ser definidas por el
usuario.
Las políticas para el uso de recursos también podrían variar, dependiendo de la aplicación, y podrían cambiar con el tiempo. Por estas razones, la protección ya no puede considerarse como un asunto que sólo concierne al diseñador de un sistema operativo; también debe estar disponible como herramienta que el diseñador de aplicaciones pueda usar para proteger los recursos de un subsistema de aplicación contra intervenciones o errores.
Aquí es donde los lenguajes de programación entran
en escena. Especificar el control de acceso deseado a un recurso compartido en
un sistema es hacer una declaración acerca del recurso. Este tipo de
declaración se puede integrar en un lenguaje mediante una extensión de su
mecanismo de tipificación. Si se declara la protección junto con la
tipificación de los datos, el diseñado de cada subsistema puede especificar sus
necesidades de protección así debería darse directamente durante la redacción
del programa, y en el lenguaje en el que el programa mismo se expresa. Este
enfoque tiene varias ventajas importantes:
Las necesidades de protección se declaran de
forma sencilla en vez de programarse como una secuencia de llamadas a procedimientos
de un sistema operativo.
Las necesidades de protección pueden expresarse
independientemente de los recursos que ofrezca un sistema operativo en
particular.
El diseñador de un subsistema no tiene que
proporcionar los mecanismos para hacer cumplir la protección.
Una notación declarativa es natural porque
los privilegios de acceso están íntimamente relacionados con el concepto
lingüístico de tipo de datos.
Hay diversas técnicas que una implementación
de lenguaje de programación puede utilizar para hacer cumplir la protección,
pero cualquiera de ellas deberá depender hasta cierto punto del grado de
soporte de una máquina subyacente y su sistema operativo.
Diferencias entre las distintas formas de protección:
Seguridad: La obligación del cumplimiento por
un núcleo ofrece un mayor grado de seguridad del sistema de protección mismo,
que el que ofrece la generación de código de verificación de protección por un
compilador. En un esquema apoyado por compilador, la seguridad depende de lo
correcto que sea el traductor, de algún mecanismo subyacente de gestión de
almacenamiento que proteja los segmentos desde los cuales se ejecuta el código
compilador y, en última instancia, de la seguridad de los archivos desde los
que se carga el programa.
Flexibilidad: Hay límites a la flexibilidad
de un núcleo de protección para implementar una política definida por el
usuario, aunque podría proporcionar recursos suficientes para que el sistema
haga cumplir sus propias políticas. Con un lenguaje de programación, se puede
declarar la política de protección y hacerse cumplir según sea necesario en una
implementación.
Eficiencia: Se logra la eficiencia máxima
cuando hardware apoya directamente el cumplimiento de la protección. En la
medida en que se requiera soporte de software, el cumplimiento basado en el lenguaje tiene
la ventaja de que es posible verificar el cumplimiento del acceso estático
fuera de línea en el momento de la compilación.
En síntesis, la especificación de la
protección en un lenguaje de programación permite describir un alto nivel de
políticas de asignación y uso de recursos.
No hay comentarios:
Publicar un comentario