3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

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にすること)

 version="1.0" ?>

>

>

'****************************************************************************

'* Module Name: BlockRmStor.wsf

'* Version: 1.0

'* Abstract: いくつかのリムーバブル記憶装置がインストールされることを

'* 禁止するために、指定されたグループに対して所定の inf/pnf

'* ファイルの ACE を削除します。

'****************************************************************************

>

 

>

>

name="D"

helpstring="指定されたグループ/ユーザーのリムーバブル記憶装置をインストールするためのアクセスを拒否します"

type="string"

required="false"

/>

name="R"

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

type="string"

required="false"

/>

name="Q"

helpstring="処理の状況を表示しないモードをオンにします。既定はオフです"

type="string"

required="false"

/>

>

使用例:

BlockRmStor.wsf /D:Everyone

BlockRmStor.wsf /R:Everyone

BlockRmStor.wsf /D:Everyone /Q

/D または /R オプションのいずれかを指定する必要があります。

>

>

 

language="VBScript">

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

 

]]>

>

>

>

上記は中身見てわかるようにパラメータでリムーバブル記憶装置をインストールさせるか,させないかを指定できます。

/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を入れないといけません。