Показать полную графическую версию : Блокировка USB-накопителей и отключение DVD, floppy
tarasov.evgeny
08-07-2010, 14:32
Добрый день
Решил вопрос при помощи не стандартных утилит (изначально не установленных в XP)
devcon.exe http://support.microsoft.com/kb/311272/ru
add reg - support tools
psexec.exe http://technet.microsoft.com/ru-ru/sysinternals/bb897553.aspx
Вот команда на блокировку
psexec @file.txt reg add HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR /t REG_DWORD /v Start /d 4 /f
psexec @file.txt cacls %systemroot%\inf\usbstor.pnf /e /p system:n
psexec @file.txt cacls %systemroot%\inf\usbstor.inf /e /p system:n
psexec @file.txt -c devcon.exe disable ide\cdrom*
psexec @file.txt -c devcon.exe disable fdc*
где @file.txt это текстовый файл в котором столбцом указаны имена компьютеров.
Хочу улучшить файл.
Мне не нравиться, что команда обрабатывается последовательно. Т.е. мы сначала на всех компьютерах выполняем первую строчку, затем переходим ко второй. Выполняем вторую строчку на всех компьютерах переходим...
Хочется, чтобы все команды выполнялись на одном компьютере, затем все команды на втором компьютере и т.д.
Не могу создать нормальный log.file
Добавил после каждой строчки:
> usb.log,
> register.log
> dvd.log
> floppy.log
В результате получаем четыре файла, в которых вообщем-то можно понять, что произошло и где, но не удобно есть лишняя информация. Пример DVD.log:
IDE\CDROMOPTIARC_DVD_RW_AD-5200A_________________1.09____\5&2AA92C33&0&0.0.0: Disable
1 device(s) enabled.
IDE\CDROMOPTIARC_DVD_RW_AD-5200A_________________1.05____\5&2AA92C33&0&0.0.0: Disable
1 device(s) enabled.
\\namepc1:
\\namepc2:
А хотелось бы:
namepc1 disable
namepc2 disable
Возник вопрос по данной теме. Знаю есть возможность это сделать это через GPO. Но во-первых у меня нет доступа, во-вторых у людей у которых есть доступ сделали два правила:
1. Блокировка - работает
2. Разблокировка - не работает :)
Для разбора операций в нужном порядке можно использовать команду FOR:
remEx.bat
Echo on& Chcp
set Adcomps="F:\@file.txt"
for /f %%a in ('^<"%Adcomps%" Find /v ""') do (
psexec %%a reg add HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR ^
/t REG_DWORD /v Start /d 4 /f
psexec %%a cacls %systemroot%\inf\usbstor.pnf /e /p system:n
psexec %%a cacls %systemroot%\inf\usbstor.inf /e /p system:n
psexec %%a -c devcon.exe disable ide\cdrom*
psexec %%a -c devcon.exe disable fdc*)
pause>nul & goto :eof
@file.txt
\\namepc1
\\namepc2
\\namepc3
\\namepc4
\\namepc5
По поводу log'а:
PSExec возвращает код ошибки исполняемого им приложения, т.е. для вывода
желаемой инфы в лог достаточно отловить ERRORLEVEL и в продолжение команды поставить на него условие, пример:
if errorlevel 9009 (Echo %%a: disabled >> dvd.log ) else Echo Error execute on %%a >> dvd.log.
Или же тем же способом можно "прозвонить" системы на проверку изменений и из полученной инфы составть log.
Соотвественно нужно проверить коды возврата по используемым утилитам...
Думаю надо psexec запускать 1 раз - вызывать им батник, только что раскопированный по списку на компы компании. И вместо "> usb.log" нужно использовать имя компа из того списка.
tarasov.evgeny и NiOl,
Думаю надо psexec запускать 1 раз - вызывать им батник, только что раскопированный по списку на компы компании. И вместо "> usb.log" нужно использовать имя компа из того списка.
Согласен с NiOl, так проще и удобнее, ну и сам *.bat лучше переделать под вызов с параметрами, чтобы иметь возможность исключить команды, ну огранизвать в нем функцию install или settins
и еще по поводу раскопированного batch'a:
когда-то давно пользовался таким приемом (очень давно...), но работало как часы:
Echo off && Chcp 866
Set /a "$T=%time:~3,2%+1
Set "$T=%time:~0,3%%$T% Определение времени запуска
(net view|findstr /b /c:"\\">>c:\comps.txt)&&(for ^
/f %i in (c:\comps.txt) do (at %i %$T% /next: ^
" задача на исполнение "))&(del c:\comps.txt /q)
pause>&&goto :eof
... Видимо перегрелся - забыл про еще одну "отвертку":
- создаем скрипт remtask.vbs под WSH, в который вносим под исполнение все эти команды;
- пишем второй скрипт со следующим содержанием:
Set oCtrl = CreateObject("WshController")
Set oScript = oCtrl.CreateScript("disk:\dir1\dir2\remtask.vbs ", "AlladaPC-42") ' AlladaPC-42 - имя PC
WScript.ConnectObject oScript, "Remote_"
oScript.Execute()
IsQuit = False
While Not IsQuit
Wscript.Sleep 300
Wend
Function Remote_End()
Wscript.Echo "Операция успешно завершена! The operation completed successfully!"
IsQuit = True
End Function
Function Remote_Error()
Wscript.Echo oScript.Error.Description
IsQuit = True
End Function
Function Remote_Start()
Wscript.Echo "Выполнение сценария на удалённом PC запущено! Execute the script on a remote PC running!"
End Function
Все выполняется по DCOM протоколу, но есть условия - в реестр удаленного PC нужно внести ключи:
- HKCU\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote REG SZ = 1
- HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings\Remote REG SZ = 1
- HKLM\SOFTWARE\Microsoft\Windows Script Host\Settings\IgnoreUserSettings REG SZ = 0
- и определить wscript.exe как "внепроцессный" COM-сервер (wscript.exe -regserver)
инфа:
http://msdn.microsoft.com/en-us/library/xk7bxb0d(VS.85).aspx
tarasov.evgeny
15-07-2010, 14:39
Спасибо за ответы.
Буду пробовать
Дело в том, что я ушел в отпуск :) Не хочется сейчас думать :jump:
Но вопросы будут. Многое не понятно.
Dmitry S.
12-12-2010, 15:01
Почитал тему и хотел бы продолжить в части вопросов к уважаемым гуру. Хотелось бы из всего того, что здесь приведено получить приемлемый для себя код. Задача по теме, но с тем условием, что хочется блокировку всего выше перечисленного делать из логон-скрипта, выбирая компьютеры не из файла, а из определённого контейнера AD. Раньше делали это через групповые политики домена с использованием административных шаблонов. Теперь мигрировали свой домен в домен головной организации и утратили права на создание групповых политик с привязкой к своим контейнерам. Но защищаться как-то надо от пользователей. Хочется так же надёжно, как это было раньше с GP в AD. Может есть уже что-то наработанное?
Не возьмусь предлагать, т.к. не рискну на "живом" домене отлаживать (была у меня одня легкая проба пера - "войти в реку" удалось нормально, а вот "выйти" - никак, пришлось даже здесь постить и надо признать - с удручающим результатом. Благо решить проблему удалось, но самым варварским способом).
Посему, может проще будет попросить "небожителей" делегировать Вам права на те OU, за которые Вы отвечаете?
* Понимаю, что не спортивно, но без прав Вам будет нелегко админить и дальше
NiOl, да я б вообще на месте Дмитрия не парился - прав нету, пусть сами всё и делают - ему же меньше работы и ответственности :)
Не изобретайте велосипед.
Adm шаблон для групповой политики
CLASS MACHINE
CATEGORY !!category
CATEGORY !!categoryname
POLICY !!policynameusb
KEYNAME "SYSTEM\CurrentControlSet\Services\USBSTOR"
EXPLAIN !!explaintextusb
PART !!labeltextusb DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynamecd
KEYNAME "SYSTEM\CurrentControlSet\Services\Cdrom"
EXPLAIN !!explaintextcd
PART !!labeltextcd DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 1 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynameflpy
KEYNAME "SYSTEM\CurrentControlSet\Services\Flpydisk"
EXPLAIN !!explaintextflpy
PART !!labeltextflpy DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
POLICY !!policynamels120
KEYNAME "SYSTEM\CurrentControlSet\Services\Sfloppy"
EXPLAIN !!explaintextls120
PART !!labeltextls120 DROPDOWNLIST REQUIRED
VALUENAME "Start"
ITEMLIST
NAME !!Disabled VALUE NUMERIC 3 DEFAULT
NAME !!Enabled VALUE NUMERIC 4
END ITEMLIST
END PART
END POLICY
END CATEGORY
END CATEGORY
[strings]
category="Custom Policy Settings"
categoryname="Restrict Drives"
policynameusb="Disable USB"
policynamecd="Disable CD-ROM"
policynameflpy="Disable Floppy"
policynamels120="Disable High Capacity Floppy"
explaintextusb="Disables the computers USB ports by disabling the usbstor.sys driver"
explaintextcd="Disables the computers CD-ROM Drive by disabling the cdrom.sys driver"
explaintextflpy="Disables the computers Floppy Drive by disabling the flpydisk.sys driver"
explaintextls120="Disables the computers High Capacity Floppy Drive by disabling the sfloppy.sys driver"
labeltextusb="Disable USB Ports"
labeltextcd="Disable CD-ROM Drive"
labeltextflpy="Disable Floppy Drive"
labeltextls120="Disable High Capacity Floppy Drive"
Enabled="Enabled"
Disabled="Disabled"
Dmitry S.
16-12-2010, 13:14
Не изобретайте велосипед.
Adm шаблон для групповой политики »
Я писал, что создавать GP в своем контейнере AD мне не разрешает "большой брат".
Спасибо всем за проявленный интерес, но вопрос для меня пока остается открытым. Будут решения, прошу поделиться.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.