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:
- O SELinux deve permitir o acesso ao objeto arquivo.
- Se ACLs do arquivo (por exemplo,
setfacl
,getfacl
para uma montagem ACL) permite explicitamente / nega o acesso ao objeto, então não é necessário qualquer tratamento posterior. - 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?
linux
permissions
selinux
acl
Belmin Fernandez
fonte
fonte
Respostas:
Quando um processo executa uma operação em um arquivo, o kernel do Linux executa a verificação na seguinte ordem:
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.
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_permission
em 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 emdo_inode_permission
( fs / namei.c: 368 ) (DAC) e, em seguida, em permissões relacionadas ao LSM (MAC) emsecurity_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 ).
fonte
DAC
==Discretionary Access Control
, http://en.wikipedia.org/wiki/Discretionary_access_controlMAC
==Mandatory Access Control
, http://en.wikipedia.org/wiki/Mandatory_access_controlACL
==Access Control List
, http://en.wikipedia.org/wiki/Access_control_listO
ACL
especifica os controles a serem aplicados pelo método de controle,DAC
ouMAC
.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, enquantoDAC
permite que os usuários concedam a outros usuários acesso aos objetos que eles podem acessar.MAC
ACL
s sempre serão aplicados a uma solicitação primeiro e, se o acesso for negado, o processamento será interrompido. Se o acesso for permitido, osDAC
ACL
s serão aplicados e, novamente, se o acesso for negado, o processamento será interrompido. Somente se o acesso for concedido por esMAC
eDAC
ACL
o usuário poderá acessar o objeto solicitado.SELinux
é umaMAC
implementação para Linux (existem outras), enquanto asrwx
permissões de arquivo tradicionais , combinadas com o usuário e o grupo proprietário, formam o completoDAC
ACL
. ASELinux
'política' é essencialmente aMAC
ACL
.fonte
setfacl
) estão?setacl
estende o sistema de arquivos básicoACL
para permitir que mais de um usuário ou grupo seja atribuído aACL
arquivos e diretórios. Essa também é umaDAC
implementação e, portanto, é aplicada após osSELinux
MAC
ACL
s.setfacl
ACLs definidas explicitamente substituem as permissões tradicionais. Isso é verdade em todos os casos?setacl
/setfacl
ACL
s substituirá o tradicional 'simples'ACL
no arquivo.setfacl
pertence à resposta.Desculpe por questionar, mas acho que algumas das respostas aqui podem estar incorretas. Diretamente do http://docs.fedoraproject.org/pt-BR/Fedora/13/html/Security-Enhanced_Linux/sect-Security-Enhanced_Linux-Working_with_SELinux-SELinux_Contexts_Labeling_Files.html do Fedora :
fonte