We rise up for the things we believe in over and over again

Когда-то доводилось мне писать о весьма удручающем баге в Android-телефонах - отсылка СМС не тому получателю. Ради интереса залез в этот тред посмотреть, чего нового написано. В самом конце оставлена пара записей от куратора этого сайта (судя по всему). Вот они, что называется, без купюр:
Comment 1820 by [email protected], Jun 23, 2011
I'm going to block further comments on this issue because it is suspected of placing excessive load on one part of our server-side software for Google Project Hosting.


И вторая (видать с правами что-то не то было):
Comment 1821 by [email protected], Jun 28, 2011
Corrected permissions to just block additional comments because of server load.


Мир должен знать своих героев!
Читаем статус этого треда:
Status: Released
Owner: [email protected]
Closed: Jan 2011
Type-Defect
Priority-Critical
Version-2.2
ReportedBy-User
Restrict-AddIssueComment-Commit

Google, огромное спасибо за такую дезу, но факт остается фактом, в прошивке 2.3.3 этот баг сохранен и так же хорошо воспроизводится, как и раньше.
Печально. Очень печально, что такая крупная, и вроде как уважаемая компания не удосуживается дать хоть какую-то обратную связь.

@музыка: Galaxion - Sleeping Beauty

@темы: Этот безумный мир, Android

We rise up for the things we believe in over and over again

А началось все с того, что стукнуло мне в голову посмотреть, не вышло ли новых прошивок для моего Ведроида. Сказано - сделано, LG Mobile Support Tool на старт, внимание, марш. Да, он запустился, попросил соединение с телефоном и... не нашел оного. Как так? Устройство на столе, USB хвост подключен и к нему, и к системнику. Порт заведомо рабочий, пару часов назад в нем жила флешка. Нет, нету у тебя устройства, дорогуша, вынь да положь.
Чем черт не шутит, переключаем хвост в другой порт. Та же история. Так, если устройство в ОС не видно, стало быть дело может быть в драйверах, ибо устройство как USB хард-диск видно и работает, но оно же "Composite USB device". Не беда, драйверы все в наличии. Сносим текущие, ставим посвежее. Как уже можно догадаться - результат тот же. Ну черт с тобой, VMWare на старт, внимание, марш. Свежая VM, подключаем устройство туда. Неа, нету у тебя устройства, дорогуша, вынь да положь. Ну что за напасть...
К слову сказать, LG PC Suite отличился ровно тем же, устройства просто нет. Ладно, перезагрузка трубки, попытка подключения... тот же эффект.
Начинаем прикидывать. Вся информация дублирована в облаке (контакты, фото). Все программы, которые там стоят, можно и переставить, и довольно быстро. Устройству делается Factory Reset.
После этой весьма и весьма жесткой процедуры робот весело мигает сообщением о том, что он у нас базируется на Android 2.3.3. Это уже хорошо, потому что изначально LGP500 работает на версии 2.2, прошивку 2.3 ждали очень долго и мучительно. Подключаем к USB хвосту, и о, чудо! Девайс прекрасно обнаруживается! Ладно, отставляем это дело, проводим первоначальную настройку телефона. Добавить Google-аккаунт, вычистить все от ненавистных ярлычков на контакт, одноклассники, янедкс- и гуглопоиск и тому подобного барахла. Поставить все необходимые мне ярлыки, настройки... После всей этой косметической оттделки можно и софт докидывать. Вход в Маркет, выбор первого из нужных приложений, установка. Все отлично. Докидываем половину из оставшихся и вспоминаем, что через веб-сайт на ПК это делать несколько удобнее. Заход в Android Market на компьютере, выбор нужного приложения... а дальше челюсть пробивает пол до фундамента: "У вас нет подходящего Android-устройства для установки данного приложения". Это уже за гранью понимания. Проверяем список устройств и понимаем, что там пусто. Простите, а где все? Где все ранее (в марте месяце) установленное? Ну хорошо, даже если был сделан хард-ресет, и после оного информация с аккаунта Google удаляется, уже сейчас как минимум три программы должно светиться, и сам телефон - тоже. Нет, нифига, говорит нам гугл, нет у вас телефонов. Идите в магазин, купите, активируйте, тогда я может быть чего-нибудь и покажу. Ах ты ж зараза.
Лезем в справку, читаем - для того, чтобы телефон появился в списке устройств на сайте, необходимо зайти в Маркет с этого телефона, авторизоваться в нем, а затем уже зайти на сайт на ПК, введя тот же логин и пароль, под которым авторизовался в Маркете на телефоне. Проклятие и еще раз проклятие, все это было сделано!
Ладно, нам не привыкать! Второй Hard-reset. Только на этот раз учетку Google подключаем уже после того, как об этом попросит Маркет. Ввели, авторизовались. Даже поставили одно из нужных приложений. Лезем на сайт, в списке устройств ноль. Да твою ж... материнскую плату! Обновить страницу и с удивлением обнаружить, что телефон наконец-то опознан сайтом, но без этого самого приложения. Да и фиг с тобой. Уже через сайт добавить все необходимые программки, удостовериться, что они появились в списке установленных и со спокойной душой закрыть Маркет.
Можно приступать к обновлению самого ПО телефона (да, я знаю, что вообще-то делается наоборот). В этот раз LG Mobile Support Tool отрабатывает на ура, прошивка меняет свою букву в идентификаторе на актуальную. Для успокоения души прогоняется поиск обновлений еще раз, после чего эта самая душа офигевает, ибо найдено еще одно обновление. Ну что ж, как работает, например, WSUS, известно, некоторые обновки ставятся сугубо последовательно, так что ставь. LG Mobile Support Tool проверяет соединение с телефоном, после чего говорит, что данное обновление этим телефоном НЕ ПОДДЕРЖИВАЕТСЯ! Да твою ж... материнскую плату дважды!!! А хотя бы написать, что это за обновление, бывает? Нее, не бывает, вот вам ссылка на сайт LG - разбирайтесь сами. Сволочь. На это у меня уже сил не хватило.
В течение всех этих разборок рядом сидел товарищ, любитель яблочных огрызков, подкалывали друг друга, чтоб не так уж паршиво было. "А вот у нас в Секте...", "Да ну вас, у нас, робототехников, веселее". И все в таком духе.

