“Negar tem prioridade sobre Permitir” ... Nem sempre!!!
Por: Daniel Aguiar / Technical Reviewer: Diana Hernandez
Este post é para desmistificar um dos chavões mais comuns sobre permissões NTFS:
“Negar tem prioridade sobre Permitir”
A frase acima não pode ser tomada como verdadeira para todos os casos. Recentemente trabalhei em um caso onde a má interpretação dela levou um cliente a abrir uma brecha de segurança.
Exemplo
Vejam a imagem abaixo.
Se você pensar “Negar tem prioridade sobre Permitir”, é bem provável que chegue a conclusão que o usuário da imagem acima, não terá acesso ao determinado recurso.
Porém não é verdade. Apesar do Negar (Deny) estar concorrendo diretamente com o Permitir (Allow), esse usuário vai sim ter acesso ao recurso.
Nova Idéia
Para entender melhor a idéia, tenha em mente uma nova sentença:
“Negar tem prioridade sobre Permitir, desde que ambos estejam no mesmo nível!”
Naquela imagem acima, você viu claramente que as permissões foram herdadas (pois estão todas na cor cinza) e sendo assim (por mais estranho que pareça) a permissão que vai preceder é a ultima que foi herdada.
Estranho? Então vamos facilitar...
Cenário
Considere o cenário abaixo onde temos as pastas (objetos) e uma tabela que indica se as permissões foram configuradas de maneira explicita ou se foram herdadas:
Agora, o que aconteceria se tentarmos acessar diretamente a pasta “Salários”?
Por exemplo: “\\localhost\c$\contosofinanças\salários\”
Como na pasta “Salários” não existem permissões explicitas, a ultima permissão herdada prevalecerá. Sendo assim são as permissões da pasta “Finanças” que ditaram os acessos à pasta “Salários”.
A Lógica
Para chegar a conclusão acima, o NTFS ira fazer o seguinte processo:
- Checar se existe Negar explicito na pasta Salários >>> Não possui.
- Checar se existe Permitir explicito na pasta Salários >>> Não possui.
- Checar se a herança está habilitada na pasta Salários >>> Herança habilitada, seguir conferencia no objeto pai (pasta Finanças).
- Checar se existe Negar explicito na pasta Finanças >>> Não possui.
- Checar se existe Permitir explicito na pasta Finanças >>> Possui!!!
- Liberar acesso do usuário ao objeto!!!
Veja que o NTFS sempre vai checar primeiro se existe um Negar (Deny) e depois ele verifica se tem Permitir (Allow), daí a expressão “Negar tem prioridade sobre permitir”...
Mas é claro... O NTFS não encontrando permissões configuradas no objeto filho ele procura pelas heranças vindas do primeiro objeto Pai.
No nosso caso, a primeira permissão encontrada foi Permitir (Allow) (vinda por herança da pasta “Finanças”).
A lógica acima também pode ser representada no diagrama a seguir.
Sendo assim: Negar tem prioridade sobre permitir???
Sim! Desde que no mesmo objeto.
Um pequeno, mas importante lembrete
Não se esqueça que você sempre pode (eu diria... “deve”) usar as “Permissões Efetivas” para validar as permissões de usuário
- O link é sobre como usar as permissões efetivas
- O link é sobre “Como as permissões efetivas são determinadas”
Referencia extra...
Um post, de muito tempo atrás (em inglês) trata do mesmo assunto de forma diferente
Verifiquem a figura 6 do post acima, muito esclarecedora também.
Conclusão
Bom agora que você entendeu a idéia, quando você ver algo como na situação a seguir...
... Você vai lembrar que: “Nem sempre, negar tem prioridade sobre permitir” e que você terá que validar as heranças antes de afirmar algo.
Abraços.
Comments
Anonymous
April 21, 2009
E ai Daniel , muito bom o Artigo ! Parabens !Anonymous
April 22, 2009
Excelente artigo, tem muito tempo que não tenho que lidar com quirks de segurança, post guardado para futura referência!