WindowsServer2003のドメインでUSBデバイス使用禁止にするグループポリシー
ドメインコントローラがWindowsServer2003 R2 でクライアントが WindowsXP が大半のActiveDirectoryなんですが、特定のPCでUSBメモリや外付けUSBハードディスクの使用を禁止したいという要件が出てきました。

WindowsServer2008のドメインコントローラなら、標準のグループポリシーでUSBメモリを含むリムーバブルメディアの使用が抑制できるんですが、2003にはデフォルトでは使えません。
(2008のグループポリシーで設定する方法は、【Windows Server 2008 実践評価ガイド】システム運用管理コストを削減する最新管理機能の全貌 : Windows Server - Computerworld.jpが参考になります)


しかし、WindowsServer2003でもグループポリシーに管理テンプレートを追加することで、リムーバブルメディアの使用を抑制できます。
そのための設定が情報漏えい対策ガイド (Windows 編)の3章にて載せられていました。

ガイドにはかなり詳細な手順が載せられているのでそのとおりにやれば簡単にできますが、一応メモしておきます。

まず、ガイドの手順で行うと下記のデバイスに関して、各制御ができます。

USB記憶装置    使用禁止、書き込み禁止
IEEE1394記憶装置 使用禁止
フロッピー    使用禁止
SDカード     使用禁止
CD-R/RW      書き込み禁止


ただし、「USB 記憶装置の書き込み禁止」と「SDカードの使用禁止」は、Windows XP SP2 以降でのみ動作し、Windows Server 2003 SP1 では動作しないようです。



リムーバブル記憶装置がインストールされている場合
PCにリムーバブル記憶装置がインストールされている場合は、グループポリシーのカスタム管理テンプレートを使うことで各制御ができます。

1.下記のコードをメモ帳にコピペし、Unicodeで、ドメインコントローラの%SystemRoot%\inf\BlockRmStor.adm に保存します。(今回2台DCがあったので2台共に保存しました)

; Administrative template file for blocking removable storage devices
; Version: 1.0

CLASS MACHINE

CATEGORY !!DisableRemovableStorage

POLICY !!WriteProtectUsbStor
#if version >= 4
SUPPORTED !!SUPPORTED_WindowsXPSP2
#endif
EXPLAIN !!WriteProtectUsbStor_Help
KEYNAME "SYSTEM\CurrentControlSet\Control\StorageDevicePolicies"
VALUENAME "WriteProtect"
VALUEON NUMERIC 1
VALUEOFF NUMERIC 0
END POLICY

POLICY !!DisableUsbStor
EXPLAIN !!DisableUsbStor_Help
KEYNAME "SYSTEM\CurrentControlSet\Services\USBStor"
VALUENAME "Start"
VALUEON NUMERIC 4
VALUEOFF NUMERIC 3
END POLICY

POLICY !!Disable1394Stor
EXPLAIN !!Disable1394Stor_Help
KEYNAME "SYSTEM\CurrentControlSet\Services\sbp2port"
VALUENAME "Start"
VALUEON NUMERIC 4
VALUEOFF NUMERIC 0
END POLICY

POLICY !!DisableFloppy
EXPLAIN !!DisableFloppy_Help
KEYNAME "SYSTEM\CurrentControlSet\Services\Flpydisk"
VALUENAME "Start"
VALUEON NUMERIC 4
VALUEOFF NUMERIC 3
END POLICY

POLICY !!DisableSDcard
#if version >= 4
SUPPORTED !!SUPPORTED_WindowsXPSP2
#endif
EXPLAIN !!DisableSDcard_Help
KEYNAME "SYSTEM\CurrentControlSet\Services\sffdisk"
VALUENAME "Start"
VALUEON NUMERIC 4
VALUEOFF NUMERIC 3
END POLICY

POLICY !!DisableCDBurning
#if version >= 4
SUPPORTED !!SUPPORTED_WindowsXPWindowsNET
#endif
EXPLAIN !!DisableCDBurning_Help
KEYNAME "SYSTEM\CurrentControlSet\Services\ImapiService"
VALUENAME "Start"
VALUEON NUMERIC 4
VALUEOFF NUMERIC 3
END POLICY

END CATEGORY ; DisableRemovableStorage

