Operating systems must be flexible in their support for security
policies, providing sufficient mechanisms for supporting the wide
variety of real-world security policies. Such flexibility requires
controlling the propagation of access rights, enforcing fine-grained
access rights and supporting the revocation of previously granted
access rights. Previous systems are lacking in at least one of these
areas. In this paper we present an operating system security
architecture that solves these problems. Control over propagation is
provided by ensuring that the security policy is consulted for every
security decision. This control is achieved without significant
performance degradation through the use of a security decision caching
mechanism that ensures a consistent view of policy decisions. Both
fine-grained access rights and revocation support are provided by
mechanisms that are directly integrated into the service-providing
components of the system. The architecture is described through its
prototype implementation in the Flask microkernel-based operating
system, and the policy flexibility of the prototype is evaluated. We
present initial evidence that the architecture's impact on both
performance and code complexity is modest. Moreover, our architecture
is applicable to many other types of operating systems and
environments.