4.12. USBGuardの使用
				USBGuard ソフトウェアフレームワークは、デバイス属性に基づく基本的なホワイトリスト機能およびブラックリスト機能を実装することにより、侵入型 USB デバイスに対するシステム保護を提供します。ユーザー定義のポリシーを適用するために、USBGuard は Linux カーネルの USB デバイス認証機能を使用します。USBGuard フレームワークは、以下のコンポーネントを提供します。
			
- 動的対話とポリシー施行のためのプロセス間通信 (IPC) インターフェイスを持つデーモンコンポーネント。
 - 実行中の USBGuard インスタンスと対話するコマンドラインインターフェイス。
 - USB デバイス認証ポリシーを記述するルール言語
 - 共有ライブラリーに実装されているデーモンコンポーネントと対話する C++ API
 
4.12.1. USBGuardのインストール リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					usbguard パッケージをインストールするには、
root で以下のコマンドを入力します。
				yum install usbguard
~]# yum install usbguard
					初期ルールセットを作成するには、
root で以下のコマンドを入力します。
				usbguard generate-policy > /etc/usbguard/rules.conf
~]# usbguard generate-policy > /etc/usbguard/rules.conf
注記
						USBGuard ルールセットをカスタマイズするには、
/etc/usbguard/rules.conf ファイルを編集します。詳細は、usbguard-rules.conf (5) の man ページを参照してください。使用例は 「ルール言語を使って独自のポリシーを作成する」 を参照してください。
					
					USBGuard デーモンを起動するには、
root で以下のコマンドを入力します。
				
					システムの起動時に USBGuard が自動的に開始するようにするには、
root で以下のコマンドを使用します。
				systemctl enable usbguard.service
~]# systemctl enable usbguard.service
Created symlink from /etc/systemd/system/basic.target.wants/usbguard.service to /usr/lib/systemd/system/usbguard.service.
					USBGuard が認識するすべての USB デバイスを一覧表示するには、
root で次のコマンドを実行します。
				usbguard list-devices
~]# usbguard list-devices
1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00
...
6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
					デバイスがシステムと対話することを許可するには、
allow-device オプションを使用します。
				usbguard allow-device 6
~]# usbguard allow-device 6
					デバイスの認証を解除してシステムから削除するには、
reject-device オプションを使用します。デバイスの認証を解除するには、block-device オプションを指定して usbguard コマンドを使用します。
				usbguard block-device 6
~]# usbguard block-device 6
					USBGuard では、block および reject は以下の意味で使用されます。 
					
				
- block - 今は、このデバイスとはやりとりしない
 - reject - このデバイスは存在しないものとして無視する
 
					usbguard コマンドのすべてのオプションを表示するには、
--help ディレクティブを指定して入力します。
				usbguard --help
~]$ usbguard --help
4.12.2. ホワイトリストおよびブラックリストの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
usbguard-daemon.conf ファイルは、コマンドラインオプションを解析した後に usbguard デーモンによって読み込まれ、デーモンのランタイムパラメーターを設定するために使用されます。デフォルトの設定ファイル(/etc/usbguard/usbguard-daemon.conf)をオーバーライドするには、-c コマンドラインオプションを使用します。詳細は、usbguard-daemon (8)の man ページを参照してください。
				
					ホワイトリストまたはブラックリストを作成するには、
usbguard-daemon.conf ファイルを編集し、以下のオプションを使用します。
				USBGuard 設定ファイル
RuleFile=<path>usbguardデーモンは、このファイルを使用して、そこからポリシールールセットを読み込み、IPC インターフェイスを介して受信した新しいルールを書き込みます。IPCAllowedUsers=<username> [<username> ...]- デーモンが IPC 接続を受け入れるユーザー名のスペース区切りのリスト。
 IPCAllowedGroups=<groupname> [<groupname> ...]- デーモンが IPC 接続を受け入れるグループ名のスペース区切りのリスト。
 IPCAccessControlFiles=<path>- IPC アクセス制御ファイルを保持するディレクトリーへのパス。
 ImplicitPolicyTarget=<target>- ポリシーのどのルールにも一致しないデバイスを処理する方法。許容される値は allow、block、および reject です。
 PresentDevicePolicy=<policy>- デーモンの起動時にすでに接続されているデバイスを処理する方法:
- allow - 存在するデバイスをすべて認証する
 - block - 存在するデバイスの認証をすべて解除する
 - reject - 存在するデバイスをすべて削除する
 - keep - 内部ステータスの同期してそのままにする
 - apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
 
 PresentControllerPolicy=<policy>- デーモンの起動時にすでに接続されている USB コントローラーを処理する方法:
- allow - 存在するデバイスをすべて認証する
 - block - 存在するデバイスの認証をすべて解除する
 - reject - 存在するデバイスをすべて削除する
 - keep - 内部ステータスの同期してそのままにする
 - apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
 
 
例4.5 USBGuard 設定
						以下の設定ファイルは、
usbguard デーモンが /etc/usbguard/rules.conf ファイルからルールをロードするように順序付け、usbguard グループのユーザーのみが IPC インターフェイスを使用できるようにします。
					RuleFile=/etc/usbguard/rules.conf IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
