Планировщик задач Windows не может получить доступ к зашифрованной папке EFS, несмотря на то, что он работает как пользователь с правами доступа

У меня есть пакетный файл для запуска через планировщик задач в Windows Server 2008 R2. Пакетный файл используется для вращения и сжатия журналов MySQL, и папка, содержащая эти журналы, шифруется с использованием встроенного в Windows шифрования EFS. Я нашел сценарий VBS, который сжимает (zip) папку, и я использую его для сжатия старых файлов журнала после ротации. Пакетный файл работает нормально, если я запускаю его в командной строке.

Проблема в том, что когда я пытаюсь запустить планировщик заданий. Он настроен на запуск один раз в день и работает как я сам (у меня есть доступ, я могу просматривать зашифрованные файлы журнала и т. Д.). Но когда задача запускается (или в запланированное время, или если я запускаю задачу вручную), она задыхается при запуске сценария VBS, говоря, что он не авторизован. Когда пакетный файл вызывает CScript для запуска сценария VBS, CScript работает как тот же пользователь (я)? Я просто вызываю его из командного файла следующим образом:

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

Вот содержимое скрипта 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

Я не очень разбираюсь в администрировании VBS или Windows в целом, но я предполагаю, что у этого скрипта возникают проблемы при создании нового файла в зашифрованной папке. Потому что, когда я отключаю шифрование папки, все работает нормально из планировщика заданий. Я думал о вызове CScript с использованием "Runas" с моими собственными учетными данными, но я бы не хотел, чтобы мой пароль хранился в открытом виде в пакетном файле, так как другие пользователи имеют доступ к этим файлам (DatabaseAdmin и т. Д.). В планировщике заданий есть опция "Запускать с наивысшими привилегиями". Это решит проблему? Я избегал этого, потому что решил, что должен попытаться выяснить, как заставить его работать с наименьшими возможными привилегиями.

ОБНОВЛЕНИЕ: во время осмотра я обнаружил, что на самом деле у меня нет возможности дешифровать файл журнала MySQL, даже если у меня есть такая возможность для содержащей папки (проверено cipher.exe /c). Единственной учетной записью с незашифрованным разрешением была СИСТЕМА. Это может быть связано с тем, что журнал MySQL создается с помощью инструмента "MySQLAdmin flush-logs". Насколько я понимаю, файлы, созданные приложениями, принадлежат SYSTEM (в этом нет уверенности на 100%). Может быть, мне нужно вызвать в моем скрипте MySQLAdmin, используя "runas". Но у меня та же проблема: я не хочу хранить свои учетные данные в командном файле в виде открытого текста. Буду проверять когда смогу.

Любая помощь приветствуется.

1 ответ

Если этот файл журнала никогда не удаляется и не переименовывается, вы можете попытаться добавить доступ к EFS для своей учетной записи, используя инструмент PysExec от SysInternals, в котором в качестве системной учетной записи используется шифр. Что-то вроде:

psexec -s cipher /adduser ...

Однако, если это вращающийся файл, который заменяется, то вы столкнетесь с этой проблемой с каждым файлом, который создает MySQL, так как он работает под системной учетной записью. Если это так, то вам следует рассмотреть возможность запуска сервера MySQL в качестве определенной учетной записи пользователя с известным паролем и сертификатом EFS, будь то ваша собственная учетная запись или выделенная учетная запись. Это та же учетная запись, которую вам нужно будет использовать для запуска запланированного сценария.

Другие вопросы по тегам