Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 2000/XP » Выгружать программы!

Ответить
Настройки темы
Выгружать программы!

Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как сделать службу не выгружаемой, чтобы с диспечера нельзя было ее выгружать, под администратором.
Помогите очень надо.

Отправлено: 18:02, 03-05-2004

 

(*.*)


Сообщения: 36497
Благодарности: 6676

Профиль | Сайт | Отправить PM | Цитировать


Viktorvul
Цитата:
Как сделать службу не выгружаемой, чтобы с диспечера нельзя было ее выгружать
Службы с диспетчера задач не выгружаются. Поясните вопрос.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 22:16, 03-05-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Есть служба которая загружается автоматически, и ее можно выгрузить в любой момент. Хотелось бы чтобы ее нельзя было выгружать.
Объянсню почему, есть компьютерный зал, на всех машинах клуб-клиент, и клиенты же очень мудрые выгружают его, об этом предупреждает клуб-админ, и все становится на свои места. Но это иногда делает и работник. Иногда это присекается, но не следить же постоянно за ним. Тем более что я ему предложил нормальные способы заработка - набор текста, обучать клиентов, консультации и т.д. и т.п.
Под юзером компьютер оставить не могу, потому что не все игры нормально работают (т.е. под юзером клуб-клиент не выгружается, но другая проблема игры нормально не идут).
Если есть возможность сделать службу клуб-клиент системной, чтобы при ее выгрузке компьютер скажем выключался или перезагружался.
Я пробовал постваить, что если ее выгружаешь она сама загружалась но не помогает, т.е. во вкладке сбои ...
Не знаю правильно объяснил я или нет.


Отправлено: 12:58, 04-05-2004 | #3


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Проблема с отслеживанием "вечно"-работающего процесса (службы либо приложения) имеет много общего с проблемой скрытия от пользователя работающего процесса. Уже несколько раз подобные темы поднимались, но универсального решения не найдено до сих пор. Как правило, задача становиться неразрешимой уже на теоретическом уровне, при обдумывании действий "продвинутого" пользователя по обходу защиты. Всегда оказывается, что усилия администратора сводятся "на нет" при использовании пользователем неких утилит от "третьих" фирм.

Но в данном конкретном случае, имхо, есть надежда. Представляю на обсуждение свой вариант решения проблемы (не "готовенькое", впрочем; придется поработать руками и головой).  Сразу хочу предупредить, что решение предполагает XP (нет у меня ничего другого под рукой) на машине администратора и NT/2k/XP на "подследственной" машине.

Итак, что я предлагаю? Сначала о том, как это выглядит "на словах". При старте Windows на машине А, за которой ведётся наблюдение, запускается некая служба сА. По условию задачи, мы должны предотвратить остановку данной службы, используя все методы, вплоть до выключения нарушителя. Наблюдение за работой сА на "подследственной" машине А ведётся с другой машины - Б; как нетрудно догадаться, это машина администратора. Использование в качестве "базы" администраторской машины позволит избежать затяжной войны с хитроумным пользователем, который наверняка быстро научится останавливать службу сА вместе со службами слежения сБ на локальной машине А. Если же он нагло полезет на машину Б через RPC (или "вживую", что ещё наглее), то получит по ручонкам от админа. Теперь остаётся решить вопрос, как мы будем следить за сА.

Одним из простых решений является периодические запросы с машины Б с целью получения списка исполняемых на машине А процессов. При отсутствии в полученном списке работающей службы сА можно идти за "скалкой" . Периодичность мы можем обеспечить вызовом т.н. "запланированной задачи". Для этого будем использовать стандартный виндовый планировщик задач schtasks. Он является более мощной версией at и позволяет нам "не заморачиваться" насчёт периодического запуска каждый несколько минут. Кто хочет, может использовать приблуды типа crond и т.д. Я же делаю упор на стандартные стредства виндов. Итак, вызов проверяющего скрипта я предполагал организовать так:
c:\> schtasks /create /sc MINUTE /mo 10 /tr c:\temp\1.bat /tn Checker
Кому любопытно, может почитать о schtasks в стандартной виндовой "справке и поддержке", я же отмечу только, что имя запускаемого скрипта-"проверяющего" - c:\temp\1.bat, имя 10-минутной повторяющейся задачи для диспетчера назначенных задач - Checker. После ввода команды (из-под cmd.exe) необходимо указать пароль.
Первый подводный камень ждёт нас именно тут. Ни хрена у меня нее заработал этот диспетчер задач. То есть он работал, писал, что "усе у порядке", но ничего на самом деле не делал, а в лог c:\windows\SchedLgU.Txt писал странности типа:
"Checker.job" (1.bat) 06.05.2004 0:37:58 ** ОШИБКА **
Попытка использования учетной записи задания окончилась неудачей, поэтому задание выполнено не было. Специфическая ошибка: 0x8007052e:
Вход в систему не произведен: имя пользователя или пароль не опознаны. Проверьте правильность указания имени пользователя и пароля и повторите попытку.