Какие выводы можно сделать из всей этой истории? За всю свою жизнь у меня было два телефона, способные общаться с ПК. Это Benq-Siemens S68 (он лежит до сих пор, как резервный), и я считаю его идеальным для себя аппаратом; и Ведроид, который был взят из-за функционала. Я не жалею о том, что связался с Android, но вот такие казусы все же портят впечатлений от платформы. И тут уже даже не знаешь, это вина платформы или производителя самого устройства, в данном случае LG. Но по крайней мере я знал, что на Google-платформе такое возможно. А ведь есть еще огромное количество людей, которые берут андроидов только из-за того, что это массово, по принципу - у Васи есть, стало быть он крут, а я чем хуже. Люди, перед покупкой все же читайте материалы о том, что именно вы покупаете. Или все же порасспрашивайте знакомых знающих людей о плюсах и минусах такой покупки.
И еще одна претензия - это ПО для связи мобильника и ПК. Почти ни один из известных мне производителей (известных мне - читать как марки, прошедшие через мои руки) так и не смог написать вменяемое программное обеспечение для связи этих устройств в Windows. Почти. Единственный, кому это удалось (да, я знаю, что сейчас полетят помидоры) - это Microsoft. ActiveSync, конечно, тоже не без нареканий, но все они сводятся лишь к тому, что в случае возникновения ошибки по ее коду мало, что скажешь. Зато в процессе работы и настройки все просто супер. Лаконично, просто, понятно. Остальные же... куча мастеров, которые не нужны вовсе. Интерфейсы явно были написаны в состоянии измененного сознания (ну а как же без выпендрежа в наши-то дни, когда всем правит маркетинг). Да дьявол с ними, с интерфейсами, даже свою прямую обязанность: связь двух устройств, это самое ПО далеко не всегда выполняет так, как надо. Чего уж говорить обо всем остальном...

@музыка: Galaxion - Aftershock

@темы: Этот безумный мир, Android

We rise up for the things we believe in over and over again

Подкинули намедни интересную задачку. Есть папка. В папке кучка wav файлов, требуется узнать их общую длину. Да не ту длину, под которой в powershell понимают размер файлов на диске, а количество секунд. Немного блужданий по TechNet, и сценарий готов:

Add-Type -AssemblyName presentationCore
$mediaPlayer = New-Object system.windows.media.mediaplayer
$files = Get-ChildItem "e:\media\music\*.mp3"
$size = 0
foreach($file in $files) {
$mediaPlayer.open($file.fullname)
start-sleep -m 500
$size = $size + $mediaplayer.naturalduration.timespan.totalseconds
}
$size

Можно задать вопрос - а зачем введена команда start-sleep -m 500, ведь попахивает индийским кодом. Ответ не менее забавен, чем задачка - без этой задержки объект $mediaplayer просто не успевает прочитать свойства файла, и в итоге общая длина будет равна нулю, что нам абсолютно не нужно.
Обработка напильником в этом скрипте стандартная - в строке $files = Get-ChildItem "e:\media\music\*.mp3" нужно указать свой путь и маску файлов.

@музыка: Deus Ex: Human Revolution OST - Final Boss Theme

@темы: PowerShell, Scripting

We rise up for the things we believe in over and over again
Вот задумайтесь, какой самый большой почтовый ящик (электронная почта) вам приходилось в вашей жизни видеть? Вот что довелось узреть мне:

При условии, что число в третьем столбце - это не байты, а килобайты, становится страшно. А потом сотрудники удивляются, почему это Outlook начинает периодически показывать сообщение о том, что программа "пытается получить данные с сервера", и зависать.
Ах, да, мы же клиенто-ориентированная компания (просто клиентами для IT-отдела являются сами же сотрудники). Все для них, все ради них, все для их удобства. Если меня сейчас читает кто-то из руководящего состава какой-либо компании - мой вам совет: когда ваш системный администратор положит на стол проект по введению квот на почтовые ящики (если их еще нет), прислушайтесь к его словам. Это только по неопытности кажется, что предельные размеры ящиков - зло, на самом деле пользы от них намного больше, чем неудобства. Это не прихоть IT отдела, это суровая необходимость.
К слову сказать, после очистки от всего шлака, объем того ящика резко уменьшился до 1.2 Гб. Только вот на размер почтовой базы данных это не повлияет, к сожалению. Для уменьшения базы ее нужно дефрагментировать в offline-mode, а это полноее ее отключение где-то на полдня.

@музыка: Frank Borell - Wake Up in Paradise (Dream Spirit Mix)

@темы: Этот безумный мир, MS Exchange

We rise up for the things we believe in over and over again

Перепись всего серверного хозяйства. Эта процедура не давала мне покоя все то время, что я работаю. До текущего момента это был стандартный Excel-файл с кучкой листов. И конечно же, обновлялся он из рук вон плохо. В конце концов, это порядком поднадоело.
Составные части автоматической инвентаризации:
- MS Access в качестве базы данных. База будет довольно мелкой, а потому поднимать что-то большое для этих целей кажется пошлым.
- Powershell как исполняемый процесс.
- WMI как средство сбора данных.
- Группа серверов в AD.

Требования к системе:
1. Наличие провайдеров доступа к базе MS Access 2007. Проще всего выполняется путем установки самого MS Access 2007 на 32-разрядную машину. На 64-разрядной системе получим ошибку "Провайдер незарегистрирован, пожалуйста, переустановите его".
2. Наличие Powershell v.2 и набора Quest AD Management. Если используется Windows 2008 Server R2 - можно обойтись и без него, но в скрипте придется изменить одну строку.

