Como remover apenas a permissão para excluir o symlink do usuário comum no Windows

2

Nós temos um programa que faz o diretório temporário HT on %USERPROFILE%\AppData\Local\Temp e trabalha lá, e apaga o diretório temporário quando eu saio do programa. Eu quero fazer o programa gerar seu diretório temporário não em Temp , mas na partição SSD F:\Somewhere .

Infelizmente, o programa não possui configurações para alterar o diretório temporário. Este ambiente (Windows) está instalado no HDD e possui partição SSD. (Não consigo instalar o Windows no SSD por causa de alguns problemas.)

Então, acho que eu faço o link simbólico HT em %USERPROFILE%\AppData\Local\Temp , que direciona para F:\Somewhere . Parece ser trabalhado. No entanto, não consegui impedir que o programa excluísse o link simbólico HT . Em outras palavras, eu preciso fazer o symlink novamente e novamente depois que eu sair do programa.

Como posso evitar a exclusão do symlink do programa?

Solução que tentei

Eu tentei remover a permissão de exclusão do symlink %USERPROFILE%\AppData\Local\Temp\HT do usuário comum (O programa está sendo executado pelo usuário comum, não pelo usuário atualizado pelo UAC).

Da propriedade - > Segurança - > Avançado (?, meu ambiente é japonês, mas parece ser avançado) 1. Desativar herança de permissão 2. Adicione a política Rejeitar sobre a permissão de exclusão para usuário, administrador e sistema usuais

Mas o programa pode excluir o link simbólico.

Pergunta resumida

Como posso evitar a exclusão do symlink do diretório do programa que é executado fora da autoridade administrativa?

P.S. desculpe por palavras não usuais. Estou usando janelas em japonês, então não consegui encontrar uma frase em inglês adequada.

Notas adicionais

  • Eu não quero alterar o diretório Temp para outro diretório / partição completamente. Apenas o diretório HT apenas em ~~/Temp/HT .
por QuietJoon 09.11.2018 / 13:15

2 respostas

1

A alteração das permissões no link simbólico não funciona porque o "excluir subpastas e arquivos" no diretório pai tem precedência sobre quaisquer permissões no próprio link simbólico. Eu não recomendo modificar as permissões no diretório pai neste caso, uma vez que muitos softwares dependem do diretório temporário e quaisquer mudanças nas permissões podem causar problemas que em muitos casos seriam bastante difíceis de diagnosticar.

Em vez disso, você pode definir o sinalizador somente leitura no symlink. Observe que você deve fazer isso a partir da linha de comandos, porque a GUI do Windows Explorer não suporta o uso do sinalizador somente leitura para diretórios (consulte a nota de rodapé). Esses comandos devem funcionar:

cd /d %temp%
attrib /L +r HT

Você também pode precisar alterar as permissões para impedir que o link simbólico seja movido ou que o sinalizador somente leitura seja redefinido:

icacls HT /L /deny Everyone:(M)

Existe ainda o risco de o software responder mal à incapacidade de remover o link simbólico, por exemplo, ao travar. Não há nada que você possa fazer nesse caso, além de tentar definir as coisas para que o link simbólico seja recriado automaticamente conforme necessário, mas felizmente isso é raro.

Nota de rodapé:

O Explorer também não mostra o sinalizador somente leitura para diretórios, e irá até mesmo avisar ao usuário que o sinalizador somente leitura não tem efeito nos diretórios, o que é verdadeiro a partir de um certo ponto de vista, suponho, uma vez que não impede que o diretório seja renomeado ou movido ou que o conteúdo seja alterado como se poderia esperar. Tudo o que o sinalizador somente leitura faz é evitar que um diretório vazio (ou um link simbólico de diretório, independentemente de o destino estar vazio) seja removido, mas, neste caso específico, é exatamente isso que é necessário.

Nota lateral:

Os direitos de acesso específicos que precisam ser bloqueados são os Atributos de Gravação (WA) para impedir que o sinalizador somente leitura seja redefinido e Sincronizar (S) para impedir que o link simbólico seja movido para a Lixeira. Note-se que esta abordagem só funcionará como desejado com um link simbólico de diretório, não um diretório comum, porque o direito Sincronizar é necessário para acessar o conteúdo de um diretório. Não parece haver nenhuma maneira no NTFS de impedir que um diretório comum seja movido sem alterar as permissões no pai.

    
por 09.11.2018 / 22:23
3

%USERPROFILE%\AppData\Local\Temp é o valor padrão da variável de ambiente TMP e TEMP . Muito provavelmente O aplicativo está usando essa variável para obter o diretório temporário.

Basta definir a variável como F:\ , por exemplo iniciando-o através de um arquivo .bat , e seu link simbólico não deve ser mais necessário.

    
por 09.11.2018 / 14:09