Возможны, что называется, варианты. Всё вылечилось явным заданием атрибутов пользователя:
с:\> schtasks /create /sc MINUTE /mo 10 /tr c:\temp\1.bat /tn Checker /s \\имямашиныБ /u Администратор /p *п*а*р*о*л*ь*

Теперь давайте определимся, как же мы сможем отследить работу службы сА на машине А. Поскольку мы юзеры неопытные и на с++ не ваяем, попытаемся снова обойтись средствами виндов. В голову первым делом приходит слово "tasklist". Вообще-то мне сначала хотелось замутить всё на pslist от www.sysinternals.com, но... всё должно быть "родное виндовое"! Изучаем help tasklist. Изучаем ключи. Решение потихоньку оформляется. Для нашей цели нужно использовать команду вроде
c:\> tasklist /s \\имямашиныА /svc /FI "службы eq сА" /FI "Состояние eq Работает"
То есть мы проверяем наличие в списке процессов машины А процесса, который использует службу сА и при этом работает. Мы можем усилить фильтр за счёт указания дополнительного атрибута - имени владельца процесса (SYSTEM). Но... Встречаем второй подводный камень.

Кривые руки локализаторов (то ли из USA M$, то ли наших родных) привели к некорректной работе такого миленького и удобного приложения. Догадаться, какие имена используются при задании фильтров мне удалось далеко не сразу. В конце концов выяснилось, что один из фильтров задать вообще никогда не удастся - при выводе состояние работы писалось по-русски, а проверялось по-английски. WTF?, сказал я, и достал волшебный рашпиль.

Берём программку, позволяющую редактировать ресурсы экзешников. Я пользуюсь (и Вам советую) ResHack. Откройте с её помощью файл c:\windows\system32\tasklist.exe. Найдите в строковых ресурсах строку String Table\15\1049\226 и замените значение "running|not responding" на "Работает|not responding". Это исправит корявость фильтра. Теперь сохраним (после Compile Script) программу обратно, но под другим именем (правила хорошего тона обязывают), например как tasklist2.exe. Теперь для проверки скомандуйте
c:\> tasklist2 /V /FI "Пользователь eq NT AUTHORITY\SYSTEM" /FI "Состояние eq Работает"
Должна отобразится куча служб. Для сравнения:
c:\> tasklist /V /FI "Пользователь eq NT AUTHORITY\SYSTEM" /FI "Состояние eq running"
Пусто. Удивлены? Я - нет. Ну ладно, пора сращивать...

Ориентировочно, проверка наличия службы выглядит так (файл-батник c:\temp\1.bat):
Код: Выделить весь код
 
c:\windows\system32\tasklist2.exe /svc /FI "службы eq сА" /FI "Состояние eq Работает" /FI "Пользователь eq NT AUTHORITY\SYSTEM" 
if errorlevel 1 goto killthemall else goto exithere 
:killthemall 
> c:\temp\log.txt echo Этот гад остановил службу. Мочи козлов!!! 
start c:\temp\log.txt 
:exithere
Но тут мы нарываемся ещё на несколько плюх.
Во-первых, батник выполняется из-под cmd.exe, а текст мы пишем в ноутпаде. У кого как, а у меня сразу возникли неприятности с кодировкой. Введенный текст превратился "под досом" в нечитабельные крякозябли, приведя tasklist2.exe в дикий восторг. Я-то быстро решил проблему (у меня под рукой куча всяких recode, hiew и т.д.), а вот кому-то приётся попотеть. В качестве одного из вариантов могу предложить M$Word. Он умеет писать\читать DOS-текст.
Второй трабл в том, что запущенное из-под schtasks приложение не может интерактивно взаимодействовать с рабочим столом. Вообще-то данную проблему решить можно (например, с помощью psexec и т.п.), но меня заломало и я вывернулся просто: запуск ноутпада через start log.txt убираем, зато вставляем net send самому себе. Выглядит это гораздо веселее и дает возможность Админу закрыть сообщение.