RuleFile=/etc/usbguard/rules.conf
IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
						IPC アクセス制御リスト(ACL)を指定するには、usbguard add-user または usbguard remove-user コマンドを使用します。詳細は 
usbguard (1) を参照してください。この例では、usbguard グループのユーザーが USB デバイス承認状態の変更、USB デバイスの一覧表示、例外イベントのリッスン、USB 認証ポリシーの一覧表示を許可するには、root で次のコマンドを実行します。
					usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
~]# usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
重要
						デーモンは、USBGuard パブリック IPC インターフェイスを提供します。Red Hat Enterprise Linux では、このインターフェイスへのアクセスはデフォルトで 
root ユーザーのみに制限されます。IPC インターフェイスへのアクセスを制限するには、IPCAccessControlFiles オプション (推奨)、IPCAllowedUsers オプション、および IPCAllowedGroups オプションを設定することを検討してください。ACL を未設定のままにしないでください。設定しないと、すべてのローカルユーザーに IPC インターフェイスが公開され、USB デバイスの認証状態を操作して USBGuard ポリシーを変更できるようになります。
					
					詳細は、
usbguard-daemon.conf (5) man ページの IPC Access Control セクションを参照してください。
				4.12.3. ルール言語を使って独自のポリシーを作成する リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
usbguard デーモンは、一連のルールで定義されたポリシーに基づいて USB デバイスを承認するかどうかを決定します。USB デバイスがシステムに挿入されると、デーモンは既存のルールを順次スキャンし、一致するルールが見つかると、ルールのターゲットに基づいて、デバイスを承認 (許可)、非承認 (ブロック)、または削除 (拒否) します。一致するルールが見つからない場合、決定は暗黙のデフォルトターゲットに基づいて行われます。この暗黙のデフォルトとは、ユーザーが決定を下すまでデバイスをブロックすることです。
				
					ルール言語の文法は以下のようになります。
				
					ターゲット、デバイス仕様、デバイス属性などのルール言語の詳細は、
usbguard-rules.conf (5) の man ページを参照してください。
				例4.6 USBguard のサンプルポリシー
- USB 大容量ストレージデバイスを許可し、それ以外をすべてブロックする
 - このポリシーは、単なる大容量ストレージデバイスではないあらゆるデバイスをブロックします。USB フラッシュディスクにキーボードインターフェイスが隠されているデバイスはブロックされます。大容量ストレージインターフェイスが 1 つあるデバイスのみが、オペレーティングシステムと対話することを許可されます。ポリシーは、以下のような 1 つのルールで設定されます。
allow with-interface equals { 08:*:* }allow with-interface equals { 08:*:* }Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブロックルールがないため、ブロックは暗黙のうちに行われます。USBGuard イベントをリッスンするデスクトップアプレットは、デバイスに対して暗黙的なターゲットが選択されているかどうかをユーザーに尋ねることができるため、暗黙的なブロックはデスクトップユーザーにとって便利です。 - 特定の Yubikey デバイスを特定のポート経由で接続できるようにする
 - そのポートの他のすべてを拒否します。
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"Copy to Clipboard Copied! Toggle word wrap Toggle overflow  - インターフェイスの組み合わせに不審な点があるデバイスは排除する
 - キーボードやネットワークインターフェイスを実装した USB フラッシュディスクは非常に疑わしいものです。次の一連のルールは、USB フラッシュディスクを許可し、追加の疑わしいインターフェイスを備えたデバイスを明示的に拒否するポリシーを形成します。
allow with-interface equals { 08:*:* } reject with-interface all-of { 08:*:* 03:00:* } reject with-interface all-of { 08:*:* 03:01:* } reject with-interface all-of { 08:*:* e0:*:* } reject with-interface all-of { 08:*:* 02:*:* }allow with-interface equals { 08:*:* } reject with-interface all-of { 08:*:* 03:00:* } reject with-interface all-of { 08:*:* 03:01:* } reject with-interface all-of { 08:*:* e0:*:* } reject with-interface all-of { 08:*:* 02:*:* }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ブラックリストは間違ったアプローチであり、あるデバイスだけをブラックリストに入れ、残りを許可するということはしないでください。上記のポリシーは、ブロッキングが暗黙のデフォルトであることを前提としています。"不良" と見なされる一連のデバイスを拒否することは、そのようなデバイスへのシステムの露出を可能な限り制限するための良いアプローチです。 - キーボードのみの USB デバイスを許可
 - 以下のルールは、キーボードインターフェイスを持つ USB 機器がすでに許可されていない場合にのみ、キーボードのみの USB 機器を許可するものです。
allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })Copy to Clipboard Copied! Toggle word wrap Toggle overflow  
					usbguard generate-policy コマンドを使用して最初のポリシーを生成したら、
/etc/usbguard/rules.conf を編集して USBGuard ポリシールールをカスタマイズします。
				usbguard generate-policy > rules.conf vim rules.conf
~]$ usbguard generate-policy > rules.conf
~]$ vim rules.conf
					更新されたポリシーをインストールし、変更を有効にするには、次のコマンドを使用します。
				
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
~]# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
4.12.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
					USBGuard の詳細は、以下のドキュメントを参照してください。
				
usbguard (1)の man ページusbguard-rules.conf(5)man pageusbguard-daemon(8)man pageusbguard-daemon.conf(5)man page