Thursday, March 19, 2009

Контроль сменных носителей

Контроль сменных носителей - тема нынче весьма популярная и обсуждаемая.
Но бесплатных средств, работающих под ОС Windows и более менее управляемых в небольшой сети, найти не удалось.
Платные средства дешевле 500 рублей за рабочее место не существуют, что в нынешних условиях непосильные деньги для многих компаний. Посему на коленке был сделан небольшой скрипт, который каждый час запускается на АРМ пользователей. Запуск и его контроль осуществляется средствами Microsoft SMS (который уже есть в наличии).
Данный скрипт позволяет довольно успешно контролировать работу сменных носителей в небольшом домене, содержащем чуть более 150 рабочих станций и серверов.

Скрипт может запускаться так же средствами групповой политики Active Directory, но механизм этот не столь гибок, сколь хотелось бы.

Небольшие комментарии по коду:

  • первый цикл определяет имя пользователя вошедшего в систему
  • второй цикл определяет входит ли пользователь в доменную группу "UsbFullControl", назначение группы понятно из её названия
  • третий цикл делает то же для группы "UsbReadOnly"
  • если пользователь не входит ни в одну из групп, значит ему не повезло - выключается возможность работы со всеми сменными устройствами
  • иначе делаются настройки облегчающие работу с флешками и разрешающие работу с дискетами и оптическими дисками
  • Для работы скрипта нужны административные права, либо права SYSTEM, то есть он не эффективен в сети, где большое число пользователей имеет права локальных администраторов.
Безусловно, групп может быть больше, привязку можно делать к имени компьютера и все списки спрятать внутри скрипта. Тут уж все зависит от фантазии внедренца.

Источники идеи уже не найду. Среди них результаты поиска по словам "usb control security", а так же материалы с сайта Microsoft.

---------------

@ECHO OFF

:: delims is a TAB followed by a space
FOR /F "tokens=2* delims= " %%A IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName') DO SET LastLogon=%%B

For /F "tokens=1" %%A in ('net user %LastLogon% /domain ^| find /i "UsbFullControl"') Do Set Group=%%A
IF NOT "%Group%"=="" GOTO UsbFullControl

For /F "tokens=1" %%A in ('net user %LastLogon% /domain ^| find /i "UsbReadOnly"') Do Set Group=%%A
IF NOT "%Group%"=="" GOTO UsbReadOnly

:UsbDenyAll
move %SystemRoot%\Inf\Usbstor.pnf %SystemRoot%\Inf\Usbstor.pnf.old
move %SystemRoot%\Inf\Usbstor.inf %SystemRoot%\Inf\Usbstor.inf.old

> "%Temp%.\usb.reg" echo REGEDIT4
>>"%Temp%.\usb.reg" echo.
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Flpydisk]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000004

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Sfloppy]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000004

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000004

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000004
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\StorageDevicePolicies]
>>"%Temp%.\usb.reg" echo "WriteProtect"=dword:00000001
>>"%Temp%.\usb.reg" echo.

start /wait regedit /s "%Temp%.\usb.reg"

del "%Temp%.\usb.reg"

GOTO End

:UsbFullControl
move %SystemRoot%\Inf\Usbstor.pnf.old %SystemRoot%\Inf\Usbstor.pnf
move %SystemRoot%\Inf\Usbstor.inf.old %SystemRoot%\Inf\Usbstor.inf

> "%Temp%.\usb.reg" echo REGEDIT4
>>"%Temp%.\usb.reg" echo.
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Flpydisk]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Sfloppy]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\StorageDevicePolicies]
>>"%Temp%.\usb.reg" echo "WriteProtect"=dword:00000000
>>"%Temp%.\usb.reg" echo.

start /wait regedit /s "%Temp%.\usb.reg"

del "%Temp%.\usb.reg"
GOTO End

:UsbReadOnly
move %SystemRoot%\Inf\Usbstor.pnf.old %SystemRoot%\Inf\Usbstor.pnf
move %SystemRoot%\Inf\Usbstor.inf.old %SystemRoot%\Inf\Usbstor.inf

> "%Temp%.\usb.reg" echo REGEDIT4
>>"%Temp%.\usb.reg" echo.
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Flpydisk]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Sfloppy]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdrom]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003

>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\UsbStor]
>>"%Temp%.\usb.reg" echo "Start"=dword:00000003
>>"%Temp%.\usb.reg" echo [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\StorageDevicePolicies]
>>"%Temp%.\usb.reg" echo "WriteProtect"=dword:00000001
>>"%Temp%.\usb.reg" echo.

start /wait regedit /s "%Temp%.\usb.reg"

del "%Temp%.\usb.reg"

GOTO End


:End

2 comments:

Unknown said...

В Windows 2008 это можно сделать штатными средствами групповой политики.

Igor Gots said...

А много сетей переехало в 2008 домен?
Контроль через ГПО не дает всех опций доступных в скрипте (доступ только на чтение к USB, ограничение работы с CD & floppy), хотя добавляет свои (разрешенные носители).
Про удобство я молчу.