Короткая заметка об опыте автоматизации восстановления Windows.
Одной из подработок в настоящее время у меня является сопровождение небольшого компьютерного парка в частной фирме. Направление фирмы — розничная торговля: склады, пара супермаркетов в три и четыре кассы, а также четыре небольших магазина. Контингент пользователей традиционный: бухгалтерия, кассиры, руководство. Компьютеры (всего их 45) территориально удалены друг от друга, некоторым программам (не всем) по целому ряду причин нужны административные права. Так просто исторически сложилось. Не суть. Архитектуру сети и политику управления всем этим хозяйством можно охарактеризовать одним словом: винегрет. Но я человек пришлый, менять сложившуюся систему не могу и не хочу.
Вполне понятно, что все это хозяйство разрушается со временем различными троянами и вирусами, самый мощный, беспощадный и непредсказуемый из которых имеет ДНК мало отличающуюся от вашей или моей. Запуск EXE прямо из почты с пометкой СПАМ одно из наиболее безобидных занятий. Все сидят в Интернете понятное дело (кроме касс). Уговоры и показательные порки никакие не помогают, разъяснение термина офисный планктон не возымело ни малейшего эффекта. Некоторые дамы особенно ядреные. Что-то нужно предпринимать кардинальное, не ездить же в самом деле по каждому факту для ручного восстановления ОС. Причем бюджета как такового практически нет, весь бюджет — экономия на возможном отказе от подписки KAV. Да и от основной работы отвлекаться нельзя категорически, это подработка же всего лишь.
Дальнейшее во-многом очевидно. Для рядовых пользователей Windows заморожена с помощью купленной в нужном количестве Deep Freeze (утилита уже описывалась на Хабре), что позволяет после перезагрузки получить девственно чистую ОС и главное позволяет сэкономить на антивирусах, файерволах и обновлении железа. Можно использовать аналогичную программу — это дело вкуса. Для серверов же выполняются регулярные образы диска с системой. Почту загнал в Google Apps, клиент trayos.com — все-таки GMail от вирусов сам по себе уже весьма неплохо защищает. Однако с рабочими станциями имеем целый ряд проблем. Далее в порядке возрастания сложностей.
Во-первых после перезагрузки теряются Мои документы, рабочий стол, избранное. Эта беда лечится просто. Мои документы можно банально переместить на другой диск, рабочий стол и избранное тоже в реестре прописать не проблема. Избранное потом оказалось и не нужно. Важно не переносить весь профиль пользователя, только то, что действительно требуется и в принципе не может участвовать в автозагрузке, иначе эффект от заморозки Windows теряется после первого же вируса.
Во-вторых ряд программ намертво привязаны к профилю. К примеру тот же Chrome после каждой перезагрузки моментально начинает обновляться, восстанавливать профиль пользователя со своего сайта и делать прочие непристойности. С Opera все еще хуже — там просто теряется последний профиль и все. Понятно, что есть portable-версии, но в них как правило не работает обновление браузера, а задача состоит напомню в полном отсутствии админа долгое время (в идеале после настройки админа нет вовсе). В примере лишь браузеры, на самом деле таких программ намного больше.
На этот случай все диски переконвертированы в NTFS и из профиля перенесены наиболее болезненные каталоги на соседний логический диск. Наконец, эти же каталоги обратно размещены на свое исконное место через NTFS Junction Point: в FAR это Alt+F6, но конечно есть и более современные решения.
В-третьих, самая неприятная проблема с запуском программ от имени администратора. Их всего 12 штук, все самодельные найти авторов нереально абсолютно. Самая главная мерзость этих поделок состоит в том, что они взаимодействуют с сервером под админскими правами. Переписывать их заново, обучать пользователей заново — не вариант, проще уволиться сразу.
Поэтому нужен Runas, но не обычный, а такой чтобы наш офисно-планктонный пользователь пароль администратора не вводил при каждом запуске, и по возможности его не знал. Решение обнаружилось в совершенно неожиданном (для меня по крайней мере) месте — JavaScript.
Создаем файлик start.js следующего содержания:
С учетом синтаксиса JS первая строчка может быть и в одинарных кавычках, если это необходимо
Далее пропускаем полученный код через сервис dean.edwards.name/packer или подобный, получаем
Осталось разместить этот JS-файл в нужном каталоге и сделать для него ярлык запуска. Для пущей надежности можно поиграться и тонко попробовать настроить NTFS, тогда хитрый планктон не сумеет пароль выковырять отсюда, но в моем случае этого не потребовалось, пароль админа и так многие знают. Обфускация JS больше для красоты решения сделана и немножко как защита пароля от залетных троянов. Это собственно все, осталось очистить и дефрагментировать систему. Затем Deep Freeze и отдаем потребителю.
Описанные меры безусловно банальны, но в комплексе оказались весьма действенными. Полгода прошло, полет нормальный и у рабочих станций вирусов нет даже на диске для данных, сканировал недавно для интереса. Занимаюсь только двумя серверами, с ними так гладко пока не выходит. Внимания требуют еженедельно, но этот аспект тоже в процессе.
Для заморозки есть бесплатные альтернативы SteadyState. и Comodo Time Machine, а вместо RunAs пригодится MS App Compatibility Toolkit или утилита admilink. Спасибо всем, кто высказал свое мнение.
Введение
Одной из подработок в настоящее время у меня является сопровождение небольшого компьютерного парка в частной фирме. Направление фирмы — розничная торговля: склады, пара супермаркетов в три и четыре кассы, а также четыре небольших магазина. Контингент пользователей традиционный: бухгалтерия, кассиры, руководство. Компьютеры (всего их 45) территориально удалены друг от друга, некоторым программам (не всем) по целому ряду причин нужны административные права. Так просто исторически сложилось. Не суть. Архитектуру сети и политику управления всем этим хозяйством можно охарактеризовать одним словом: винегрет. Но я человек пришлый, менять сложившуюся систему не могу и не хочу.
Постановка задачи
Вполне понятно, что все это хозяйство разрушается со временем различными троянами и вирусами, самый мощный, беспощадный и непредсказуемый из которых имеет ДНК мало отличающуюся от вашей или моей. Запуск EXE прямо из почты с пометкой СПАМ одно из наиболее безобидных занятий. Все сидят в Интернете понятное дело (кроме касс). Уговоры и показательные порки никакие не помогают, разъяснение термина офисный планктон не возымело ни малейшего эффекта. Некоторые дамы особенно ядреные. Что-то нужно предпринимать кардинальное, не ездить же в самом деле по каждому факту для ручного восстановления ОС. Причем бюджета как такового практически нет, весь бюджет — экономия на возможном отказе от подписки KAV. Да и от основной работы отвлекаться нельзя категорически, это подработка же всего лишь.
Принятые меры
Дальнейшее во-многом очевидно. Для рядовых пользователей Windows заморожена с помощью купленной в нужном количестве Deep Freeze (утилита уже описывалась на Хабре), что позволяет после перезагрузки получить девственно чистую ОС и главное позволяет сэкономить на антивирусах, файерволах и обновлении железа. Можно использовать аналогичную программу — это дело вкуса. Для серверов же выполняются регулярные образы диска с системой. Почту загнал в Google Apps, клиент trayos.com — все-таки GMail от вирусов сам по себе уже весьма неплохо защищает. Однако с рабочими станциями имеем целый ряд проблем. Далее в порядке возрастания сложностей.
Во-первых после перезагрузки теряются Мои документы, рабочий стол, избранное. Эта беда лечится просто. Мои документы можно банально переместить на другой диск, рабочий стол и избранное тоже в реестре прописать не проблема. Избранное потом оказалось и не нужно. Важно не переносить весь профиль пользователя, только то, что действительно требуется и в принципе не может участвовать в автозагрузке, иначе эффект от заморозки Windows теряется после первого же вируса.
Во-вторых ряд программ намертво привязаны к профилю. К примеру тот же Chrome после каждой перезагрузки моментально начинает обновляться, восстанавливать профиль пользователя со своего сайта и делать прочие непристойности. С Opera все еще хуже — там просто теряется последний профиль и все. Понятно, что есть portable-версии, но в них как правило не работает обновление браузера, а задача состоит напомню в полном отсутствии админа долгое время (в идеале после настройки админа нет вовсе). В примере лишь браузеры, на самом деле таких программ намного больше.
На этот случай все диски переконвертированы в NTFS и из профиля перенесены наиболее болезненные каталоги на соседний логический диск. Наконец, эти же каталоги обратно размещены на свое исконное место через NTFS Junction Point: в FAR это Alt+F6, но конечно есть и более современные решения.
В-третьих, самая неприятная проблема с запуском программ от имени администратора. Их всего 12 штук, все самодельные найти авторов нереально абсолютно. Самая главная мерзость этих поделок состоит в том, что они взаимодействуют с сервером под админскими правами. Переписывать их заново, обучать пользователей заново — не вариант, проще уволиться сразу.
Поэтому нужен Runas, но не обычный, а такой чтобы наш офисно-планктонный пользователь пароль администратора не вводил при каждом запуске, и по возможности его не знал. Решение обнаружилось в совершенно неожиданном (для меня по крайней мере) месте — JavaScript.
Создаем файлик start.js следующего содержания:
var prg = "runas /user:Login c:\\path\\filename.exe";
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run(prg,1);
WScript.Sleep(250);
WshShell.SendKeys("p"); //пароль по одной букве
WshShell.SendKeys("a"); // +,-,%,^,~,(,) нужно заключать в фигурные скобки {}
WshShell.SendKeys("s");
WshShell.SendKeys("s");
WshShell.SendKeys("w");
WshShell.SendKeys("o");
WshShell.SendKeys("r");
WshShell.SendKeys("d");
WshShell.SendKeys("{.}");
WshShell.SendKeys("{ENTER}");
С учетом синтаксиса JS первая строчка может быть и в одинарных кавычках, если это необходимо
var prg = 'runas /user:Login "c:\\path с пробелами\\filename.exe"';
Далее пропускаем полученный код через сервис dean.edwards.name/packer или подобный, получаем
eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('k 4="b /j:l c:\\\\6\\\\7.8";9 0=3.e("3.f");0.g(4,1);3.h(i);0.2("p");0.2("a");0.2("5");0.2("5");0.2("m");0.2("o");0.2("n");0.2("d");0.2("{.}");0.2("{q}");',27,27,'WshShell||SendKeys|WScript|prg|s|path|filename|exe|var||runas|||CreateObject|Shell|Run|Sleep|250|user|ar|Login|w|r|||ENTER'.split('|'),0,{}))
Осталось разместить этот JS-файл в нужном каталоге и сделать для него ярлык запуска. Для пущей надежности можно поиграться и тонко попробовать настроить NTFS, тогда хитрый планктон не сумеет пароль выковырять отсюда, но в моем случае этого не потребовалось, пароль админа и так многие знают. Обфускация JS больше для красоты решения сделана и немножко как защита пароля от залетных троянов. Это собственно все, осталось очистить и дефрагментировать систему. Затем Deep Freeze и отдаем потребителю.
Итог
Описанные меры безусловно банальны, но в комплексе оказались весьма действенными. Полгода прошло, полет нормальный и у рабочих станций вирусов нет даже на диске для данных, сканировал недавно для интереса. Занимаюсь только двумя серверами, с ними так гладко пока не выходит. Внимания требуют еженедельно, но этот аспект тоже в процессе.
10.02.2011 Итоги обсуждения
Для заморозки есть бесплатные альтернативы SteadyState. и Comodo Time Machine, а вместо RunAs пригодится MS App Compatibility Toolkit или утилита admilink. Спасибо всем, кто высказал свое мнение.