Controlo de Acesso de Utilizadores, Aplicações e Máquinas
Identificação
Para que se possa controlar o acesso aos recursos de um sistema informático é necessário antes de mais um sistema
de identificação para as entidades que realizam o acesso.
Os utilizadores são geralmente identificados através de nomes curtos, obedecendo a certas restrições, geralmente
utiliza-se o primeiro ou o último nome do utilizador real, ou por exemplo as respectivas iniciais. Normalmente não são
permitidos espaços, e as letras maiusculas e minusculas podem ou não ter o mesmo significado.
Internamente, por razões práticas o sistema atribui a cada utilizador um número de identificação, geralmente conhecido por
UID ("User IDentifier").
As aplicações em execução (processos) usam geralmente identificadores de utilizadores. Normalmente a identificação
adoptada é a do utilizador que tomou a iniciativa de "arrancar" a aplicação, mas existe geralmente a possibilidade (controlada) de
a aplicação adoptar também a identificação do proprietário do ficheiro executável.
As máquinas são habitualmente identificadas pelo seu nome ou endereço, a identificação de máquinas para controlo de acesso
tem muitas vezes uma utilização complementar relativamente à identificação de utilizadores, por exemplo para restringir as
máquinas que um dado utilizador pode usar.
A identificação de máquinas também pode ser usada para definir acessos de forma independente da identificação de utilizador,
por exemplo definindo quais as máquinas que têm acesso a determinados serviços. Para que este mecanismo seja fiável é necessário
um total controlo sob a rede, ou então a existencia de um processo de autenticação das máquinas, evitando que um intruso utilize
uma máquina não autorizada para simular uma máquina autorizada.
Qualquer identificação só podem ser aceite depois de autenticada, no caso de endereços de máquinas isto pode ser
dispensado numa rede local sobre a qual existe um grande controlo.
Controlo de acesso de utilizadores
Excluindo o controlo de acesso de máquinas, tudo se resume geralmente ao controlo do acesso de utilizadores, as aplicações
ficam automaticamente englobadas pelas razões anteriormente apontadas.
Os principios de implementação do controlo de acesso são simples: para cada objecto do sistema é necessário
definir quais os direitos (permissões) que cada utilizador possui, o sistema operativo utiliza estas definições para decidir
se deve ou não autorizar uma determinada operação requesitada por um utilizador.
Grupos de Utilizadores
Dado o número de utilizadores e objectos envolvidos, a definição de direiros para cada par (utilizador, objecto) é
extremamente pesada, quer sob o ponto de vista do sistema quer sob o ponto de vista administrativo. A solução é agrupar,
surge assim o conceito de grupo de utilizadores, normalmente é também identificado por um nome e possui também um
número de identificação interno: GID ("Group IDentifier").
O principio de funcionamento é simples, se um dado grupo possui determinados direitos sobre um objecto, então
todos os membros desse grupo possuem esses direitos. Eventuais direitos adicionais que um utilizador possui sobre
o objecto acomulam com os direitos derivados do facto de pertencer ao grupo.
Geralmente existe um grupo ao qual pertencem todos os utilizadores, este grupo pode ou não ser explicito. Num caso
implicito trata-se de definir direitos por omissão (ou direitos mínimos), um utilizador que não possui nunhum direito explicito sobre o objecto
(quer particularmente, quer via grupos a que pertence) possui pelo menos aquelas direitos mínimos.
Colocam-se algumas questões quando um utilizador pertence a vários grupos, por exemplo quando um utilizador
cria um ficheiro com direitos de leitura para o grupo, a que grupo se está a referir ? Este problema pode ser
resolvido de várias formas, por exemplo associando ao ficheiro o grupo a que pertence.
Também os objectos podem ser agrupados segundo algum principio para facilitar a definição de direitos. O modo de o
fazer depende do tipo de objecto.
Direitos sobre Objectos
Obviamente que o tipo de direitos e forma de os definir depende do tipo de objecto, podemos distiguir os
seguintes componentes de um sistema informático:
- Processador
- Memória (memória central)
- Dispositivos periféricos
Num sistema multi-utilizador, as aplicações em execução pertencem a diferentes utilizadores. Cada aplicação em
execução (processo) possui também um UID, corresponde geralmente ao UID do utilizador que a está a usar. O sistema
operativo verifica se o UID em questão possui direitos que permitem a realização das tarefas requesitadas.
Num sistema operativo protegido, as aplicações não acedem directamente aos objectos, todos os acessos são realizados
por invocação de funções do sistema operativo ("system-calls"). Só assim é possivel uma implementação eficiênte do
controlo de acesso.
A acesso aos processadores deve ser inteiramente controlado pelo sistema operativo, num sistema mono-processador,
cada aplicação em execução tem direito a uma fatia de tempo de utilização, este mecanismo é totalmente controlado pelo
sistema operativo. O controlo do processador não pode simplesmente se cedido a um processo esperando que este seja bem
comportado e o devolva.
A utilização da memória central num sistema multi-utilizador deve ser especialmente cuidada, a solução mais comum
é a utilização de uma separação total: cada aplicação em execução tem à sua disposição um determinado número de blocos
de memória à qual mais nenhuma aplicação tem acesso. Igualmente uma aplicação em execução apenas tem acesso aos blocos
de memória que lhe pertencem. Como não existe partilha de memória central entre as aplicações, a eventual necessidade
de comunicação terá de ser assegurada por mecanismos especiais (IPC - "Inter-process Comunication").
Os dispositivos periféricos concentram a maioria do esforço em termos de controlo de acesso, principalmente porque
se pretende uma maior flexibilidade do foi sugerido para a memória central.
De entre os dispositivos periféricos destacam-se os sistemas de ficheiros, por um lado pretende-se uma grande
flexibilidade, por outro lado o número de objectos pode ser muito grande. As definições de direitos podem ser implementadas
em diversos níveis:
- Volume ou disco lógico
- Directório
- Ficheiro
- Registo/Campo
A maioria dos sistemas operativos genéricos ficam-se pelo nível de ficheiro, deixando a implementação de controlo
mais fino para aplicações especializadas, como por exemplo gestores de bases de dados.
Uma vez definido um mecanismo de controlo de acessos para os sistemas de ficheiros é tentador tratar todos os dispositivos
como ficheiros, isso é muito comum para dispositivos de acesso sequencial como impressoras, mas pode ser
generalizado a todos os dispositivos de "hardware" e "software" (caso do Unix).
Como os sistemas de ficheiros são geralmente organizados em forma hierárquica o mais simples é usar essa hierarquia
para agrupar os objectos por forma a simplificar a administração de direitos. Por exemplo em muitos sistemas os direitos
definidos num ponto da estrutura em árvore propagam-se em sentido ascendente.
O tipo de direitos básicos que se definem habitualmente sobre sistemas de ficheiros são "leitura" e "escrita", mas
dependendo do tipo de sistema podem ser definidos outros direitos: "execução", "listagem",
"alteração de atributos", "impressão", "eliminação", "adição de dados", "bloqueio".
Mesmo usando a hierarquia dos sistemas de ficheiros a definição de direitos sobre os objectos pode ser pesada, existem
duas abordagens base:
- Associar a cada objecto uma lista de utilizadores e respectivos direitos (ACL - Access Control List).
- Associar a cada utilizador uma lista de objectos e respectivos direitos.
Toda esta informação pode ficar guardada numa única base de dados do sistema, ou ser distribuída pelo sistema de ficheiros
sob a forma de ACL's ou directamente associada aos objectos. Seja como for, o acesso do S.O. a esta informação deve ser
o mais rápido possivel, sempre que um determinado tipo de acesso a um objecto é requesitado por um utilizador/aplicação,
o S.O. tem de verificar os direitos, directamente através do UID e indirectamente, através dos GID.
Por exemplo, numa versão centralizada, com a base de dados organizada por utilizador/grupo, a remoção de um objecto pode tornar-se
pesada, obrigando a percorrer todos os utilizadores e grupos do sistema.
Geralmente combinam-se os vários métodos por forma a minimizar a quantidade de informação. O espaço ocupado depende em
grande parte do tipo de direitos definidos, no caso mais simples ("leitura" e "escrita") bastam dois bits para cada associação
(utilizador; objecto).
Sem a necessidade de implementar uma ACL, geralmente cada objecto possui um dono ou proprietário ("owner"),
também pode ficar associado ao objecto um grupo de utilizadores, e em certos sistemas é possivel associar também
direitos a atribuir aos restantes utilizadores.
O controlo de acesso só faz sentido se existe um sistema de autenticação fiável que garanta que cada perfil de utilizador
(UID) apenas pode ser usado por quem de direito. O método mais comum é a utilização de uma "password".
|