Планктонная Windows

Короткая заметка об опыте автоматизации восстановления 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 следующего содержания:

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. Спасибо всем, кто высказал свое мнение.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 51

    +9
    Зачастую набор из нескольких банальных действий ведет к результату быстрее, чем одно хитрое.
      +1
      Спасибо. Зачастую — довольно точное слово. Понятно, что правильное решение в наибольшей степени определяется постановкой задачи, а уж затем опытом, временными ресурсами, курением гугла и прочими факторами. Но без хитрых решений тоже на все 100% не обойтись. А жаль, мир был бы проще ).
      +2
      Такая же ситуация в точности, только ещё часть софта под досом вертится.
      Какие есть альтернативы Deep Freeze'у? Не обязательно именно софт. Организационные меры в винде, железо?
        +1
        Альтернативы обсуждались в топике про Deep Freeze (в комментариях), если речь об аналогах.

        Что же до организационных мер, то в моем случае хоть завинчивание гаек политиками, хоть управление правами в NTFS, хоть периодическое поднятие из образов (на мой взгляд самое действенное решение) — все это все равно требует хоть какого-то, но ухода.

        Был бы объект не разбросан территориально, может и подошло бы классическое администрирование. А так — на любой вопрос по телефону, один и тот же диалог: «Подождите. Смотрю по сети. Перегрузитесь. Ну как? Удачной вам работы. Не посещайте порносайты.»
          0
          Загрузка ОС по iSCSI с сервера.
          Desktop Virtualization.
          +11
          Может кому пригодится, у Microsoft'a есть SteadyState. Система делает снимок операционки и после рестарта всё как новое — будто никто и не работал. Правда поддержка этой системы уже остановлена. Зато она бесплатная.
            +3
            я вот всё думал, зачем же нужен функционал добавления комментариев в избранное?
            А оказалось, вот зачем) Спасибо!
              0
              «С 31 декабря 2010 года продукт Windows SteadyState будет недоступен для загрузки. „
              Грустно.
                +5
                Ну да, но работает же пока. Вот, к себе выложил.
                  +1
                  Отлично. Благодарю.
                0
                И у нее есть бесплатная альтернатива
                  0
                  Так SteadyState и так бесплатна.
                +1
                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}");
                А чего не одной строкой-то?
                  +8
                  Тогда обфускатор JS другой нужен, тот что в статье ничего не прячет, если одной строкой.

                  Предвижу вопрос про смысл обфускации, попытаюсь ответить заранее, ибо спать пора.

                  Понятно, что реверснуть любую JS — это не проблема, но конечный юзер-то в данной ситуации планктон.
                  Если же он вдруг умеет JS декодировать, заменив eval на alert к примеру, то такому юзеру и полноценную Windows дать не грех, он с ней конечно управится без всякого Deep Freeze и админского саппорта.
                  –4
                  пару супермаркетов… у вас что с падежами?
                    +8
                    Ну простили бы новичка, сказал же он «спать пора», устал человек.
                    А вы уже 3,5 года на Хабре и не знаете что с такими предложениями надо в личку?
                    Ай-яй-яй, как не стыдно!
                      +2
                      Вот действительно. И ведь еще гусаром себя называет!
                      0
                      Поправил, благодарю. Хорошо, что не диссертация — с защиты за такое не снимут.
                      –11
                      Какой феерический бред.

                      > менять сложившуюся систему не могу и не хочу

                      Дальше можно не читать. Каждый эникейщик хочет продемонстрировать свою значимость, но не каждый готов взять на себя ответственность.
                        +23
                        Читая тут по работе много англояычных блогов, обратил внимание на то, что типичное начало коммента в англоязычном блоге звучит: «Спасибо вам за ваш комментарий (или „за ваш пост“)», даже если дальше идет аргументированный спор по существу.

                        Типичное же начало комментария в русских блогах и форумах — «феерический бред», причем обычно дальше никакой аргумнтации по существу не содержится.

                        Вот что значит отсутствие культуры дискуссий. То есть анонимность и безнаказанность уже есть, и позволяют хамить, не опасаясь в следующую секунду иметь разбитый нос, но организованности и культуры ведения спора еще нет.
                        Что и имеем.
                          +1
                          соглашусь, про таких и было сказано — «молчание — золото».
                            –4
                            Принимаю близко к сердцу :)

                            Во-первых, я не анонимен. Любой интересующийся моментально выяснит мои контактные данные и рабочий (если не домашний) адрес. Кстати, рассуждающие ниже о моей «теоретичности» явно не потрудились навести справки.

                            Во-вторых, попробуй аргументированно ответить на вопрос «если земля круглая, чо мы с нее тогда не падаем?». Начнешь заяснять про гравитацию — спрашивающий даже не поймет. Смысл напрягаться?

                            И да, в западном обществе принято благодарить даже за полную чушь. Связано это, наверное, с риском судебного преследования по поводу защиты «чести и достоинства». А в Японии, например, начальник за хорошо сделанную работу сразу выскажет особую благодарность — «тут и тут ты мог сделать лучше, почему не сделал?».

                            Хабр «саморегулируется», исключая из общения тех, кто не вписывается. На это есть карма (да, мне на нее плевать). А мой стиль общения можно обсудить хоть за кружкой пива, хоть за рюмкой водки.

                            Сразу отвечу «нижним» комментаторам.
                            > то ли ППШ на груди, то ли волочащийся сзади парашют — что-то выдавало в chupkb теоретика, ни разу не работавшего в крупной фирме

                            Ув. kikaha! Если вам лень зайти в мой профиль и почитать хотя бы мое резюме в LinkedIn, то, пожалуйста, избавьте меня от оценки моего профессионализма.

                            > «Эта система хорошо работала ДО тебя: она будет хорошо работать либо ПРИ тебе, либо уже БЕЗ тебя» — с такой логикой генерального директора не сталкивались?

                            Сталкивался. Только при чем тут хабр? Рассказам о костылях для пасьянса бухгалтерши место на ЛОРе. Пароль в открытом виде, через джаваскрипт, шикарно.
                              +2
                              Два вопроса.

                              По эмоциональной компоненте:
                              Оценивать других, пресекая любые попытки оценивать себя — образец адекватности?

                              По сути:
                              > Пароль в открытом виде, через джаваскрипт, шикарно
                              Ваш вариант?

                              Я внемлю, учитель.
                                –4
                                Не любые попытки пресекая, но лишь исключительно ленивые.

                                Мой вариант — увольняться. И он, кстати, в вашем посте тоже присутствует.

                                Вы не хотите брать на себя ответственность за работу ИТ-инфраструктуры, что ж, не каждому она по силам. Но вы публикуете ужасающие подробности решения одной проблемы (которой не может возникнуть в правильно спроектированной системе), словно это какое-то достижение. Вот это уже бред, и он достаточно фееричен. Ничего личного.
                                  +5
                                  Люблю таких оппонентов, верткий как угорь.

                                  Итак, ваш вариант РЕШЕНИЯ задачи в её ИМЕЮЩЕЙСЯ постановке. Денег нет, железа нет, три десятка леди преклонных годов — ваша аудитория, фирма посторонняя, досталась вам как есть, вы в это время пишете докторскую диссертацию, но нужно как-то зарабатывать деньги, т.е. увольняться пока не время.

                                  Что можно предпринять технически? Минута пошла…
                                    0
                                    «Почему мы не падаем с Земли, если она круглая? Минута пошла, рассказы про гравитацию не принимаются.»

                                    Работайте, как вам нравится. Я не согласен лишь с вашей оценкой ваших профессиональных достижений.
                                      0
                                      Если я не ошибаюсь, то пока что из имеющихся комментариев оценку моих профессиональный достижений «вслух» сделал только один человек. И это не я.

                                      Не то чтобы я с вами несогласен. Решение конечно костыль. Но я думаю аудиторию больше интересует не оценка кого-либо, а ответ на вопрос, что предпринять в подобной ситуации. В этом контексте ваши комментарии пока не имеют конструктивности.

                                      Успехов.

                                      P.S. Минусы никогда никому не ставлю, человека нужно знать лично. Но сомнение уже закрадывается.
                                        0
                                        забейте!
                                        0
                                        Извиняюсь что вмешиваюсь, но ваш слив засчитан. Вам задали вопрос (даже два, про пароль выше) вполне конкретно, вы оба раза съехали. Непонятно, зачем вообще было врываться с вашим «феерическим бредом» если вы можете только предложить в качестве решения только увольнение? Здесь все прекрасно понимают что такое гравитация и ценятся конкретные ответы, а не теоретические рассуждения на отвлеченные темы
                                  +1
                                  > И да, в западном обществе принято благодарить даже за полную чушь. Связано это, наверное, с риском судебного преследования по поводу защиты «чести и достоинства».

                                  Конечно, действительно. Как же иначе? Только поэтому :-}
                                    +1
                                    > Во-первых, я не анонимен.

                                    То есть вы просто хам?
                                    Так сказать «по велению сердца», а не от интернетной безнаказанности?
                                    Что-ж, это меняет дело. :)

                                    Действительно, если нет угрозы получить повестку в суд, какой вообще смысл нормальному человеку вести себя вежливо?
                                      0
                                      Рома, обо мне лично (и со мной лично) можно поговорить за пределами треда и вообще интернета :)

                                      Вроде матерюсь я редко, и никого тут не оскорбляю.

                                      А вообще, ты занимаешься фигурным цитированием, игнорируя существенные части моего комментария ;)
                                    0
                                    Хабрахабр — не место для дискуссий :-) Шутка.
                                    +3
                                    > Дальше можно не читать

                                    то ли ППШ на груди, то ли волочащийся сзади парашют — что-то выдавало в chupkb теоретика, ни разу не работавшего в крупной фирме

                                    «Эта система хорошо работала ДО тебя: она будет хорошо работать либо ПРИ тебе, либо уже БЕЗ тебя» — с такой логикой генерального директора не сталкивались? Если нет, то месячный оборот фирмы, где вы обслуживали сеть (если обслуживали вообще), не шибко превышал стоимость подержанного «Запорожца»
                                    Нет, не исключен опыт работы в бюджетной организации, где если что-то перестало работать, то никто этого и не заметит — но мы о разных уровнях ответственности говорим уже, наверное…
                                      0
                                      В данном случае не стоит задача демонстрировать свою значимость, напротив, целью является как раз максимальный уровень безразличия к моей персоне. За «феерический» — спасибо. Драматично.
                                      0
                                      голь на выдумки хитра [x]
                                        +3
                                        По работе искал вариант решения проблемы запуска из-под администратора (на 7-ке точно работает, на счет Xp, честно говоря, не проверял):

                                        1. Скачайте и установите утилиту «Microsoft Application Compatibility Toolkit» по ссылке: www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en
                                        2. Найдите ярлык «Compatibility Administrator» в меню «Пуск», и через нажатие правой кнопкой мыши, выберите «Запуск от администратора».
                                        3. Кликните правой кнопкой мыши в левой части окна, под надписью «Custom Databases» -> «New Database(1)» и выберите «Create New» -> «Application Fix».
                                        4. В появившемся окне в поле «Name of the program to be fixed» введите любое произвольное название (например tool), и в самом нижнем поле укажите путь до исполняемого файла, после чего нажмите «Next»
                                        5. В следующем окне переключите флажок в положение «None» и нажмите «Next».
                                        6. В списке найдите параметр «RunAsInvoker» и поставьте флажок напротив него. Нажмите «Next».
                                        7. Ничего не меняя нажмите «Finish».
                                        8. Зайдите в меню «File» -> «Save as», и сохраните файл в нужное Вам место.
                                        9. Зайдите в систему из-под нужного Вам пользователя (не имеющего прав администратора), зайдите в меню Start -> Programs -> Accessories -> Command Promt, нажмите на ярлык правой кнопкой мыши и выберите «Run as adminisrtator». Введите пароль администратора.
                                        10. В командной строке введите следующее: C:\Windows\System32>sdbinst путь_к_файлу\tool.sdb

                                        Писалось это довольно давно, но не думаю, что что-то кардинально изменилось.
                                          0
                                          Проверю обязательно. Навскидку возможна проблема с масштабируемостью. JS+ярлык переносится просто копированием, здесь же придется на каждой машине 12 эти 10 пунктов повторять.
                                            0
                                            12 — это 12 раз.
                                          +3
                                          Автора прекрасно понимаю, сам сталкивался с подобными организациями, в которых при минимуме бюджета, старом железе и т.д., требовалось привести все в порядок, при этом «ничего кардинально не меняя». Особо интересно было, когда возникла необходимость перехода на лицензию, естественно никакие переустановки системы не рассматривались начальством, попытка сэкономить бюджет путем установки того же OpenOffice встретила жесткое сопротивление — бухгалтерия прямо на дыбы встала и отказывалась работать… проще оказалось все же купить Мелкософтовый, чем воевать с агрессивными тетушками. Да что уж там говорить, если замена WinRAR'a на 7zip требовала зачастую личного объяснения тому или иному сотруднику. Да, да, проще было с каждым побеседовать — объяснить смысл перехода и обучить элементарному, в противном случае шли звонки директору: «МарьВасильна, Саша опять какую-то программу поставил — ничего не работает»… Далее длительные беседы с МарьСильной, которая хороший директор, но в компьютерах вообще ничего не понимает и которая горой за всех своих тетушек. Разговоры про апгрейд железа или апдейт 1Ски вообще можно было не начинать… Так что — ситуации разные бывают, и если одмин попадает в подобные конторы, то тут нужно быть еще и психологом хорошим, и варианты с дипфризаньем, батниками и т.д. тоже имеют место быть
                                            +1
                                            Обратите внимание, что путь c:\\path\\filename.exe пишется с использованием двух слэшей, в отличие от обычного формата проводника windows
                                              0
                                              Вы уверены что кейлогер, не получит Ваш админский пароль.
                                                0
                                                Смотря какой hook. Если не на уровне железа, то получит, но в контексте задачи это не беда.

                                                Я в первую очередь защищаю себя от частого и весьма своеобразного общения.
                                                Далее защищаю PC от этих удивительных леди, которые запросто могут удалить Program Files например, ибо это не их папка.

                                                Ну а от зловредов защита простая — перезагрузка. После нее, даже зная пароль админа, зловреду сначала нужно заново попасть на ту же машину, а это обязательно потребует повторной и аналогичной активности юзера.

                                                В целом конечно приведенное решение спорно, Hyper V, три разных сервера на нем и служба терминалов будет дешевле, грамотнее, проще и т.д. Все что описано вытекает из постановки задачи и особенностей объекта, а вовсе не из знаний и возможностей современных технологий.
                                                +1
                                                «Планктон» — это довольно уничижительный термин. Рекомендую попробовать уважать пользователей, несмотря на то, что они могут допускать вопиющие ошибки при работе с компьютером. Поверьте, чаще всего это не их вина, просто нам очень сложно себе это представить. Уважение поможет получать больше удовольствия от вашей работы: вам и вашим пользователям.
                                                  +1
                                                  и да, спасибо за статью!
                                                  0
                                                  Согласен, здесь термин ради красного словца, он не мною придуман — так просто по заголовку сразу понятно, о чем пойдет речь. В жизни его систематически применять, да еще и в чей то адрес конечно недопустимо.
                                                    0
                                                    Актуально ) Но у нас свои грабли.
                                                    Для фриза — Shadow User.
                                                    Для системы — перенос моих доков и прочей мути — это да + джукшн — без него никуда )
                                                    Для админа — или (http://www.computerra.ru/rtfm/gid/system/230194/), или аналог runas, забыл как. Если кому нужно — найду. Допиленный вариант ранаса, без ввода пароля и кучей плюшек. Всучить в систем рут, сделать батник или проект в чем-то за пару минут — и вуаля — всегда админский доступ.
                                                    Браузеры — портейбл.

                                                    Но самое главное — штрафы.
                                                    Выбить у начальства возможность штрафовать деньгой.
                                                    Так офисный планктон учится быстрее и запоминает.
                                                      0
                                                      В личку baxtep2 прислал линк: аналог RunAs admilink.narod.ru. Похоже функциональная программка, хоть и на народе. Но мне увы не подошло, с машины на машину набор ярлыков не переносится, т.к. административные утилиты лежат в профиле пользователя, поэтому пути к утилитам отличаются. Для остальных случаев по идее как раз искомое.
                                                        0
                                                        admilink.narod.ru/ таки подходит отлично: %USERPROFILE% унифицирует путь и таким образом делает ярлык запуска переносимым. Надо только следить чтобы даты запускаемых файлов были идентичны. Если эксперимент окажется репрезентативным поста надо бы будет обновить.
                                                          0
                                                          Есть еще схожая с RunAs утилита «RunAsSpc», правда, платная. Умеет создавать сертификат на основе введенного единожды пароля и затем запускать требуемую программу от имени администратора системы и паролем, хранящемся в сертификате.
                                                            0
                                                            Да, она — RunAsSpc. Ну то что платная — это не сильно смущает.

                                                      Only users with full accounts can post comments. Log in, please.