Proteção Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Discutir os objetivos e o princípio basilar da proteção de um sistema Explicar como os domínios de proteção, combinados com uma matriz de acesso, são usados para especificar os recursos a que um processo pode aceder
Bibliografia [Silberchatz2014], Capítulo 14 NOTA Os acetatos que se seguem não substituem a bibliografia aqui referida, e deverão por isso ser vistos apenas como um complemento para o estudo da matéria. Objetivos Os sistemas são constituídos por um conjunto processos e de objetos (de hardware e de software) cada objeto pode ser acedido através de um conjunto de operações bem definidas Objetivo garantir que cada objeto é acedido apenas pelos processos que têm permissões para tal e de acordo com essas permissões Benefícios na fiabilidade na segurança
Princípio basilar A definição de princípios ajuda no desenho, na manutenção e na simplificação do sistema Princípio dos privilégios mínimos devem ser atribuídosapenas osprivilégiosmínimosnecessários para os programas, utilizadores ou sistema executarem as suas tarefas ajuda a minimizar danos no caso de surgir um problema e sim, e os problema vão surgir Domínio de Proteção Um processo pode aceder a recursos de acordo com o seu domínio de proteção Direitos de acesso <nome do objeto, conjunto de direitos> o conjunto de direitos é um subconjunto de todas as operações válidas que podem ser executadas num objeto Um domínio de proteção é um conjunto de direitos de acesso os domínios não têm de ser disjuntos Fonte da imagem: [Siberschatz2010]
Implementação em UNIX O sistema consiste em 2 domínios Utilizador: apenas pode invocar instruções não privilegiadas Monitor: pode executar instruções privilegiadas, tendo controlo completo sobre o sistema UNIX Domínio é associado ao utilizador (através do userid) para que o utilizador possa executar operações priveligiadas é preciso mudar de domínio, corresponde a comutar temporariamente o userid A comutação éfeitaatravésdo sistema de ficheiros cada ficheiro está associado a um dono (owner) e a um bit de domínio (setuid) quando se executa um ficheiro e o setuid = on, o userid passa a ser o do dono do ficheiro quando a execução termina o userid volta ao estado original se setuid = off o userid não muda Matriz de acesso Modelo genérico que permite especificar as proteções através de uma matriz as linhas representam domínios as colunas representam objetos Access(i,j) é o conjunto de operações que um processo em execução no domínio i pode invocar no objeto j Fonte da imagem: [Siberschatz2010]
Proteção dinâmica Dependendo do SO, os processos podem estar associados de maneira estática a um domínio ou ter a possibilidade de mudar dinamicamente de domínio O conceito de matriz de acesso pode ser expandido para oferecer proteção dinâmica Tipos de direitos de acesso especiais: Transferência possível comutar de domínio (i.e., mudar de linha) Cópia direito de acesso a um objeto pode ser copiado de um domínio para outro (i.e., copiar permissões ao longo da coluna) Dono o domínio que é dono de um objeto pode alterar as permissões do objeto em qualquer domínio (i.e., alterar permissões ao longo da coluna) Controlo um domínio (o controlador ) pode modificar direitos de acesso de outro domínio (i.e., alterar permissões ao longo da linha) Transferência de domínios Transferência e controlo Exemplo: processo em D2 pode comutar para D3 ou D4 Controlo Exemplo: Processo em D2 pode alterar o domínio D4 Fonte da imagem: [Siberschatz2010]
Dono e cópia (alteração de colunas) Dono D 1 éo dono de F 1 e por isso pode alterar os direitos de F 1 (no exemplo, remove direito de execução em D 3 ) Cópia Processo em D 2 pode copiar operação de leitura de F 2 para outro domínio (no exemplo, para D 3 ) Implementação Podíamos ter uma tabela global, mas como na prática a tabela é poucodensa esta solução seria muito ineficiente Solução 1: uma ACL (Access Control List) por objeto (por coluna) define quem pode executar que operação num objeto Exemplo para objeto X: D 1 = Read, Write D 2 = Read D 3 = Read Solução 2: uma capability list por domínio (por linha) para cada domínio, quais as operações permitidas em cada objeto (a capability é um apontador para o objeto) Exemplo para domínio X: O 1 = Read O 4 = Read, Write, Execute O 5 = Read, Write, Delete, Copy
Como revogar direitos de acesso? Quando se usa uma ACL por objeto basta percorrer a ACL e apagar os direitos de acesso que se pretendam Simples Imediato Capability List necessário um esquema para localizar as capabilities (por objeto) no sistema antes de estas poderem ser revogadas Reaquisição as capabilities são apagadas periodicamente, e terão de ser readquiridas se necessário, e se tiverem sido revogadas, não se podem readquirir Back pointers Mantem se uma lista de ponteiros por objeto, apontando para as suas capabilities, e logo para remover, basta percorrer a lista (Ver livro para outras técnicas) Proteção baseada na linguagem A especificação da proteção numa linguagem de programação permite descrições de alto nível das políticas especificações de proteção podem ser geradas independentemente do sistema de proteção usado no SO Exemplo: Java a Java Virtual Machine (JVM) trata da proteção quando uma classe é carregada é lhe atribuído um domínio de proteção o domínio indica as operações que a classe pode (e não pode) executar (as permissões) exemplo: ler ficheiros de uma diretoria; establecer ligações de rede a JVM tem mecanismos para obrigar ao cumprimento das políticas de proteção
[Siberschatz2014] Referências e agradecimentos Operating System Concepts. Abraham Silberschatz, Peter B. Galvin, Greg Gagne, 9th edition, 2014. Parte muito relevante da inspiração para estes slides surgiu da consulta dos slides de SO do Professor Mário Calha, da Professora Dulce Domingos e dos de [Siberschatz2010]