Особо. В работе сценария сбора информации используются функции для работы с базой MS Access 2007, написанные Richard Siddaway - ссылка на его блог - Клац!.

О самом сценарии. Практически целиком он основан на командлете Get-WMIObject. Указав нужный класс и обратившись к определенному объекту внутри этого класса мы можем получить практически всю интересующую нас информацию о системе. В качестве примера можно привести вот такую часть самого скрипта:
get-wmiobject Win32_computerSystem -computername $srv.name | %{
$sysName=$_.Name
$sysManufacturer=$_.manufacturer
$sysModel=$_.model
}

Если попытаться перевести это на русский язык, получим следующее: извлечь данные из класса win32_computersystem (тут хранятся общие параметры компьютера), обратившись к компьютеру с именем, хранящемся в переменной $srv.name, в переменной $sysName сохранить его имя, в $sysManufacturer - фирму-производителя, в $sysModel - модель компьютера.
В дальнейшем эти параметры в числе других будут записаны в специально подготовленную для этого базу данных.
Похожим образом извлекаются и остальные параметры системы, коих довольно много.

Следующее. Поскольку сценарий достаточно велик, я не стал выкладывать его в открытом виде здесь, как поступаю обычно. Вместо этого все необходимые для инвентаризации файлы выложены на Google Docs - ссылка ниже:
Архив на Google Docs
Описание загружаемого файла: zip-архив GetServerInfo.zip, размер 50 910 байт.
Содержимое архива: скрипт db-functions.ps1 (библиотека функций для работы с MS Access 2007), скрипт GetInfo.ps1 (собственно, сам сценарий инвентаризации), база данных ServerDB.accdb - болванка базы данных. Именно в нее будут складываться полученные сведения.
Как использовать?
1. Распаковать содержимое архива в какой-нибудь каталог.
2. В файле GetInfo.ps1 исправить путь к файлу библиотеки (строка 5), и путь к базе данных (строка 8, изменить параметр -path)
3. Все Windows-серверы собрать в какую-нибудь группу в AD и прописать имя этой группы в строке 11, именно для нее нужен пакет Quest AD Management. При использовании родных средств управления Windows 2008 Server R2 нужно заменить командлет Get-QADComputer на Get-ADComputer с соответствующим изменением синтаксиса, а также закомментировать вызов оснастки Quest AD (строка 2).
На этом подготовка закончена.

Возможные проблемы. Да, куда же без них? Заключаются они в весьма странных наборах данных, которые отдаются скрипту через WMI. Например, на почти всех виртуальных серверах, крутящихся под esxi 3.5 (ОС самой виртуальной машины значения не имеет) вся оперативная память виртуальной машины размазывается по 4 банкам памяти, что приводит к следующим результатам:
банк 0 - 512 Мб
банк 1 - 256 Мб
банк 2 - 128 Мб
банк 3 - 112(!) Мб.
Почему так - я пока не разобрался. На железных машинах подобной проблемы не замечено.
Другая неясность - не все машины передают названия своих сетевых соединений, но это скорее проблемы конкретных машин.
Проблема базы данных. Абсолютно все поля базы имеют текстовый тип, что с точки зрения рационализации - не очень хорошо. Оставлять так или нет - решать вам. На просторах сети встречалось упоминание, что при работе через Powershell в MS Access можно записать данные только этого типа. Так это или нет, пока не проверял, но решил перестраховаться.

На этом все. Любые вопросы, дополнения, уточнения - приветствуются. Надеюсь, кому-то эта информация сможет сэкономить довольно много времени и сил.
P.S. Предвосхищая вопрос - а почему не использовать такие средства, как SCCM, MOM и другие? Ответ прост - бюджет компании. Он везде разный.

@музыка: Australis - Ephemerage

@темы: PowerShell, Scripting

We rise up for the things we believe in over and over again

Окончание истории, начатой тут. Как я и предполагал, процесс удаления файлов растянулся надолго. Аж на двое суток неторопливого выпиливания орды мелких, очень мелких файлов. MFT от такого поворота дел просто в ужасе была, поскольку вся эта мелочь явно хранилась прямо в ней. Статистика это подтверждает: на диске рабочей станции на 70 с небольшим тысяч файлов MFT заняла около 70 мегабайт, а вот на многострадальном файловике на те же 69 тысяч она уже разрослась аж до 4 Гб! Ясно, сильнейшая фрагментация после удаления всего мусора, с этим еще придется повозиться, но главное, работа антивируса, все же починено.

@музыка: E.S.Posthumus - Anumati

@темы: Viruses and Spam, Security

We rise up for the things we believe in over and over again