Итак...

Вот что должно быть записано в проверяющем скрипте c:\temp\1.bat:
Код: Выделить весь код
 
c:\windows\system32\tasklist2.exe /svc /FI "б«г¦Ўл eq xxxxxxxx" /FI "‘®бв®п*ЁҐ eq ђ Ў®в Ґв" /FI "Џ®«м§®ў ⥫м eq NT AUTHORITY\SYSTEM" 
if errorlevel 1 (goto killthemall) else goto exithere 
:killthemall 
>  c:\temp\log.txt echo Служба xxxxxxxx была отключена при последней проверке в 
>> c:\temp\log.txt time /t 
net send имямашиныБ ќв®в Ј ¤ ®бв *®ўЁ« б«г¦Ўг. Њ®зЁ Є®§«®ў!!! 
:exithere
Вместо xxxxxxxx следует записать имя Вашей службы. Крякозябли оставьте, как есть (так и задумано). Теперь запустите задачку в расписании, как описано выше...
Подумал, и решил дать виндовый "перевод", а то вдруг в посте ещё что-нибудь переврётся...
c:\windows\system32\tasklist2.exe /svc /FI "службы eq xxxxxxxx" /FI "Состояние eq Работает" /FI "Пользователь eq NT AUTHORITY\SYSTEM"
if errorlevel 1 (goto killthemall) else goto exithere
:killthemall
>  c:\temp\log.txt echo ‘«г¦Ў  xxxxxxxx Ўл«  ®вЄ«озҐ*  ЇаЁ Ї®б«Ґ¤*Ґ© Їа®ўҐаЄҐ ў
>> c:\temp\log.txt time /t
net send имямашиныБ Этот гад остановил службу. Мочи козлов!!!
:exithere


Некоторые заключителные замечания.
1) После появления сообщения об отключенной службе не забудьте сказать
c:\> schtasks /delete /tn Checker
а то Вас будет продолжать засыпать мессагами. Можно добавить удаление задания в батник проверки, но я ещё не придумал, как сказать "йес" на запрос об удалении задания.
2) По поводу выключения злостного юзера - к нашим услугам множество программ типа shutdown.exe, psexec и т.д. Запихнём их в "следящий" батник и "дело в шляпе".
3) При необходимости следить за несколькими машинами можно делать их перебор через FOR, либо просто описать все проверки для каждой "подследственной" машины отдельно.

Специально для vippy (если он сюда заглянет):
Данный механизм можно (по идее) использовать для обнаружения и перезапуска зависших программ на локальной машине. Нужно только через ResHack переименовать и "non responding" во что-то более вразумительное на русском (не знаю точно во что, руки не дошли, посмотрите tasklists /v и т.п.). Вопрос только в том, будет ли зависшее приложение при нулевой активности пользователя помечено как неотвечающее.

По поводу безопасности: вообще-то ожидаются некоторые неприянтности. Поскольку мы захотим запускать задачи "одной кнопкой", возникает искушение прописать пароль администратора внутрь батников. Лучше этого не делать, а набивать его вручную. Например, в случае с schtasks, указание /p без собственно пароля должно приостановить создание задачи, спросить в консоли пароль администратора, а затем собственно создать процесс. С tasklists тоже могут возникнуть осложнения, првда в моем случае всё было ok.

PS. Кульным хаЦкерам: При использовании материала с целью получения баблоса не забудьте указать источник: www.forum.oszone.ru (ну и про меня не забывайте )
PPS. Вопросы наверняка возникнут, особенно у неискушенных пользователей. Спрашивайте здесь, Вам кто-нибудь ответит непременно. Только совсем уж бестолковых вопросов не надо, ладно? А к профессионалам просьба - если заметите ошибки в рассуждениях или в синтаксисе, не поленитесь указать на них, плз.

[s]Исправлено: hasherfrog, 9:24 6-05-2004[/s]

Отправлено: 09:17, 06-05-2004 | #4


Новый участник


Сообщения: 22
Благодарности: 0

Профиль | Отправить PM | Цитировать


