Quais são as funções do DAC (permissões de arquivo), ACL e MAC (SELinux) na segurança de arquivos do Linux?

18

Preciso de alguns esclarecimentos / confirmação / elaboração sobre os diferentes papéis que DAC, ACL e MAC desempenham na segurança de arquivos do Linux.

Após algumas pesquisas na documentação, esta é minha compreensão da pilha:

  1. O SELinux deve permitir o acesso ao objeto arquivo.
  2. Se ACLs do arquivo (por exemplo, setfacl, getfaclpara uma montagem ACL) permite explicitamente / nega o acesso ao objeto, então não é necessário qualquer tratamento posterior.
  3. Caso contrário, depende das permissões do arquivo (modelo DW rwxrwxrwx).

Estou esquecendo de algo? Existem situações em que esse não é o caso?

Belmin Fernandez
fonte
2
Eu acho que você está correto. Você poderia postar o problema que está tendo?
21711 Kevin Kevin M
Peço desculpas pela pergunta malformada. Eu sinto que, quando se trata disso, eu entro no modo "tentativa e erro". Estou tentando entender com confiança e esperava que alguém pudesse compartilhar uma imagem mais clara dos papéis desempenhados por cada parte da pilha.
Belmin Fernandez 17/07/11
Editou a pergunta para esclarecer o que estou procurando nas respostas.
Belmin Fernandez 17/07/11

Respostas:

18

Quando um processo executa uma operação em um arquivo, o kernel do Linux executa a verificação na seguinte ordem:

  1. Controle de acesso discricionário (DAC) ou controle de acesso determinado pelo usuário. Isso inclui verificações clássicas de permissão no estilo UNIX e ACL (POSIX Access Control Lists) . As verificações clássicas do UNIX comparam o UID e o GID do processo atual com o UID e o GID do arquivo que está sendo acessado com relação a quais modos foram definidos (leitura / gravação / eXecute). A Lista de controle de acesso estende verificações clássicas do UNIX para permitir mais opções relacionadas ao controle de permissão.

  2. Controle de acesso obrigatório (MAC) ou controle de acesso baseado em políticas. Isso é implementado usando os Linux Security Modules (LSM), que não são mais módulos reais (costumavam ser, mas foram descartados). Eles permitem verificações adicionais baseadas em outros modelos, além das verificações de segurança clássicas do estilo UNIX. Todos esses modelos são baseados em uma política que descreve quais tipos de operações são permitidas para qual processo em que contexto.

Aqui está um exemplo de acesso a inodes (que inclui acesso a arquivos) para apoiar minha resposta com links para uma referência cruzada do Linux online . O " function_name(nome do arquivo: linha)" fornecido é para a versão 3.14 do kernel do Linux.

A função inode_permission( fs / namei.c: 449 ) primeiro verifica a permissão de leitura no próprio sistema de arquivos ( sb_permissionem fs / namei.c: 425 ) e depois chama __inode_permission( fs / namei.c: 394 ) para verificar a leitura / gravação / execução e POSIX ACL em um inode em do_inode_permission( fs / namei.c: 368 ) (DAC) e, em seguida, em permissões relacionadas ao LSM (MAC) em security_inode_permission( security / security.c: 550 ).

Havia apenas uma exceção a esse pedido (DAC e MAC): era para as verificações de mmap. Mas isso foi corrigido na versão 3.15 do kernel do Linux ( confirmação relevante ).

Siosm
fonte
Resposta excelentemente detalhada com fontes canônicas. Obrigado!
Belmin Fernandez
15

DAC== Discretionary Access Control, http://en.wikipedia.org/wiki/Discretionary_access_control
MAC == Mandatory Access Control, http://en.wikipedia.org/wiki/Mandatory_access_control
ACL == Access Control List, http://en.wikipedia.org/wiki/Access_control_list

O ACLespecifica os controles a serem aplicados pelo método de controle, DACou MAC. MACé explícito, controlado centralmente e não permite que os usuários concedam autoridade a um objeto, a menos que tenham permissões explícitas para isso, enquanto DACpermite que os usuários concedam a outros usuários acesso aos objetos que eles podem acessar.

MAC ACLs sempre serão aplicados a uma solicitação primeiro e, se o acesso for negado, o processamento será interrompido. Se o acesso for permitido, os DAC ACLs serão aplicados e, novamente, se o acesso for negado, o processamento será interrompido. Somente se o acesso for concedido por es MACe DAC ACLo usuário poderá acessar o objeto solicitado.

SELinuxé uma MACimplementação para Linux (existem outras), enquanto as rwxpermissões de arquivo tradicionais , combinadas com o usuário e o grupo proprietário, formam o completo DAC ACL. A SELinux'política' é essencialmente a MAC ACL.

Mike Insch
fonte
1
Onde as ACLs de arquivo (por exemplo setfacl) estão?
Belmin Fernandez 18/07/11
1
setaclestende o sistema de arquivos básico ACLpara permitir que mais de um usuário ou grupo seja atribuído a ACLarquivos e diretórios. Essa também é uma DACimplementação e, portanto, é aplicada após os SELinux MAC ACLs.
18711 Mike Insch
Obrigado Mike. Mais uma pergunta: Pelo que sei pelo meu teste, as setfaclACLs definidas explicitamente substituem as permissões tradicionais. Isso é verdade em todos os casos?
Belmin Fernandez 18/07
Até onde eu sei, sim, o setacl/ setfacl ACLs substituirá o tradicional 'simples' ACLno arquivo.
18711 Mike Insch
1
Mike, sua nota setfaclpertence à resposta.
Pavel Šimerda