По непонятной причине стоящий на файлопомойке клиент корпоративного антивируса отцепился от управляющей консоли. Offline режим, и все тут. Принял решение его переустановить, хотя и помню об замечательной утилитке IpXfer, которая и нужна для переподключения клиента к другому серверу. Или тому же самому, как раз вот в таком случае.
Сказано, сделано, команда на удаление отдана. В процессе видно, что удаление происходит с ооочень большим скрипом, удаление служб продолжалось минут 15, на стадии удаления файлов система воткнулась еще на 40 минут. Все симптомы зависания. Делать нечего, распечатывается специальный документ, и пошагово проходим процедуру ручной очистки системы. В конце этого списка значится - reboot. Ясное дело, что боевой файловый сервер перезагрузить в течение рабочего дня никто не даст, значит, откладываем это дело до вечера, команду на рестарт можно отдать и из дому.
Перезагрузили. С радостным лицом поставили клиент заново и... поняли, что что-то пошло не совсем так, как надо.
"Все вышло не так, как ты планировал, Итэн..." (с) M:I:2
Вместо трех нужных служб в системе зарегистрированы только две. Более того, служба сканирования в реальном времени запускаться отказывается в принципе, ссылаясь на то, что ей нечего делать(!). И вспоминаем, что до повторной установки нужно было все же вынести старые каталоги антивируса. Дурная голова ногам рукам покоя не дает. Ладно, снова сносим антивирус, и ожидаемо получаем затык на стадии удаления файлов. Что ж, взглянем на этот процесс под микроскопом, то есть Process Monitor'ом, по критерию:
Process Name is NTRMV.EXE
Результат следующий - данный процесс вовсю елозит по папке C:\Program Files\Trend Micro\Office Scan Client\Hlog, открывает файл, пишет в него, закрывает.
Что ж это за логи такие? Залезаем в папку проводником и получаем зависший проводник. Снять процесс, попробовать пролезть другим шеллом. Получаем то же самое. Ладно, расчитай мне размер этой папки. Explorer.exe уходит в подсчеты, отгребает на себя гигабайт оперативной памяти, но результат удручает - найдено 0 объектов. К слову сказать, ни TC, ни cmd в этом плане тоже не отличились. Что же делать? Это логи, они находятся в папке, которая полностью предполагается к сносу. Их надо снести. Прпробуем метод, который меня еще не подводил:
cmd
cd c:\program files\trend micro\officescan client
del /f/s/q hlog\*.*
После минутного раздумья шел все же начал удалять все то, что там было. Тогда я еще не знал, сколько там всего.
Через минут 20 этого терзания диска я остановил процесс и попробовал снова зайти туда проводником. Увиденное повергло меня в шок. Проводник все же смог показать часть этого каталога: 300000 объектов, каждый размером меньше килобайта. И это - еще не весь каталог. Ну что же, повторный запуск удаления всего и вся через командную строку и ждать результатов. Это надолго...
P.S. Поймал себя на мысли, что это уже не первые боевые действия с данным антивирусом. Связка Trend Micro и Symantec Backup Exec уже показала себя во всей красе.

@музыка: KOTO - Die Klapperschlange

@темы: Этот безумный мир, Viruses and Spam, Security

We rise up for the things we believe in over and over again

Наверняка каждый системный администратор сталкивался с задачей - вынуть да положить руководству на стол информацию о том, кто стер какой-либо очень нужный файл с сетевого хранилища. Почти все знают, как включить аудит событий файловой системы. Если кто-то не знает, очень рекомендую ознакомиться вот с этой статьей: How do I enable auditing on certain files/directories? - это очень просто и быстро.
После включения аудита в логе безопасности файлового сервера станут появляться события о работе с файловой системой. Вот как, например, выглядит запись о запросе на удаление какого-либо файла:


В этом сообщении видно все, что нам нужно для отчета. Единственная проблема заключается в том, что в логе безопасности сообщений будет огромное количество. И среди всего этого вороха данных нам нужно будет как-то отыскать нужную информацию. Известно, что все логи сервера - это файлы, значит, нужно каким-то образом в автоматическом режиме прочитать файл лога, вытащить оттуда записи согласно определенным критериям, и этот комплект записей выложить на стол руководству. Осталось лишь найти инструмент, которым можно этого добиться. Он есть, называется LogParser, взять можно вот здесь: LogParser @ Microsoft.com.
Инструмент этот относится к разряду CLI-утилит - вся работа осуществляется при помощи командной строки. В разборе того, что и куда вводить, чтобы прочитать нужные данные, мне очень сильно помогла вот эта страница: Log Parser - The "Swiss Army Knife" for Intrusion Investigators and Computer Forensics Examiners. По прочтению и пониманию материала был сформирован следующий ярлык вызова утилиты:


А в качестве содержимого файла запроса DeleteEvents.sql используется следующее:

Да, это самый обычный SQL запрос. Допустим, меня очень сильно интересовало, какой нехороший человек стер мой любимый файлик, называвшийся "тест.txt". Вводим запрос, нажимаем Enter, и в ответ получаем красивую табличку вот такого вида:

Откуда видим, что нахала, стершего файл, зовут user01, принадлежит он к домену TEST. И файл был стерт сегодня. Что ж, задача выполнена, мерзавец найден. Дальше уже пусть руководство разбирается, что с user01 делать и какие санкции к нему применять.

P.S. Все вышеописанное справедливо для Windows 2008 Server. В версии 2003 формат записей в логе безопасности был иным, поэтому файл sql запроса скорее всего нужно будет серьезно менять.
P.P.S. Небольшая хохма на десерт. Существуют платные решения из сферы аудита, одно из таких я сегодня захотел попробовать: sсript Logic File System Audit. Как всегда при запросе пробной версии нужно заполнить простыню. Ок, давайте, посмотрим, что и куда писать надо. Вот кусок этой простыни:

Ничего более подходящего, чем Вооруженные силы Европы я там не нашел. А что, хорошая страна ведь ;)

P.P.P.S. Окинул запись взглядом анонимного пользователя - ГРАФИЧЕСКИЕ СМАЙЛЫ! УБЕЙТЕ СЕБЯ О СТЕНУ В КРОВАВЫЕ ОШМЕТКИ!!!

@музыка: KOTO - Die Klapperschlange

@темы: Security

22:09

PCI DSS

We rise up for the things we believe in over and over again

Original @ ServerFault.com.
Перевод истории на Хабрахабре.
Читать всем, даже если вы не имеете никакого отношения к аудиту платежных систем и процессинговых центров. Это феерия.

@темы: Этот безумный мир, Security

We rise up for the things we believe in over and over again

Захотелось посмотреть, а у кого и куда стоит перенаправление почтовых писем в AD. И заодно подсчитать количество таких записей. Компоненты этого скрипта известны - get-qaduser, конвейеры, оператор вывода write-host. Основная сложность в том, что ключевой параметр altrecipient, в котором и хранится информация о цели перенаправления почты, в конвейер просто так не выводится, на выходе получаем пустые значения. Немного поковырявшись в справке по командлету get-qaduser находим ключ -IncludeAllProperties. Данный параметр заставляет команду get-qaduser выбрать из AD всю информацию о пользователе, по-умолчанию этого не происходит. Вторая сложность - по конвейеру нельзя передать конструкцию вида $_.altrecipient оператору write-host. Следовательно, приходится сначала упаковывать требуемые нам значения в переменные, а потом через write-host выводить на экран значения этих переменных. Одновременно в цикле можем подсчитать, сколько таких пользователей нашлось.
Суммируя всю эту информацию, скрипт принимает следующий вид:
get-qaduser -includeallproperties -oa @{altrecipient='*'} | %{$name = $_.name;$alt=$_.altrecipient;$i=$i+1;write-host $name" -> "$alt};write-host $i;$i=0