Идея интересная, надо попробовать.
Еще напрашивается вопрос, нет ли программы типа "Назначить задания" которая имела ы доступ по паролю, чтобы она скажем выполняла задание через каждую минуту, но если задача запущена, то прекращала действовать.
Я попробовал так у себя с калькулятором, усе было ок, за исключчением того что, любой мог отключить это задание.
Щас получается другая проблема, запуск задания по паролю.

Отправлено: 10:59, 07-05-2004 | #5


Аватара для EagleXK

Новый участник


Сообщения: 36
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Действительно, круто. Я уже давно придумал приблизительно такую же схему на заказ одного клуба, но после того, как я сказал, чтолько будет стоить написание проги, "хозяин" сказал, что они лучше будут работать со взломанным КЗ .

-------
Информация должна быть общедоступной!


Отправлено: 13:56, 07-05-2004 | #6


Аватара для Guest

Guest


Профиль | Цитировать


hasherfrog
Огромнейшее спасибо, особеноо за письм ои персональное обращение

Пошёл пробовать, о резульаттах ДОЛОЖУ непременно.

А вот теперь я точно  

еще арз ОГРОМНОЕ С П А С И Б О    и r~e~s~p~e~c~t

Отправлено: 00:15, 09-05-2004 | #7


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Итак, прошла неделя, а никто не ругается. Напрасно. В приведённых кусках кода есть ошибки. Я доработал кое-что и предлагаю Вам улучшенный вариант решения задачи. Чего нам не хватало? Во-первых, нормального управления программой-"следователем". Писать всё руками в терминале не очень-то удобно. Во-вторых, отсутствует проверка нескольких машин. В-третьих, постоянно приходится прерывать задание в расписании, чтобы не "заваливало" сообщениями. Ну и вообще, надо пофиксить ошибки в ранней версии

Начнём почти всё начала... У нас будет три батника - запуск "следователя", батник для проверки одной машины, батник для нескольких машин. Два последних скрипта выделены в отдельные файлы из-за особенностей команды FOR и для удобства отладки. Файлы будут называться соответственно: checker.bat, check_host.bat и check_hosts.bat

Код check_host.bat:
Код: Выделить весь код
@rem скрипт для проверки одной машины 
@set ADMINHOST=frog 
@set STASKHOME=C:\Temp\DZ 
@set SERVICETOCHECK=Reset 5 
 
@if "%1"=="" goto bad_usage 
 
@ping %1 -n 1 >nul 
@if errorlevel 1 goto ping_fails 
@goto check_task 
 
:ping_fails 
@if exist %STASKHOME%\%1.offlined goto exit_here 
@echo At %DATE% (%TIME%) host %1 is not responding! > %STASKHOME%\%1.offlined 
@net send %ADMINHOST% Host %1 is not responding! It will be excluded from checklist! 
@goto exit_here 
 
:check_task 
@%STASKHOME%\tasklist2.exe /svc /FI "б«г¦Ўл eq %SERVICETOCHECK%" /FI "‘®бв®п*ЁҐ eq ђ Ў®в Ґв" /FI "Џ®«м§®ў ⥫м eq NT AUTHORITY\SYSTEM" > %STASKHOME%\temporary.tmp 
@rem This f**ked tasklist don't change errorlevel! 
@find "%SERVICETOCHECK%" %STASKHOME%\temporary.tmp > nul 
@if errorlevel 1 goto pavlik 
@del %STASKHOME%\temporary.tmp > nul 
@goto exit_here 
 
:pavlik 
@del %STASKHOME%\temporary.tmp > nul 
@if exist %STASKHOME%\%1.badguy goto exit_here 
@echo Служба %SERVICETOCHECK% была отключена %DATE% (%TIME%) > %STASKHOME%\%1.badguy 
@net send %ADMINHOST% %1 : ќв®в Ј ¤ ®бв *®ўЁ« б«г¦Ўг %SERVICETOCHECK%! 
@goto exit_here 
 
:bad_usage 
@echo Usage: check_host.bat HOSTNAME 
@goto exit_here 
 
