Permissão de execução no Windows
Apesar de uso não muito difundido, o Windows tem o conceito de permissão de execução para arquivos e diretórios, de forma similar aos Unix-like: em diretórios, permite atravessá-los [1] e, em arquivos, permite sua execução se for um programa — os arquivos continuam podendo ser lidos, modificados, ou quaisquer sejam as demais permissões. A permissão em questão é "Percorrer pasta/executar arquivo".
Para manter a semântica de acesso ao sistema de arquivos compatível com o MS-DOS, o Windows NT mantém o comportamento de criar todos arquivos com permissão de execução por padrão.
Nas permissões simplificadas,
Há pela internet quem recomende removê-la recursivamente (via herança, de preferência) no diretório do perfil do usuário. No entanto, não me parece ser boa ideia, visto que provavelmente quebrará instaladores que usem
Abordagem mais segura é remover a permissão apenas em pastas específicas do perfil, em particular na
O comando adiciona uma permissão de negação (
Funciona bem.
O problema é que não é trivial adicionar seletivamente a permissão de volta. Como negação tem prioridade, precisamos copiar as permissões, desabilitando a herança, e só então removê-la.
Usei propositadamente proprietário criador com intuito de tornar as coisas (um pouco) mais simples a quem roda com usuário limitado e tem uma conta administrativa separada. Infelizmente a opção "Executar como administrador" do menu de contexto leva em consideração a proibição do usuário corrente e exibe a mesma mensagem de erro acima. Porém através do comando
Claro, podemos também simplesmente copiar ou mover o arquivo para outro diretório sem a restrição. Idealmente poderíamos restringir o perfil inteiro. Programas bem feitos não deveriam colocar executáveis no perfil e instaladores usariam a pasta
Por fim, é possível desfazer com:
A permissão é propagada a partir do diretório inicial apenas. Ao removê-la, a propagação é automaticamente desfeita. O comando
Este post foi inspirado por Even though the target audience may be programmers, it can still be seen by users do blog The Old New Thing.
[1] Permite "passar" por um diretório. Imagine que, no caminho
Para manter a semântica de acesso ao sistema de arquivos compatível com o MS-DOS, o Windows NT mantém o comportamento de criar todos arquivos com permissão de execução por padrão.
Nas permissões simplificadas,
RX
(Ler & executar) é garantido a todos praticamente.Há pela internet quem recomende removê-la recursivamente (via herança, de preferência) no diretório do perfil do usuário. No entanto, não me parece ser boa ideia, visto que provavelmente quebrará instaladores que usem
%TEMP%
e aplicativos que coloquem executáveis em %APPDATA%
e/ou %LOCALAPPDATA%
, como uTorrent e Chrome. Até pode ser uma opção em sistemas bem travados, onde nada mais será instalado. Ainda assim são necessários testes.Abordagem mais segura é remover a permissão apenas em pastas específicas do perfil, em particular na
Downloads
.icacls "%USERPROFILE%\Downloads" /deny *S-1-3-0:(OI)(IO)(X)
O comando adiciona uma permissão de negação (
/deny
) de execução ((X)
) ao proprietário criador (*S-1-3-0
), que aplica-se apenas a arquivos, deixando o diretório e subdiretórios de fora, e é propagada a todos objetos descendentes ((OI)(IO)
).Funciona bem.
A mensagem de erro é confusa. O Windows pôde sim acessar o arquivo, só não pôde executá-lo... |
O problema é que não é trivial adicionar seletivamente a permissão de volta. Como negação tem prioridade, precisamos copiar as permissões, desabilitando a herança, e só então removê-la.
Usei propositadamente proprietário criador com intuito de tornar as coisas (um pouco) mais simples a quem roda com usuário limitado e tem uma conta administrativa separada. Infelizmente a opção "Executar como administrador" do menu de contexto leva em consideração a proibição do usuário corrente e exibe a mesma mensagem de erro acima. Porém através do comando
runas
dá certo.runas /user:Administrador <programa>
Claro, podemos também simplesmente copiar ou mover o arquivo para outro diretório sem a restrição. Idealmente poderíamos restringir o perfil inteiro. Programas bem feitos não deveriam colocar executáveis no perfil e instaladores usariam a pasta
%TEMP%
da conta administrativa. Isso pressupõe, contudo, que o usuário use uma conta limitada e o mundo esteja repleto de lindos unicórnios.Por fim, é possível desfazer com:
icacls "%USERPROFILE%\Downloads" /remove:d *S-1-3-0
A permissão é propagada a partir do diretório inicial apenas. Ao removê-la, a propagação é automaticamente desfeita. O comando
icacls
existe a partir do Vista e Server 2003 SP1.Este post foi inspirado por Even though the target audience may be programmers, it can still be seen by users do blog The Old New Thing.
[1] Permite "passar" por um diretório. Imagine que, no caminho
C:\aaa\bbb\ccc\
, determinado usuário tenha controle total em aaa
e ccc
, mas não em bbb
, onde não tenha permissão alguma. Se em bbb
for concedida a permissão "Percorrer pasta/executar arquivo", este conseguirá de aaa
chegar em ccc
(sem poder listar o conteúdo de bbb
nem acessar os arquivos que estiverem dentro). É ignorada para usuários e grupos listados na GPO "Configuração do Computador → Configurações do Windows → Configurações de segurança → Diretivas locais → Atribuição de direitos de usuário → Ignorar a verificação completa" — em instalações fora de domínios Microsoft, efetivamente é ignorada para todos os usuários. Neste post, apenas negamos a permissão a arquivos, de forma que essa configuração não tem importância.
Comentários
Postar um comentário