Sistemas operativos modernos
servidor caìcuìa J[Objeto, Nuevosjderechos. Verificación) y genera una nueva capacidad con este valor en el cuarto campo. Cabe señalar que se usa el valor original de Verificación porque las demás capacidades vigentes dependen de él. Esta nueva capacidad se devuelve al proceso solicitante. Ahora el usuario puede propor cionarla a un amigo con sólo enviársela en un mensaje. Si el amigo enciende bits de derechos que deberían estar apagados, el servidor lo detectará cuando se use la capacidad, pues el valor de / n o corresponderá al campo de derechos falso. Puesto que el amigo no conoce el verdade ro campo de verificación, no podrá generar una capacidad que corresponda a los bits de dere chos falsos. Este esquema se desarrolló para el sistema Amoeba y se usó ahí en forma amplia (Tanenbaum etal., 1990). Además de los derechos específicos que dependen del objeto, como leer y ejecutar, las ca pacidades (tanto de kemel como protegidas en forma criptográfica) por lo regular fienen dere chos genéricos que se aplican a todos los objetos. Como ejemplos de derechos genéricos podemos mencionar: 1. Copiar capacidad: crear una nueva capacidad para el mismo objeto. 2. Copiar objeto: crear un objeto repefido con una nueva capacidad. 3. Eliminar capacidad: borrar una entrada de la lista C; el objeto no se afecta. 4. Destruir objeto: eliminar de manera permanente un objeto y una capacidad. Un último comentario que vale la pena hacer acerca de los sistemas de capacidades es que en la versión administrada por el kernel es muy difícil revocar el acceso a un objeto. Para el sistema es difícil encontrar todas las capacidades vigentes para cualquier objeto a fin de revo carlas, pues podrían estar almacenadas en listas C en todo el disco. Una estrategia es hacer que cada capacidad apunte a un objeto indirecto, no al objeto mismo. Si se hace que el objeto in directo apunte al objeto real, el sistema siempre podrá romper esa conexión, anulando la vali dez de las capacidades. (Si después se presenta al sistema una capacidad para el objeto indirecto, el usuario descubrirá que ahora el objeto indirecto apunta a un objeto nulo.) En el esquema de Amoeba, la revocación es fácil. Lo único que debe hacerse es modificar el campo de verificación almacenado con el objeto. De un solo golpe se anula la validez de todas las capacidades existentes. Sin embargo, ninguno de los dos esquemas permite una revocación selectiva; es decir, revocar el permiso de Juan, por ejemplo, pero no los de los demás. Este de fecto por lo general es un problema reconocido de todos los sistemas de capacidades. Otro problema general es cómo asegurarse de que el dueño de una capacidad válida no en tregue una copia a 1000 de sus mejores amigos. El problema se resuelve haciendo que el kemel administre las capacidades, como en Hydra, pero esta solución no funciona bien en un sistema distribuido como Amoeba. Por otra parte, las capacidades resuelven de forma muy elegante el problema de ejecutar código móvil en cajas de arena. Cuando se inicia un programa ajeno, se le asigna una lista de capacidades que sólo contiene ias capacidades que el dueño de la máquina quiere otorgarle, co mo capacidad para escribir en la pantalla y capacidad para leer y escribir archivos en un direc
RkJQdWJsaXNoZXIy MjI4NDcx