:exit_here 
@set ADMINHOST= 
@set STASKHOME= 
@set SERVICETOCHECK=
Пояснения к коду:
1) Для удобства (и Вашего, и моего) определение некоторых "личных" данных поизводятся в начале скрипта в виде команд @set VAR=Что-то-там. Это позволяет быстро редактировать данные применительно к каждому конкретному случаю. В данном скрипте определяются:
ADMINHOST - имя машины администратора, куда пойдёт сообщение об ошибке.
STASKHOME - домашния директория для скриптов и их временных данных
SERVICETOCHECK - имя службы, которую мы "блюдём".
2) Если Вы заметили, машина предварительно поверяется на "наличие в сети". Если машина не пингуется, то проверка службы на ней бессмысленна. Введение файла-блокера с расширенением .offlined позволяет избежать бесконечных сообщений об отключении. А кто будет чистить эти файлы? - спросите Вы. Об этом много позже.
3) Ещё одна исправленная ошибка (я бы сказал, Major bug). Как показала проверка, tasklist не устанавливает errorlevel! Точнее, устанавливает только при неправильных параметрах своего собственного Запуска. Пришлось выкручиваться с помощью команды find.
4) Отключение службы теперь вызывает однократное появление сообщения на машине администратора. За это отвечает файл .badguy. Об его удалении также поговорим попозже.
5) Чистка установленных в скрипте переменных желательна, но необязательна, поскольку особо секретных данных тут нет.
6) Если Вам интересно, что скрывается за крякозяблями, сохраните файл в ноутпаде, откройте cmd и скажите more check_host.bat
7) Как видите, добавлено некоторое подобие параметров запуска. Это позволяет использовать данную команду отдельно от остальных батников. Только необходимо заботиться об .offlined и .badguy -файлах.

Ссылка на www.forum.oszone.net при использовании данных в коммерческих целях обязательна.
Следующий пост будет про check_hosts.bat...

[s]Исправлено: hasherfrog, 11:10 13-05-2004[/s]

Добавлено:

Второй файл гораздо меньше по размеру. Он занимается проверкой машин из списка путем последовательного вызова скрапта check_host.bat для каждой машины.

Код check_hosts.bat:
Код: Выделить весь код
@cls 
@set %HOSTLIST=frog main temp fedya vasya petya tetyatanya 
@FOR %%H IN (%HOSTLIST%) DO @check_host.bat %%H 
@set %HOSTLIST=
Имена машин, как можно догадатся, объявлены в HOSTLIST. Данный файл будет основным заданием, которое мы собираемся выполнять по расписанию. Остается только привести текст батника, который умеет поставить его в расписание. Это будет следующий пост (для удобства чтения).

Добавлено:

Мля, всё-таки склеились. Ждите следующий пост после 14:00. Может тогда не склеются. Или напишите что-нибудь...

Отправлено: 10:36, 13-05-2004 | #8


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


о как я извратился с перебивкой... надоело уже ждать...
Итак, код запуска "проверяющего" задания - checker.bat
Код: Выделить весь код
@cls 
@set ADMINHOST=frog 
@rem set %ADMINNAME=Администратор 
@set ADMINNAME=Ђ¤¬Ё*Ёбва в®а 
@rem уберите rem в ледующей строке, если хотите хранить пароль внутри скрипта 
@rem set ADMINPSWD=*p*a*s*s* 
@set STASKNAME=Host_Checker 
@set STASKHOME=c:\Temp\DZ 
@set STASKFILE=C:\Temp\DZ\check_hosts.bat 
@set STASKLOGS=C:\Temp\DZ\checker.logs 
@set STASKTIME=1 
 
@rem =========================================================================== 
@if "%1"=="" goto usage 
@if "%1"=="start" goto start_here 
@if "%1"=="stop" goto stop_here 
@if "%1"=="reset" goto reset_here 
@goto usage 
 
:stop_here 
@echo Stopping %STASKNAME%... 
@schtasks /delete /tn %STASKNAME% /F 
@>> %STASKLOGS% echo Attemps to stop %STASKNAME% 
@>> %STASKLOGS% echo %DATE% (%TIME%) 
@goto exit_here 
 
:reset_here 
@echo Don't forget to launch %STASKNAME%! 
@echo Reset will only refresh offlined hosts. 
@if exist %STASKHOME%\*.offlined del %STASKHOME%\*.offlined 
@if exist %STASKHOME%\*.badguy del %STASKHOME%\*.badguy 
@if exist %STASKHOME%\temporary.tmp del %STASKHOME%\temporary.tmp 
@goto exit_here 
 
