Windows Server 2012 perde permissões de segurança de diretório ao reiniciar

Um cliente telefonou para o suporte da NetHouse Informática informando que, ao reiniciar, o servidor (Windows Server 2012) perdia as permissões de segurança de diretórios de compartilhamentos do sistema:

  • C:\Bsoftsistemas (compartilhado como Bsoftsistemas)
  • E:\ (compartilhado como E:)

Ambos os diretórios são compartilhados com permissão de alteração para o grupo Todos. Ao reiniciar, as permissões de compartilhamento para o grupo Todos era mantida; porém, o grupo Todos era removido das permissões de segurança (NTFS) do diretório. Logo, os usuários perdiam acesso aos compartilhamentos quando o sistema era reiniciado.

Não pude encontrar nenhuma explicação para o fênomeno durante a realização do chamado, então decidi adotar uma solução de contorno (workaround) no mínimo interessante: restaurar as permissões de segurança para o grupo Todos a cada reinicialização do computador através do ICACLS.

A Microsoft trouxe algumas soluções voltadas a terrível tarefa de atribuir automaticamente permissões NTFS, incluindo as variantes lentas e problemáticas do CACLS. Antes de continuarmos, vamos conhecer a história das ferramentas da Microsoft para definir permissões [1]:

  • CACLS.EXE foi desenvolvido para o Windows NT4.0 e usado no Windows 2000 para atribuir permissões NTFS a arquivos. Essa ferramenta não era tão poderosa e possuía apenas um subconjunto limitado de permissões NTFS.
  • XCACLS.EXE (presente no Windows 2000 Resource Kit ou Microsoft Windows 2003 Support Tools) foi desenvolvida para prover maiores opções para Windows 2000 e posteriores. Porém, haviam alguns bugs nos quais permissões NTFS eram ordenadas incorretamente e poderiam corromper as permissões do arquivo/diretório.
  • XCACLS.VBS é uma versão re-escrita em VBS do XCACLS.EXE sem os bugs. Porém, ela era muito lenta! Infelizmente, esse era o único meio (oficial) de atribuir permissões de arquivo de um modo correto/estável no 2000/2003/XP. O XCACLS.VBS não é suportado pela Microsoft. Ele está documentado na Q825751.

Agora, alguns anos depois, a Microsoft finalmente introduziu o novo e poderoso ICACLS.EXE. Ele está incluído no Windows Server 2003 SP2, Windows Vista, Windows Server 2008 e posteriores. Essa ferramenta é muito mais rápida ao atribuir permissões, possuí funcionalidade de backup de permissões de arquivos/diretórios para um único arquivo. Você pode restaurá-las com a mesma ferramenta, o que é muito mais rápido do que definir todas as permissões manualmente. [1]

Você também pode usar a GUI do Windows:

image

Ao tentar alterar as permissões através da interface gráfica da raiz do disco E: para o grupo Todos em um disco de 2TB, exibia a janela de progresso da atribuição de permissões, porém ela travava.

Porém, consegui atribuir as permissões normalmente através do ICACLS, e acompanhar o progresso de atribuição das permissões através do Process Monitor. Para atribuir permissões para o grupo Todos C:\Bsoftsistemas e na raiz do disco E:\ através do ICACLS, abra o Prompt de comando como Administrador e execute os seguintes comandos [2]:

C:\Windows\system32\icacls.exe "C:\Bsoftsistemas" /grant *S-1-1-0:F /t
C:\Windows\system32\icacls.exe "E:" /grant *S-1-1-0:F /t

O comando acima atribuirá (“/grant”) todas as permissões do grupo S-1-1-0 (SID do grupo Todos) com Controle total (“F”) em todos os arquivos e seus subdiretórios (“/t”). Você encontra a definição de cada parâmetro disponível no “icacls” e exemplos na documentação oficial do programa.

Podemos criar o agendamento da execução do ICACLS a cada inicialização do computador através do Agendador de tarefas.

  1. Pressione a combinação de teclas Windows + R para abrir a janela Executar e digite o comando taskschd.msc para executar o Agendador de tarefas. Você também pode executá-lo abrindo a tela Iniciar e digitando Agendador de tarefas.
  2. Dê botão direito em Biblioteca do Agendador (canto esquerdo) e selecione Criar Tarefa Básica… agendador-tarefa-basica
  3. Informe o nome da tarefa (pode ser qualquer nome) e clique em Avançar. image
  4. Selecione a opção Ao iniciar o computador e clique em Avançar. 2020-01-14_10h46_06
  5. Selecione a opção Iniciar um programa e clique em Avançar.2020-01-14_10h46_11
  6. Preencha os campos com os seguintes valores (você poderá adicionar outros comandos posteriormente, caso esteja alterando a permissão de dois ou mais diretórios) e clique em Avançar:
    1. Programa/script: C:\Windows\system32\icacls.exe
    2. Adicione argumentos (opcional): “C:\Bsoftsistemas” /grant *S-1-1-0:F /t
    3. Iniciar em (opcional): C:\Windows\system322020-01-14_10h46_35
  7. Marque a caixa de seleção Abrir a caixa de Propriedades da tarefa depois de clicar em Concluir e clique em Concluir. Caso você não tenha selecionado a caixa de seleção antes de clicar em Concluir, você pode exibir a janela de Propriedades da tarefa através de duplo-clique no nome da tarefa em Biblioteca do agendador.image
  8. Na guia Geral, selecione a opção Executar estando o usuário conectado ou não e marque as caixas de seleção Executar com privilégios mais altos para que a tarefa não seja limitada pelo Controle de Conta de Usuário (UAC). Certifique-se que o usuário selecionado em Opções de segurança possua permissões para alterar as permissões do(s) diretório(s) informado(s) na tarefa. Na figura abaixo, a tarefa será executada pela conta Administrador.image
  9. Na guia Ações, você pode adicionar dois ou mais comandos a tarefa através do botão Novo (será exibida uma janela com os mesmos campos do passo 6). Note que você pode alterar a ordem de execução dos comandos através dos botões acima e abaixo. A ordem dos comandos determina a sequência que eles serão executados. Na figura abaixo, o comando ICACLS será executado primeiramente no diretório C:\Bsoftsistemas e posteriormente na raiz do disco E:. Se executássemos o comando primeiramente na raiz do disco E:, o diretório C:\Bsoftsistemas não estaria disponível para o grupo Todos enquanto o comando estivésse em execução na raiz do disco E:. Dependendo do número de subdiretórios/arquivos na raiz do disco E:, o programa da Bsoft ficaria indisponível enquanto as permissões da raiz do disco E: são definidas. Portanto, a prioridade é reestabelecer as permissões de acesso ao programa da Bsoft antes de alterar as permissões da raiz do disco E:.image
  10. Ao clicar em OK, você precisará informar as credenciais do usuário selecionado para executar a tarefa na guia Geral.

Você pode testar se a tarefa será executada normalmente através do Agendador de tarefas. Dê botão direito direito no nome da tarefa em Biblioteca do Agendador e clique em Executar.

image

Você pode verificar se a tarefa está sendo executada em segundo-plano através do Process Monitor.

image
Acompanhando a execução do ICACLS em segundo-plano através do Process Monitor.

Referências

  1. Finally, ICACLS Valhalla!. Roel Broersma, 2007.
  2. Using cacls to set permissions. Spiceworks.

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.