@музыка: Faun - Iduna

@темы: PowerShell, MS Exchange

We rise up for the things we believe in over and over again
Если в нескольких словах - понедельник вышел жестким.
Вводная - прийти на работу, зная, что висит одна из виртуальных машин (несчастный линукс на CentOS), на пинг не отзывается, бекап с нее, соответственно, не идет. Рестарт и можно спокойно разбираться, что не так. Раньше, чем успел послать ей команду перезапуска М. произносит: "Странно, к коммуникатору не могу подцепиться..." (Коммуникатор = Office Communications Server).
- Да ну нафиг! не знаю ничего про коммуникатор, знаю только про зависшее "зеркало" (та самая виртуальная машина).
Открыть VI Client, окинуть взглядом список машин, убедиться, что все в статусе Running, перейти в консоль коммуникатора, и охренеть на месте:
Virtual machine config file does not exist
Так, стоп. Машина есть, она зарегистрирована, она запущена. Так как же? Тыкаюсь в то самое "зеркало" - перехожу на ее консоль, и получаю абсолютно то же сообщение. ОК, берем наугад третью машину, переключаемся в ее консоль, заранее зная, что получим в ответ. Остается последнее: выбрать хост esxi, перейти на вкладку конфигурации, щелкнуть Storage. Формально все на месте. Видна арена, два раздела. Нажать Rescan и подтвердить худшие опасения - СХД с виртуальными машинами не видна вообще.
Надо сказать - это финиш. Бегом в серверную, открыть дверь, и понять, что же на самом деле не так. А все банально - в серверной жарковато.
Чуть позже подтянулись еще люди, от которых и узнали мы, что в воскресенье тут в очередной раз возникла нештатная ситуация с системой охлаждения и с электропитанием. Последнее наши "железные кони" выдержали - UPSы вытянули их. А вот отсутствие охлаждения - это труба. СХД, державшая на себе весь "запас" виртуальных машин, не выдержала перегрева и "замкнулась в себе", перестав отвечать на любые запросы по любым интерфейсам. В том числе и по Fiber Channel.
Делать нечего. Рестарт СХД. Долгих несколько минут, после чего Rescan на хосте esxi. СХД послушно появилась на месте, хост снова увидел все нужные разделы. Поочередный рестарт всех виртуальных машин, и работа нормализована.
Дальнейшее уже не столь интересно - ревизия бекапов (на всякий случай), да просто огромные волны ненависти в адрес администрации бизнес-центра.

@музыка: Corvus Corax - Avanti, Najo Ratte

@темы: Этот безумный мир

We rise up for the things we believe in over and over again

Нет слов. Просто нет.
История коротка - ноут, проверка на непрошенное зверье. Результаты ниже.
1. Лог задания:


2. Окончательный вердикт при попытке закрыть сам KVRT:

Вопрос - ГДЕ зараза?
Я все понимаю, денег хочется всем. Но мне это до боли напомнило принцип работы так называемых Fake-AV программ.

@музыка: Chrono Cross OST - Shadows and Forest

@темы: Viruses and Spam, Kaspersky Lab

We rise up for the things we believe in over and over again

UPDATE 19-07-2011:Тестирование скриптов на рабочей машине с установленной Windows XP показало, что сценарий очень плохо воспринимает пробелы, которые появляются в именах файлов при развертывании переменной %userprofile%. Выходом является заключение конструкции %userprofile%\filename.txt в кавычки. В тексте записи сценарии исправлены.

UPDATE 16-07-2011 #2: Учитывая, что на некоторых машинах наблюдались проблемы с запуском новой версии утилиты (см. здесь) - ниже выложен модифицированный скрипт для закачки старой, девятой версии KVRT (на сервере его инсталляторы лежат в отдельной папке) - Download KVRT version 9.cmd

UPDATE 16-07-2011: В связи с обновлением KVRT, введением формы загрузки и сменой структуры папок на сервере Kaspersky Lab пришлось немного модифицировать скрипт, чтобы вновь привести его в работоспособное состояние. Изменения выделены жирным шрифтом.

Оригинальная запись:
KVRT - весьма полезный инструмент, с которым довелось вылечить уже немало систем. И Винлоков, и простых файловых вирусов, и трояснов. Но есть у него один недостаток - он не умеет обновляться автоматом. Этот функционал в него специально не закладывался. Он не видит сети, не видит никаких других источников обновленных антивирусных баз, даже намека на кнопочку "обновить" нет. Это сугубо сканер-по-требованию.
Но тем не менее, обновлять его базы все же надо. Делается это выкачкой новой версии утилитки. Каждый раз открывать браузер, щелкать на закладку на ресурс devbuilds.kaspersky-labs.com/devbuilds/AVPTool/, затем подтверждать сохранение файла. Долгое время так и делал. Наконец, мне это надоело. Антивирус (пусть даже такой специфичный) все же должен обновляться регулярно, а не как бог на душу положит. Поэтому командную строку в зубы, гугль в помощь, и вперед.

Вводные данные: папка для сохранения новой версии утилиты - j:\software\kvrt (на флешке), утилита сохраняется под тем же именем, под каким лежит на сайте.
А теперь сам скрипт: Download KVRT.cmd