:start_here 
@echo Launching %STASKNAME%... 
@if "%ADMINPSWD%"=="" set /P ADMINPSWD=Enter admin password: 
@schtasks /create /sc MINUTE /mo %STASKTIME% /tr %STASKFILE% /tn %STASKNAME% /s \\%ADMINHOST% /u %ADMINNAME% /p %ADMINPSWD% 
@if errorlevel 1 goto try_again 
@goto exit_ok 
 
@rem =========================================================================== 
:try_again 
@echo Sheduler has some error when starting %STASKNAME%! 
@echo We will try launch it again... 
@echo First, we will free IPC$ at \\%ADMINHOST%... 
@net use \\%ADMINHOST% /delete 
@echo Second, we will recreate %STASKNAME% task... 
@schtasks /delete /tn %STASKNAME% /F 
@echo Now, we will try again... 
 
@schtasks /create /sc MINUTE /mo %STASKTIME% /tr %STASKFILE% /tn %STASKNAME% /s \\%ADMINHOST% /u %ADMINNAME% /p %ADMINPSWD% 
@if errorlevel 0 goto exit_ok 
 
:too_bad 
@echo Too bad. I don't know, what's wrong... 
@net send %ADMINHOST% Error! Please, check admin login and password! 
@>  %STASKLOGS% echo Lauching %STASKNAME% is failed. 
@>> %STASKLOGS% echo %DATE% (%TIME%) 
@goto exit_here 
 
@rem =========================================================================== 
:exit_ok 
@rem Впрочем, не мешает убедиться в правильности имени админа пароля 
@rem Проблема в том, что schtasks некорректно реагирует на ошибки, связанные с 
@rem неправильной авторизацией (не выставляется errorlevel). 
@if exist %STASKHOME%\*.offlined del %STASKHOME%\*.offlined 
@if exist %STASKHOME%\*.badguy del %STASKHOME%\*.badguy 
@if exist %STASKHOME%\temporary.tmp del %STASKHOME%\temporary.tmp 
@schtasks /run /tn %STASKNAME% 
@if errorlevel 1 goto too_bad 
 
@echo Ok. Scheduler is launched. %STASKNAME% is running. 
@>  %STASKLOGS% echo %STASKNAME% seems to be launched ok. 
@>> %STASKLOGS% echo %DATE% (%TIME%) 
@>> %STASKLOGS% schtasks /query 
@goto exit_here 
 
@rem =========================================================================== 
:usage 
@echo Usage: checker.bat [start/stop/reset] 
@goto exit_here 
 
@rem =========================================================================== 
:exit_here 
@set ADMINHOST= 
@set ADMINNAME= 
@set ADMINPSWD= 
@set STASKNAME= 
@set STASKFILE= 
@set STASKLOGS= 
@set STASKTIME= 
@set STASKHOME=
Подробности, в том числе критические замечания, в следующем посте...
Внимание! Ссылка на www.forum.oszone.net при использовании данных в коммерческих целях обязательна.

Отправлено: 13:27, 13-05-2004 | #9


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Я не буду сейчас подробно описывать аргументы командной строки для checker.bat Думаю, Вы сами разберетесь. Просто запустите, он Вам всё напишет. По поводу же аргументов, настраиваемых в голове скрипта я объясню подробно:
ADMINHOST - имя машины администратора, на которой запускается следящий скрипт.
ADMINNAME - имя (логин) администратора
ADMINPSWD - пароль для логина администратора. может не задаватьсяявно (см. примечания по безовасности)
STASKNAME - имя задания, под которым будет крутится следящий скрипт
STASKFILE - имя батника следящего скрипта (check_hosts.bat)
STASKLOGS - имя лог-файла, куда сливается некоторая информация для админа
STASKTIME - интервал в минутах между проверками
STASKHOME - директория, где предполагается держать все файлы-скрипты, логи и т.д.

Подводные камни, связанные с особенностями виндовых приложений:
1) По поводу замены строковых ресурсов в tasklist.exe. Я посмотрел, String Table\15\1049\226 надо привести в соответствие String Table\16\1049\251 и String Table\16\1049\252, т.е. в String Table\15\1049\226 должна быть строка "Работает|Не отвечает".
2) Ещё один глюк, связанный с errorlevel. Программа schtasks не устанавливает errorlevel при ошибке авторизации. Это может привести к некорректной работе скрипта checker.bat. Для того, чтобы обойти данный баг, я включил проверку назначенного задания путём его немедленного вызова. Этим, кстати, убивается ещё один заяц - сразу после старта скрипта обновляется состояние файлов .offlinde и .bagguy.

