6.5. Protección Basada en el Lenguaje
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.
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.
- Las necesidades de protección se declaran sencillamente y no llamando procedimientos del SO.
- Las necesidades de protección pueden expresarse independientemente de los recursos que ofrece el SO.
- El diseñador no debe proporcionar mecanismos para hacer cumplir la protección.
- Los privilegios de acceso están íntimamente relacionados con el tipo de datos que se declara.
- Seguridad: La obligación de cumplimiento por núcleo ofrece un grado de seguridad que el código de seguridad ofrecido por el compilador.
- Flexibilidad: La flexibilidad de la implementación por núcleo es limitada. Si un lenguaje no ofrece suficiente flexibilidad, se puede extender o sustituir, perturbando menos cambios en el sistema que si tuviera que modificarse el núcleo.
- Eficiencia: Se logra mayor eficiencia cuando el hardware apoya la protección. La especificación de protección en un lenguaje de programación permite describir en alto nivel las políticas de asignación y uso de recursos.
- Distribuir capacidades de manera segura y eficiente entre procesos clientes.
- Especificar el tipo de operaciones que un proceso podría invocar en un recurso asignado.
- Especificar el orden en que un proceso dado puede invocar las operaciones de un recurso.
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 2
- 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.
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.
¿Qué ventajas relativas tiene entonces el cumplimiento
basado exclusivamente en un núcleo, en comparación con el cumplimiento forzado
en gran medida por un compilador?
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.
Comentarios
Publicar un comentario