Как всегда, скрипт требует маленькой доработки напильником. В нем нужно заменить тот самый каталог j:\software\kvrt на то, куда требуется загружать новую версию программы. И еще одно замечание - блок REM check if target KVRT folder exist. Его назначение - проверить, а существует ли тот самый целевой каталог. Если его нет (читать - нет флешки) - не выполнять ничего, так как бессмысленно. Существование каталога я проверяю на уровне самой флешки. Если она есть, значит есть и каталог.
Что можно сделать с этим скриптом? Варианты использования ограничены лишь фантазией. Лично у меня он прицеплен в Планировщик задач, запускается в момент захода моего пользователя в систему или каждый день в 8:30 утра (на случай, если компьютер проработал всю ночь).

@музыка: Nobuo Uematsu - Beyond the Wasteland

@темы: Viruses and Spam, Scripting, Kaspersky Lab

We rise up for the things we believe in over and over again
Программирование без goto - Клац!
Я не случайно начал эту запись со ссылки на один из холиваров мира программирования - стоит ли использовать оператор goto при построении кода? Сам стараюсь его не употреблять ни в каком виде, благо, средств проверки условий и переходов по результату проверки достаточно. Но не в этот раз.
Довелось сегодня править код формы в этом самом UMRA. Форма работала, но после перегруппировки каталогов Active Directory работоспособность резко упала до нуля ;) Ожидаемый результат, который надо исправлять. Чем и занялся.
Итак, что представляет из себя редактор кода в этой консоли? Это достаточно прямолинейный список из заранее подготовленных команд, которые можно передать службе UmraSvc, и она уже будет их выполнять. Команд не так уж много, но и немало. Даже конструкция if... then... else поддерживается, которую я очень активно собирался использовать. Не тут-то было! Да, этот заранее заготовленный блок может проверять довольно много параметров (хотя и там нашлось, к чему придраться), но в качестве действий после проверки условия можно назначить только одно единственное! Угадайте, какое именно. Правильно - пресловутый goto!
Представить все это "великолепие" в виде псевдокода можно следующим образом:

variable1 = 5
if variable1 < 10 then goto label1 else goto label2
label1: action1
goto end
label2: action2
goto end
end:

И вот таким макаром проверять кучу условий. Повторюсь, в блоке then кроме тупого перехода к метке поставить ничего нельзя, вообще. Все дело в том, что код формы редактируется не в виде исходного кода как такового, где где угодно можно записать что угодно, а через самый что ни на есть GUI - отдельная формочка для ввода всех параметров блока if... then... else. Одним словом - такого кошмара я давно не встречал, если встречал где-то вообще.
Код этой несчастной формы в итоге был выправлен, но времени на отладку в итоге ушло куда больше, чем планировалось.
И на вкусное. Механизм проверки условий UMRA, как выяснилось, совершенно не может проверить какое-либо поле формы на непустое значение. На пустое - пожалуйста, можно выбрать тип проверки null or not present, но вот not null там не поставишь. Пришлось изгаляться с вариантом if var is null then end else blah-blah-blah. Тоже не добавило радости, если честно.

@музыка: Ryan Farish - Perfect Clarity

@темы: Этот безумный мир, Scripting

We rise up for the things we believe in over and over again

Решил посмотреть, как будет себя вести при обновлении программный комплекс GFI EndPoint Security. Вполне возможно, что придется это сделать, обновившись с 3-й на четвертую версию. В принципе, все достаточно гладко, за исключением пары-тройки моментов:
1. При обновлении 4-я версия не терпит присутствия на сервере своей старшей сестры, требует ее снести. Следовательно, бекап конфигурации должен быть. На всякий случай (впрочем, он должен быть в любом случае).
2. Для установки обязательно наличие .NET Framework версии 2.
3. Самое занятное: после установки основная служба отказалась стартовать. В окне установщика висит сообщение о том, что установщик эту службу пытается запустить, в оснастке служб она значится, как неработающая. Пробуем "помочь" установщику, запустив службу руками. Минута ожидания, и ОС выводит свое стандартное сообщение о том, что служба стартовала, но затем благополучно завершила работу, так как "ей нечего делать". Помнится, когда я с таким сообщением впервые столкнулся, оно меня очень сильно позабавило, вот тут ее пример описан: www.gotdotnet.ru/blogs/GRP/2838/
Ладно, веселье весельем, а запустить ее нужно. Лезем в базу знаний компании GFI и находим там следующее:
GFI EventsManager service does not start - Клац!
The GFI EventsManager executables are digitally signed by default. When trying to start the service, the application must download the Certificate Revocation List to authenticate. If the download fails due to network connectivity or security reasons the service will fail to start by timing out.

Это уже интереснее. Выходит, что для старта службы программы EventsManager необходим доступ в Сеть. Да, на моем сервере доступа не было (ибо зачем?). И хоть EventsManager - это не EndPoint Security, решил проверить, сработает ли рекомендация для моего случая. После обеспечения доступа во всемирную паутину и повторного запуска установки EndPoint Security служба успешно стартовала, и GFI EndPoint Security 4.3 благополучно завершил установку.
Апгрейд клиентов же просто тривиален.

@музыка: Ryan Farish - Opus (2011)

@темы: Security

We rise up for the things we believe in over and over again

Принесли пациента со следующим диагнозом:
Ваш компьютер заблокирован за просмотр. копирование и тиражирование видеоматериалов содержащих элементы педофилии и насилия над детьми. Для снятия блокировки Вам необходимо
оплатить штраф в размере 400 рублей на номер телефона XXXXXXXXXX В случае оплаты суммы равной штрафу либо превышающей ее на фискальном чеке терминала будет напечатан код разблокировки. Его нужно ввести в поле в нижней части окна и нажать кнопку «Разблокировать». После снятия блокировки Вы должны удалить все материалы содержащие элементы насилия и педофилии. Если в течение 12 часов штраф не будет оплачен, все данные на Вашем персональном компьютере будут безвозвратно удалены, а дело будет передано в суд для разбирательства по статье 242 ч. 1 УК РФ.
Перезагрузка или выключение компьютера приведет к незамедлительному удалению ВСЕХ данных, включая код операционной системы и BIOS, с невозможностью дальнейшего восстановления.


