Назад | Перейти на главную страницу

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

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

Проблема в том, что я пытаюсь запустить его в планировщике задач. У меня он настроен на запуск один раз в день и работает как я (у меня есть доступ и я могу просматривать зашифрованные файлы журнала и т. Д.). Но когда задача запускается (либо в запланированное время, либо если я запускаю ее вручную), она задыхается при запуске сценария 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). Единственная учетная запись с разрешением на расшифровку - SYSTEM. Это могло быть потому, что журнал MySQL создается инструментом MySQLAdmin flush-logs. Насколько я понимаю, файлы, создаваемые приложениями, принадлежат SYSTEM (не уверен на 100% в этом). Может быть, мне нужно вызвать MySQLAdmin flush-logs в моем скрипте с помощью runas. Но тогда у меня та же проблема, что я не хочу хранить свои учетные данные в пакетном файле в виде открытого текста. Буду тестировать, когда смогу.

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

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

psexec -s cipher /adduser ...

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