O Agendador de Tarefas do Windows não pode acessar a pasta criptografada do EFS apesar de ser executado como um usuário com acesso

5

Eu tenho um conjunto de arquivos em lotes para ser executado através do Agendador de Tarefas no Windows Server 2008 R2. O arquivo em lote está sendo usado para girar e compactar logs do MySQL, e a pasta que contém esses logs é criptografada usando o Windows construído em criptografia EFS. Eu encontrei um script VBS que irá compactar (zip) uma pasta, e eu estou usando isso para compactar o arquivo de log antigo (s) após a rotação. O arquivo de lote é executado corretamente se eu o executar na linha de comando.

O problema é quando tento fazer com que o Agendador de Tarefas o execute. Eu tenho que definir para executar uma vez por dia, e está sendo executado como eu (eu tenho acesso e pode ver os arquivos de log criptografados, etc). Mas quando a tarefa é executada (no horário agendado ou se eu executar manualmente a tarefa) ela se engasga quando executa o script VBS, dizendo que não é autorizado. Quando o arquivo em lotes chama o CScript para executar o script VBS, o CScript está sendo executado como o mesmo usuário (eu mesmo)? Eu só estou chamando do arquivo em lote da seguinte forma:

CScript  zipIt.vbs  %TEMPDIR%  %ARCHIVEDIR%\%TARGETZIP%

Aqui está o conteúdo do script VBS:

Set objArgs = WScript.Arguments
InputFolder = objArgs(0)
ZipFile = objArgs(1)
CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" ^& Chr(5) ^& Chr(6) ^& String(18, vbNullChar)
Set objShell = CreateObject("Shell.Application")
Set source = objShell.NameSpace(InputFolder).Items
objShell.NameSpace(ZipFile).CopyHere(source)
wScript.Sleep 2000

Não sou muito familiarizado com a administração do VBS ou do Windows em geral, mas acredito que esse script esteja com problemas para criar um novo arquivo na pasta criptografada. Porque quando eu desligo a criptografia de pasta ele funciona bem no Agendador de Tarefas. Eu estava pensando em chamar o CScript usando "Runas" com minhas próprias credenciais, mas eu não gostaria de ter minha senha armazenada no arquivo em lotes, já que outros usuários têm acesso a esses arquivos (DatabaseAdmin, etc). No Agendador de tarefas, há uma opção para "Executar com privilégios mais altos". Isso resolveria o problema? Eu estava evitando isso porque imaginei que deveria tentar descobrir como fazê-lo funcionar com o mínimo de privilégios possíveis.

ATUALIZAÇÃO: Enquanto bisbilhotava, descobri que na verdade NÃO tenho capacidade de descriptografar o arquivo de log do MySQL, mesmo que eu tenha essa capacidade para a pasta de contenção (verificada pelo cipher.exe / c). A única conta com permissão de não criptografia era SYSTEM. Isto pode ser porque o log do MySQL é criado pela ferramenta "MySQLAdmin flush-logs". Pelo que entendi, arquivos criados por aplicativos são de propriedade do sistema (não 100% de certeza sobre isso). Talvez eu tenha que chamar MySQLAdmin flush-logs no meu script usando "runas". Mas então eu tenho o mesmo problema de não querer armazenar minhas credenciais no arquivo de lote em texto claro. Testarei quando puder.

Qualquer ajuda é apreciada.

    
por zako42 18.11.2013 / 21:45

1 resposta

0

Se esse arquivo de log nunca for removido ou renomeado, você poderá tentar adicionar o acesso EFS à sua conta usando a ferramenta PsExec da SysInternals executando a codificação como a conta do sistema. Algo como:

psexec -s cipher /adduser ...

Se, no entanto, este for um arquivo rotativo que é substituído, você encontrará este problema com todos os arquivos que o MySQL cria desde que ele está sendo executado na conta do sistema. Se esse for o caso, você deve considerar a execução do servidor MySQL como uma conta de usuário específica com uma senha conhecida e um certificado EFS, seja sua própria conta ou uma conta dedicada. Esta é a mesma conta que você precisará usar para executar o script agendado.

    
por 09.04.2015 / 17:14