[strings]
DisableRemovableStorage="リムーバブル記憶装置の使用制限"
WriteProtectUsbStor="USB 記憶装置デバイスへの書き込み禁止"
WriteProtectUsbStor_Help="USB 記憶装置デバイスへの書き込み禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーは USB 記憶装置デバイスへの書き込みができなくなります。読み込み操作は可能です。"
DisableUsbStor="USB 記憶装置デバイスの使用禁止"
DisableUsbStor_Help="USB 記憶装置デバイスの使用禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーは USB 記憶装置デバイスの書き込みおよび読み込みができなくなります。"
Disable1394Stor="IEEE 1394 記憶装置デバイスの使用禁止"
Disable1394Stor_Help="IEEE 1394 記憶装置デバイスの使用禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーは IEEE 1394 記憶装置デバイスの書き込みおよび読み込みができなくなります。"
DisableFloppy="フロッピー ディスクの使用禁止"
DisableFloppy_Help="フロッピー ディスクの使用禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーはフロッピー ディスクの書き込みおよび読み込みができなくなります。"
DisableSDcard="SD 記憶域カードの使用禁止"
DisableSDcard_Help="SD 記憶域カードの使用禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーは SD 記憶域カードの書き込みおよび読み込みができなくなります。"
DisableCDBurning="CD への書き込み禁止"
DisableCDBurning_Help="CD への書き込み禁止をコンピュータを使用するすべてのユーザーに適用します。\n\nこのポリシーを有効にすると、コンピュータを使用するすべてのユーザーは CD への書き込みができなくなります。読み込み操作は可能です。\n\n注意: CD ライタや IMAPI (Image Mastering Applications Programming Interface) を使用しないサードパーティのアプリケーションを使う場合は、CD を作成および修正することができます。\nユーザーごとにエクスプローラの CD 焼き付け機能を制限する場合は、ユーザーの構成\管理用テンプレート\Windows コンポーネント\エクスプローラの [CD 焼き付け機能を削除する] ポリシーを使用してください。"
SUPPORTED_WindowsXPSP2="Microsoft Windows XP Professional SP2 以降"
SUPPORTED_WindowsXPWindowsNET="Microsoft Windows XP または Windows Server 2003"


2.新しくグループポリシーオブジェクト(GPO)を作成し、任意のOUとリンクさせます。

3.作成したグループポリシーを、グループポリシーエディタ(GPE)で開きます。

4.GPEのコンソールツリーで、[コンピュータの構成]→[管理用テンプレート]→右クリック→[テンプレートの追加と削除]で、先ほど作成したBlockRmStor.admを開きます。

5.GPEのメニューバーの[表示]→[フィルタ]の[完全に管理されているポリシー設定のみ表示します]チェックをオフにすると、[コンピュータの構成\管理用テンプレート\リムーバブル記憶装置の使用制限]が表示されます。

6.後は、制限したい項目を有効にするだけですね。


リムーバブル記憶装置がインストールされていない場合
PCにリムーバブル記憶装置がインストールされていない場合は、ドライバファイル(inf)のアクセス許可を変更することにより対象のリムーバブル記憶装置をインストールできないようにする必要があるようです。

グループポリシーのスタートアップスクリプトを使って設定します。

1.リムーバブルメディアを規制するグループポリシーをグループポリシーエディタ(GPE)で開きます。

2.ツリーから [コンピュータの構成]→[Windows の設定]→[スクリプト(スタートアップ/シャットダウン)]→[スタートアップ]→[スタートアップのプロパティ]画面開くので、[ファイルの表示]。

3.上記で開いたパス(\\ドメイン名\SysVol\ドメイン名\Policies\ポリシー GUID\Machine\Scripts\Startup)に下記を "BlockRmStor.wsf" というファイル名で保存します。(文字コードをUTF-8にすること)

<?xml version="1.0" ?>
<package>
<comment>
'****************************************************************************
'* Module Name: BlockRmStor.wsf
'* Version: 1.0
'* Abstract: いくつかのリムーバブル記憶装置がインストールされることを
'* 禁止するために、指定されたグループに対して所定の inf/pnf
'* ファイルの ACE を削除します。
'****************************************************************************
</comment>
 
<job>
<runtime>
<named
name="D"
helpstring="指定されたグループ/ユーザーのリムーバブル記憶装置をインストールするためのアクセスを拒否します"
type="string"
required="false"
/>

<named
name="R"
helpstring="指定されたグループ/ユーザーのリムーバブル記憶装置をインストールするためのアクセス拒否を取り消します"
type="string"
required="false"
/>

<named
name="Q"
helpstring="処理の状況を表示しないモードをオンにします。既定はオフです"
type="string"
required="false"
/>

<example>
使用例:
BlockRmStor.wsf /D:Everyone
BlockRmStor.wsf /R:Everyone
BlockRmStor.wsf /D:Everyone /Q
/D または /R オプションのいずれかを指定する必要があります。
</example>
</runtime>
 