Качественный лок, к диспетчеру задач не подобраться (и как водится, работали под администраторской учеткой, куда ж без этого). Разбираем по складам.
Загрузка с BartPe с параллельным поиском о зловреде в сети. Нашлось много, в основном это мольбы о том, что код нужен прямо сейчас. Среди "волн вайна" (с) отыскивается полезная информация - тело вируса заседает в каталоге пользователя (если не администратор), или в профиле All users\Application Data (если админа пробили). Удалить оттуда. Параллельно вирус модифицирует userinit.exe, как в system32, так и в dllcache - этот уже изощреннее, ага. Ну и само собой, меняется параметр Shell в реестре, чтобы сразу после входа в систему вместо explorer.exe запускался зловред.
Но есть и одно НО! Поражаются не только копии файла userinit.exe, но и taskmgr.exe, так же и в system32, и в dllcache. На это уже наткнулись, когда запустили систему после, казалось бы, успешного лечения.
Суммарная информация:
Лечение в оффлайне.
1. Удаление тел вируса из папок профилей и каталога system32.
2. Копирование на пораженную машину неинфицированных файлов userinit.exe и taskmgr.exe в каталоги system32 и dllcache.
3. Исправление пути на оболочку среды, запускающуюся после входа в систему. Как это сделать: в окружении BartPe подцепить пораженный реестр: Клац, и выправить необходимые параметры - Клац!.
4. После успешной загрузки и входа в систему обязательно запустить от имени администратора команду sfc /scannow, чтобы проверить критичные файлы.
5. Обновить базы антивирусного ПО и провести полную проверку.
6 - last, but not the least - перейти на использование ограниченной учетной записи для повседневной работы. Чинить пораженный профиль значительно проще, чем пораженную систему в целом.

@музыка: Blackmore's Night - Storm

@темы: Viruses and Spam

20:14

TDSS

We rise up for the things we believe in over and over again

Все же довелось столкнуться со зловредом, обозначенным в заголовке. Если быть точным, то с его модификацией TDSS.d. Очередное подтверждение тому, что азиатские антивирусы в нашей стране не могут считаться достаточной защитой.
Интересна ситуация, из-за которой и возникло подозрение на инфицирование чем-либо. При работе в IE 8 очень часто стали появляться сообщения вида:
Из-за проблемы на веб-странице IE закрыл вкладку и открыл ее снова
и перезагрузкой ранее открытой странице в той же вкладке, где она и открыта. А известно, что после двух обнаружений проблем браузер просто закрывает такую страницу и выводит сообщение об ошибке. Проявлялось стабильно на всех открываемых сайтах. Что ж, KVRT в помощь.
Результат - TDSS.d обнаружен в активном виде. Пристрелен. Последующая проверка тем же KVRT и TDSSKiller показала, что пристрелен качественно, рецидивов нет. Хотя есть мысль еще пройти по машине GMER'ом. На всякий случай...

@музыка: Amethystium - Odyssey (2006 - Emblem)

@темы: Viruses and Spam

We rise up for the things we believe in over and over again
Время выполнения скрипта. Весьма важный показатель производительности системы. Ни с того ни с сего некоторые сотрудники начали жаловаться, что при загрузке компьютера уж очень много времени уходит на стадию "Выполнение сценариев запуска". Сценариев этих вообще-то к компьютерам привязано довольно много, и тот факт, что нужное на их выполнение время исчисляется далеко не секундами, а их парой-тройкой десятков - это норма. Но не 10 минут же! К тому же 10 минут - это deadline для системы, по достижении которого она (система) просто прекратит обработку сценариев и продолжит загружаться. Нужно узнать, какой из скриптов тормозит процесс.
Есть два варианта. Первый применим в том случае, если в домене не включена параллельная обработка сценариев - каждый следующий скрипт будет запускаться только по окончании выполнения предыдущего (это настройка по-умолчанию). В этом случае можно просто открыть консоль GPMC, взять интересующую нас систему и собрать с нее результирующий набор политик. Дальше на вкладке с перечисленными параметрами, которые применяются к системе из политик, можно раскрыть раздел сценраиев запуска и просто посмотреть, когда в последний раз был запущен тот или иной скрипт. Учитывая, что запускаются они последовательно - можно сразу увидеть, где узкое место.
Второй метод может пригодиться там, где параллельная обработка сценариев уже включена (это ускоряет процесс загрузки, по понятным причинам). Но для этого придется каждый выполняемый сценарий немного изменить - повесить на него "рамку":
sсript run time
Эта рамка выведет время выполнения сценария в текстовый файл. Его расположение задается в блоке set output file name - в профиле пользователя (если измеряем производительность скрипта входа пользователя), либо в папке %SystemRoot% - если интересует скрипт загрузки самого компьютера. Естественно, эти пути можно и поменять под свой вкус.
Блок sсript body понятен и без объяснений.
Можно, конечно, обойтись и простым выводом на экран, а не в файл. Однако, учитывая, что лично мне придется эти изменения вносить в боевые версии сценариев, лучше лишний раз пользователям не докучать и выполнять все действия в фоне.

@музыка: El DeBarge - Who's Johnny

@темы: Scripting

We rise up for the things we believe in over and over again
Windows 2008 - единственная из систем, к которой пришлось применять индивидуальный подход при ее переносе с гипервизора XenServer на VMWare. Суть в том, что при удаленном переносе при помощи VMWare Converter Standalone в режиме клиент-сервер этот самый конвертер не может найти дисков исходной системы. Нет дисков - нечего конвертировать. А посему получаем ошибку.
Что делать? Выход прост - установить конвертер прямо на исходную машину и конвертировать ее. В этом случае с дисками будет полный порядок. Веселости начинаются уже после этого.
Итак, исходная система превращена в виртуальную машину, потушена. Виртуалка поднимается, устанавливает все необходимые драйверы, инструменты... Новому сетевому адаптеру назначается старый IP-адрес, сервер видит компьютеры нашей сети, компьютеры способны найти этот сервер и по имени, и по старому IP - все счастливы. А через месяц я вижу, что Windows 2008 радостно сообщает следующее:
0xC004F00F
The Software Licensing Service reported that the hardware ID binding is beyond level of tolerance.