Проблемы безопасности:
1) Есть один спорный момент - включение пароля администратора файл скрипта checker.bat или его запрос у пользователя. Первый вариант более удобен, второй - более безопасен. Использование ключа /p вместе с командой set даёт возможность админу задать пароль по ходу работы скритпа. Но! Введённый пароль отображается без звездочек.  Чтобы скрыть пароль совсем, надо убрать задание пароля через set /p и тогда команда shctasks будет спрашивать его "лично". Неприятность тогда будет в том, что пароль придётся задавать дважды при ошибке запуска скрипта.
2) Всю папку SHTASKHOME со скриптами, логами, tasklist2.exe и т.д. необходимо сделать доступной только администратору. Это не позволит хитрым пользователям блокировать некоторые моменты работы скрипта, связанные с созданием и использованием файлов-блокираторов повторных сообщений. Иначе, задав свойства read-only для некоторых .badguy-файлов пользователь неявно выключит себя из показываемых админу сообщений.
3) По поводу ключа stop. У меня почему-то получается, что снятие задания с выполнения возможно от имени любого пользователя. Возможно это потому что я админ? Если же это не только привелегия админа, то придётся подумать об оеспечении дополнительных мер безопасности. Но уж папку SHTASKHOME не забудьте закрыть.
4) Приведённый скрипт check_host.bat проверяет службу. При необходимости его можно перепрофилировать для проверки конкретного приложения. Что касается службы, есть странный момент. Если службу снимают с выполнения остановкой, это ловится. Если же службе сказать "приостановить" - это никак не отражается на tasklist. Он по-прежнему будет писать, что всё работает. Данная особенность ещё ждёт своего исследователя.
5) Ещё один вопрос остался без проверки. Неизвестно, сработает ли tasklist для всех машин - есть ведь блокировка rpc, локальные политики безопасности и т.д. Я точно знаю, что psexec не мог пробиться на некоторые машины. Почему, пока не ясно. И поведёт ли себя tasklist так же капризно, тоже не ясно.

Некоторые особенности вообще:
1) Ведение логов в скрипте несколько хаотично организовано. То пишеться лог, то не пишется, то удаляется. Это связано с тем, что я не знаю особенностей конкретной задачи и Вашего уровня "параноидальности". Организуйте всё как Вам будет удобно. Мне и так нормально.
2) По поводу огромного количества @ в скриптах. Да, я знаю про echo on/off. Просто так легче отлаживать скрипты - убрал @ где нужно, посмотрел эхо, потом вернул @ на место. Писать echo on, потом убирать... В общем, кто знает, тот поймёт.
3) Ключ reset в скрипте checker.bat не вызывает немедленную проверку хостов. Оно продолжается по расписанию, поэтому иногда будет пауза до появления первых сообщений об отключенных машинах и т.д. Для немедленного перезапуска задания используйте start, это почти как restart. Хотите, добавьте этот ключ в скрипт.
4) Ссылка на www.forum.oszone.net при использовании данных в коммерческих целях обязательна.

Жду Ваших замечаний...


Отправлено: 14:46, 13-05-2004 | #10



Компьютерный форум OSzone.net » Клиентские ОС Microsoft » Microsoft Windows 2000/XP » Выгружать программы!

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Как удалить запись (Какой либо программы) в выдвигающемся меню "Все программы" AMD64 Microsoft Windows 2000/XP 2 16-01-2010 10:33
Программы Adobe в 2010 будут более уязвимы, чем программы Microsoft OSZone News Новости информационных технологий 0 30-12-2009 20:30
Интерфейс - Не сортируються программы по алфавиту в Пуск-Все программы Borod888 Microsoft Windows 2000/XP 10 21-12-2009 13:20
Интерфейс - [решено] После удаления вируса вместо запуска программы выводится окно "Выбор программы" zholyd Microsoft Windows 2000/XP 4 25-02-2008 15:19
Как запретить виндам выгружать драйвер клавиатуры? Vse_volod Microsoft Windows 2000/XP 2 13-07-2006 16:23




 
Переход