<script language="VBScript">
<![CDATA[
Option Explicit
On Error Resume Next
 
Dim objArgs, objFSO, objShell, blnOK, blnQuiet
Dim strArg, strGroup, strFolder, strFileList
Dim intCounter, intErr
Const conWindowsFolder = 0
Const WSH56_REQUIRED = "このスクリプトを実行するには、WSH 5.6 以上が必要です。"
Const ERROR_NUM = ": エラー 0x"
 
strFileList = Array("flpydisk", _
"usbstor", _
"sbp2", _
"sffdisk" )
 
Set objShell = CreateObject("WScript.Shell")
 
' This script is expected to work on WSH 5.6 or later
If WScript.Version < 5.6 Then
objShell.LogEvent 1, WSH56_REQUIRED
WScript.Quit(-1)
End If
 
'---------------------------------------------------------------------
' check script usage
'---------------------------------------------------------------------
blnOK = False
blnQuiet = False
strGroup = ""
Set objArgs = WScript.Arguments
 
Select Case objArgs.Named.Count
Case 1,2
If (objArgs.Named.Exists("D")) Then
strArg = " /D "
strGroup = objArgs.Named("D")
blnOK = True
ElseIf (objArgs.Named.Exists("R")) Then
strArg = " /R "
strGroup = objArgs.Named("R")
blnOK = True
End If
If (blnOK = True And objArgs.Named.Exists("Q")) Then
blnQuiet = True
End If
End Select
 
 
' if incorrect usage display message and quit
If Not(blnOK) Then
WScript.Arguments.ShowUsage
WScript.Quit(-1)
End If
 
'---------------------------------------------------------------------
' Modify ACLs of files
'---------------------------------------------------------------------
strFolder = ""
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
' Build %SystemRoot%\Inf directory
Set strFolder = objFSO.GetSpecialFolder(conWindowsFolder)
strFolder = strFolder & "\Inf\"
 
' Modify ACLs of target inf/pnf files
intCounter = 0
Do While intCounter <= Ubound(strFileList)
' Modify ACLs of .inf file
ModifyACLsOfFile strArg, strGroup, strFolder, strFileList(intCounter), ".inf"
ModifyACLsOfFile strArg, strGroup, strFolder, strFileList(intCounter), ".pnf"
 
intCounter = intCounter + 1
Loop
 
 
' Cleanup
Set objArgs = Nothing
Set objShell = Nothing
Set objFSO = Nothing
 
'---------------------------------------------------------------------
' Function: Modify ACLs of file to deny specific group access
'---------------------------------------------------------------------
Function ModifyACLsOfFile(strArg, strGroup, strFolder, strFilename, strExt)
On Error Resume Next
 
ModifyACLsOfFile = False
 
Dim strPathname, strCACLSCmd
 
strPathname = ""
strCACLSCmd = ""
strPathname = strFolder & strFilename & strExt
If (objFSO.FileExists(strPathname)) Then
' Deny access to the .inf file for specified group
strCACLSCmd = "cacls.exe """ & strPathname & """ /E" & strArg & """" & strGroup & """"
DisplayMsg strCACLSCmd
intErr = objShell.Run(strCACLSCmd, 0, True)
If intErr = 0 Then
ModifyACLsOfFile = True
Else
LogFailureEvent intErr, strCACLSCmd
End If
End If

End Function
 
'---------------------------------------------------------------------
' Sub: Log Error Event to the Application EventLog
'---------------------------------------------------------------------
Sub LogFailureEvent(intErrNum, strErrText)
On Error Resume Next
objShell.LogEvent 1, strErrText & ERROR_NUM & Hex(intErrNum)
End Sub
 
'---------------------------------------------------------------------
' Sub: Display a message if blnQuiet = FALSE
'---------------------------------------------------------------------
Sub DisplayMsg(strMessage)
If Not(blnQuiet) Then
WScript.Echo strMessage
End If
End Sub
 
]]>

</script>
</job>
</package>

上記は中身見てわかるようにパラメータでリムーバブル記憶装置をインストールさせるか,させないかを指定できます。
/D:グループorユーザ名 →リムーバブルディスクインストール拒否。
/R:グループorユーザ名 →リムーバブルディスクインストール許可。
/Q:サイレントモード(処理の状況を表示しない)

4.[スタートアップのプロパティ]のスクリプト名で "BlockRmStor.wsf" を指定し、引数に /D:Everyone /Q を指定します。これによって全ユーザでリムーバブルメディアのインストールを禁止できます。

5.これで新しいUSBメモリを挿入してもドライバインストールできないため、使用できません。

余談ですが、上記のスクリプトでアクセス制限を設定するドライバファイルは下記のようになるようです。

フロッピーディスク   :flpydisk.inf , flpydisk.pnf
USB 記憶装置デバイス  :usbstor.inf , usbstor.pnf
IEEE1394記憶装置デバイス:sbp2.inf , sbp2.pnf
SD記憶域カード     :sffdisk.inf , sffdisk.pnf


解除時の注意
一度リムーバブルメディアを制限するOUに一度適用してしまうと、そのOUを外れてもリムーバブルメディアの制限はかかったままになります。
なので、制限を解除するOUをつくって、解除時はそのOUに解除したいPCを入れないといけません。
[PR]
by Jehoshaphat | 2012-04-25 00:54 | サーバがらみ | Trackback | Comments(0)
トラックバックURL : http://jehupc.exblog.jp/tb/17851675
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。


<< (ツール)ネットワーク遅延グラ... PukiWikiで最終更新した... >>