Приехали, система "потеряла" активацию, хотя это и неудивительно. Удивительно другое - почему она не поймала ее заново? Пытаюсь вручную сказать ей, откуда брать всю необходимую информацию:
Elevated Cmd,
slmgr.vbs -skms x.x.x.x
slmgr.vbs -ato
Не выходит каменный цветок, а судя по сообщениям, приходящим в ответ на эту команду, что-то случилось с сервером KMS, который не в моем ведении:
0xC004F039
The software Licensing Service reported that the computer could not be activated. The Key Management Service (KMS) is not enabled.


Звоню ребятам, обслуживающим этого зверя, докладываю о проблеме, на том конце обещают разобраться. Ну а пока система поживет в grace-period, уж за 60 дней всяко решим проблему, и это еще без учета slmgr.vbs -rearm.
Недавно все же решил еще покопать, что же пошло не так, тем более, что эксперимент по установке нового экзепляра Windows 2008 и активации оного прошел успешно. Следовательно, KMS работает исправно, и проблему надо искать на стороне того самого сервера.
Ipconfig /all, route print - на первый взгляд все нормально. Но ведь не все же. Еще раз для верности ввожу просто ipconfig, без ключа расширенного вывода информации... результат потряс: системе был назначен IP-адрес, была назначена маска подсети, а вот шлюз по-умолчанию - не задан вовсе.
Это что же получается, я, такая умная "маша", тупо забыл поставить шлюз? Вбиваю нужный адрес, после чего выполняю принудительную активацию (сервер активации ведь уже прописан), и система радостно говорит, что ключ найден, получен, установлен, в общем - все просто замечательно. Ладно, ошибся, с кем не бывает.
Настала пора переносить второй сервер, тоже под управлением Windows 2008, причем он довольно капризен, и если что-то пойдет не так - хлопот будет много. Все как и раньше, конвертер на машину, запуск, успешное преобразование, поднятие машины, установка драйверов, назначение старого IP. И двойная проверка шлюза, специально даже на бумажке записал. Рестарт системы и... И шлюза снова нет в списках адресов! Вот же мерзавка ;) Понятное дело, что в этом случае OCS FE просто не запустится, так как не увидит пула серверов. Ладно, хоть знаем, почему так - прописываем шлюз, еще раз перезагружаем сервер, и после этого убеждаемся, что все службы работают, все необходимые данные по сети бегают, а активация уже в автоматическом режиме пройдена.
Больше всего в этой истории смутило то, что несмотря на отсутствие шлюза сервер видел все в пределах нашей сети. Сеть же другого региона была недоступной. Да, о таблице маршрутов и on-link все же стоит помнить.

@музыка: Within Temptation - See who I am

@темы: Этот безумный мир

We rise up for the things we believe in over and over again

Весьма любопытный случай.
Один из сотрудников жалуется на то, что из дома не может попасть на свой почтовый ящик - система просто не принимает его учетные данные. Провожу тест у себя, сбрасывая пароль на стандартный для таких случаев - все отлично срабатывает. Ну не иначе где-то ошибся человек.
Раз, второй, третий... Умом понимаю, что что-то не так. Ну не может человек настолько упорно набирать пароль неправильно. Тем не менее, проблема заглохла, больше звонков длительное время не поступало.
Недавно эта неприятность снова голову подняла, но уже с другим сотрудником. Этот поступил умнее, пришел в отдел лично. Лично набрал свой пароль на консоли администратора - не пускает. Прямо тут же меняем ему пароль на стандартный - все проходит на ура. Сотрудник меняет пароль на свой собственный - и тут же получает отлуп. Как так?! Посмеялись, потом начали размышлять, что и к чему. В глаза бросился тот факт, что тестовый пароль на английском языке, а сотрудник свой набирал на русском. И задавал его на русском. То есть мы пришли к тому, что OWA по какой-то ей ведомой причине не принимает национальные символы в пароле. Ладно, рекомендовали сотруднику использовать англоязычный пароль, а для себя пометили задачку в выполнению, но не как горящую.
Сегодня все же дошли руки до поднятия ручного Exchange 2003 SP2. Настраиваю OWA, меняю у тестового пользователя пароль на кириллический, жму Enter - и я в ящике этого пользователя. Все чудесатее и чудесатее (с).
Форумы молчат. Есть упоминания о том, что имеется проблема в случае кириллических логинов, но здесь другой случай. На яндекс в подобных вопросах уже давно не надеемся, гугл разводит руками. Полчаса вдумчивого сравнения конфигурации... Затем мысль - а что у нас с настройками регионов и кодовых таблиц. На самом деле региональные настройки не так важны, нам деньги не мерять. А вот кодовые таблицы - это уже любопытно. Оказалось, что на боевом сервере в настройках кодировок для non-Unicode приложений стоит английский язык, на тестовом же сервере - русский. Ну что же - смена на русский на боевом, перезагрузка... Долгие 3 минуты ожидания, смена пароля тестового доменного пользователя, заход на OWA... Success!!!
Exchange 2003 SP2 и настройки не-Юникод приложений - такого я представить себе не мог. Теперь представляю.
Еще одна поставленная галочка, еще один случай в копилку. Надеюсь, кому-то эта запись сэкономит немало времени в подобной ситуации.

UPD. Если конфигурация Exchange 2003 включает в себя два сервера, front-end и back-end, менять кодовую таблицу нужно на front-end-сервере.

@музыка: Rise Against - Help Is On The Way Shift 2 Remix

@настроение: Shocked

@темы: Security, MS Exchange