<   2012年 04月 ( 7 )   > この月の画像一覧
(ツール)SmokePingでアラートメールの設定をする
(ツール)ネットワーク遅延グラフツールSmokePingを入れてみたで、SmokePingというツールをLinuxに導入しました。
このツールはPingの遅延時間の統計を視覚化するものですが、アラートメールの機能も付いているようです。
アラート機能を使うと、任意の監視対象が閾値以上パケットロスもしくは遅延時間が大きすぎるなら、メールを飛ばして管理者に伝えることができます。

しかし、この設定はハマりました。
なにせSmokePingの日本語が少なすぎです。

なんとか設定できたので、手順をメモっておきます。

まず、コンフィグファイルの設定です。
/etc/smokeping/config を開き、以下の設定をします。


..(省略)..
mailhost = smtp.hoge.jp ←送信するSMTPサーバ
..(省略)..

*** Alerts ***
to = admin_ml@hoge.jp,thid.rate.pg@gmail.com ←送信先。カンマで複数指定可能。
from = smokeping@hoge.jp ←送信元メールアドレス

#アラートメール送信する条件を指定

+loss1    ←条件名
type = loss   ←条件タイプ。よく使うのは loss(パケットロス) か rtt(遅延時間)。
# in percent
pattern = >10%,*10* ←最後の10サンプル中にパケットロスが10%超が1回あればメール送信
comment = 直近10サンプルで10%超のパケットロスがあります。 ←コメント


pattern は右側が再直近で、そこから左側に過去の条件を書くようです。
例えば、==0%,==0%,>20%,>20% なら、パケットロス無しが2回続き、その後20%超えのパケットロスが2回あれば という条件になります。

以下、幾つかの条件のサンプルです。
詳しくは、公式サイトのヘルプページが参考になります。(英語ですが。。)

+loss2
type = loss
pattern = >10%,*2*,>10% ←最後の10サンプル中にパケットロスが10超のが2回あればメール送信。(たぶん)

+loss3
type = loss
pattern = ==0%,==0%,==0%,>50%,>50%% ←パケットロス無しが3回続き、その後50%超えのパケットロスが2回あればメール送信。


+loss_start
type = loss
pattern = ==S,>20%,>20% ←SmokePingスタート直後に20%超のパケットロスが2回あればメール送信。
(上記loss3の様に安定稼働しててパケットロスが発生したという条件ではSmokePing起動時にパケットロスが始まっていた場合に検出できません。
そのために、==Sが用意されていると思われす。)


+someloss
type = loss
# in percent
pattern = >0%,*12*,>0%,*12*,>0% ←デフォルトのパターンです。たぶん、直近12回で1%以上のパケットロスが3回あればメール送信。
comment = loss 3 times in a row

+rtt1
type = rtt
pattern = <10,<10,>10,>100,>100 ←遅延時間が10ms未満が2回続き、その後10ms超え、そして100ms超えが2回続けばメール送信。

+rtt2
type = rtt
pattern = ==S,==U,==U ←SmokePingスタート直後に、遅延時間不明(==U)が、2回続けばメール送信。


上記に書いたように、アラートの条件を作成したら、以下のように各ターゲットにどのアラートを適用するか定義します。

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of <b>Insert Company Name Here</b>. \
Here you will learn all about the latency of our network.

#ここから↓が各監視ホストの設定です。
+dc             ←監視グループ名(なんでも良い)
menu = domain controller  ←ブラウザで見たときの左側のメニュー名
title = ドメインコントローラ ←ブラウザで見たときのタイトル名

++dc01      ←ホストの識別名(なんでも良い)
menu =dc01    ←ブラウザで見たときの左側のメニュー名
title=ドメコン01 ←ブラウザで見たときのタイトル名
host = 10.0.1.10 ←対象のIPアドレス
alerts = loss1,rtt1  ←ここでアラート条件指定。カンマで複数条件指定可能。

++dc02
menu = dc02
title = ドメコン02
host = 10.0.1.11
alerts = loss2  ←ここでアラート条件指定

++dc03
menu = dc03
title = ドメコン03
host = 10.0.98.11
↑アラート指定なし。



SmokePingデフォルトのメールは以下のようなフォーマットで届きます。

件名:
[SmokeAlert] testloss is active on tmp.letsnote
本文:
Tue Aug 30 13:53:38 2011

Alert "loss2" is active for http://hoge.jp/smokeping/smokeping.cgi?target=dc.dc02

Pattern
-------
>10%,*2*,>10%

Data (old --> now)
------------------
loss: 100%, 100%, 100%, 100%
rtt: U, U, U, U

Comment
-------
loss Test


このメールの内容もメールテンプレートを使うことで変更することができます。
メールテンプレートを使うには、以下のようにAlerts項目内の、mailtemplate でテンプレートファイルを指定します。

*** Alerts ***
..(省略)..
mailtemplate = /etc/smokeping/mailtemplate


/etc/smokeping/mailtemplate は以下のような感じとなります。


Subject: [SmokeAlert] ServerNetworkERR:<##ALERT##> <##WHAT##> on <##LINE##>

<##STAMP##>

ServerNetworkError.
AlertName: <##ALERT##>
AlertStatus: <##WHAT##>
SmokePingURL: <##URL##>

AlertPattern
-------
<##PAT##>

Data (old --> now)
------------------
PacketLoss: <##LOSS##>
RTT: <##RTT##>

Comment
-------
<##COMMENT##>



各キーワードは以下の意味があるようです。

<##ALERT##> - アラート条件名
<##WHAT##> - ステータス (is active, was raised, was celared)
<##LINE##> - どのターゲットか(コンフィグファイル内のパスで表される)
<##URL##> - 対象ターゲットのSmokePingのページ
<##STAMP##> - 日時
<##PAT##> - アラート条件のパターン
<##LOSS##> - パケットロス履歴。
<##RTT##> - 遅延時間履歴。
<##COMMENT##> - アラート条件に書いているコメント。


上記のコンフィグは日本語にもすることができます。
ただし、文字コードと改行コードに気を付けないと文字化けしたり、エラーとなったりします。

日本語にする場合、/etc/smokeping/mailtemplate ファイルは ISO-2022-JP (JIS) コードとして保存する必要があります。
また、改行コードはLFで保存する必要があります。

設定が間違っていると以下のようなエラーになったりします。

"ERROR: /etc/smokeping/config, line 40: mailtemplate '/etc/smokeping/mailtemplate' should start with mail header lines"

そのような場合、は改行コードがLFになっているか、や件名の行がおかしくないか("Subject: "となっておりコロンの後スペースがあるか)確認してみましょう。

コンフィグを変更したら SmopkePing はサービスを再起動しないと反映されないようです。

参考:
SmokePing - smokeping_config 公式のヘルプドキュメントです。
Smokeping mailtemplate format | stompro.org: 英語ですが参考になりました。mailtemplateエラー時の対処法が載っています。
http://jasonyong.blog.51cto.com/47753/186887
[PR]
by Jehoshaphat | 2012-04-25 23:14 | ツール | Trackback | Comments(1)
(ツール)ネットワーク遅延グラフツールSmokePingを入れてみた
まだある!便利ツール - プロが愛用するネット管理のフリー・ツール:ITproを見てて、SmokePing というツールがあることを知りました。
Pingを飛ばしてRTT(遅延時間)をグラフ化するツールだそうです。
グラフ化するので遅延が一目でわかるのが利点のようですね。しきい値を超えるとメール通知する仕組みもあるようです。

こりゃ便利と思い、すぐに導入できると思ったのですが、案外手間取りました。

インストール対象はRedHatのクローンである CentOS5.6 です。
SmokePingはPerlアプリケーションなので、PerlとApacheが入っている必要があります。

インストール
SmokePingのソースは公式サイトからダウンロード出来るのですが、ソースインストールは今回したくなかったので、RPMパッケージからインストールできないか調査してみました。

するとFedoraのプロジェクトにSRPMパッケージとして公開されていました。

今回は iij のFedora15ミラーサイトより SomokePing のSRPMパッケージをダウンロードしてみます。


# cd /home/hoge
※↓のURLはFedoraの最新開発バージョンによって異なるようです。http://ftp.iij.ad.jp/pub/linux/fedora/ にアクセスしてから確認したほうが無難かもしれません。
# wget http://ftp.iij.ad.jp/pub/linux/fedora/development/15/source/SRPMS/smokeping-2.4.2-12.fc15.src.rpm
# rpmbuild --rebuild smokeping-2.4.2-12.fc15.src.rpm
smokeping-2.4.2-12.fc15.src.rpm をインストール中です。
警告: InstallSourcePackage: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID 069c8460
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
エラー: アーカイブの伸長に失敗: ファイル /usr/src/redhat/SOURCES/README.fedora;4e03e645: cpio: MD5 チェックサムが適合しません。
エラー: smokeping-2.4.2-12.fc15.src.rpm をインストールできません。

ん?MD5のエラーになります。
その場合、rpmbuildすると cpio: MD5 sum mismatch が出るにあるように下記のようにしてやるといいようです。

# rpm -ivh --nomd5 smokeping-2.4.2-12.fc15.src.rpm
警告: smokeping-2.4.2-12.fc15.src.rpm: ヘッダ V3 RSA/SHA256 signature: NOKEY, key ID 069c8460
1:smokeping 警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
警告: ユーザ mockbuild は存在しません - root を使用します
# rpmbuild -ba /usr/src/redhat/SPECS/smokeping.spec
# rpm -Uvh /usr/src/redhat/RPMS/noarch/smokeping-2.4.2-12.noarch.rpm (←CentOS6.0の場合、 /root/rpmbuild/RPMS/noarch/ に出力されていました(rootユーザ))
エラー: 依存性の欠如:
rrdtool >= 1.0.33 は smokeping-2.4.2-12.noarch に必要とされています
fping >= 2.4b2 は smokeping-2.4.2-12.noarch に必要とされています
perl(Config::Grammar) は smokeping-2.4.2-12.noarch に必要とされています
perl(BER) は smokeping-2.4.2-12.noarch に必要とされています
perl(CGI::Session) は smokeping-2.4.2-12.noarch に必要とされています
perl(Net::LDAP) は smokeping-2.4.2-12.noarch に必要とされています
perl(Net::Telnet) は smokeping-2.4.2-12.noarch に必要とされています
perl(Qooxdoo::JSONRPC) は smokeping-2.4.2-12.noarch に必要とされています
perl(RRDs) は smokeping-2.4.2-12.noarch に必要とされています
perl(SNMP_Session) は smokeping-2.4.2-12.noarch に必要とされています
perl(SNMP_util) は smokeping-2.4.2-12.noarch に必要とされています


うーむ、、かなり依存パッケージが足りないようです。

ということで、RPMforgeリポジトリ導入を参考にし、RPMforgeでインストールできるものはインストールしちゃいます。

# yum -y install yum-priorities
# vi /etc/yum.repos.d/CentOS-Base.repo
各セクションの末尾に、priority=1 を追加し上書き保存。
# wget http://apt.sw.be/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.i386.rpm
# yum -y update rpmforge-release

依存パッケージをRPMforgeよりインストール
# yum install rrdtool
# yum install fping
# yum install perl-CGI-Session.noarch
# yum install perl-LDAP.noarch
# yum install perl-Net-Telnet.noarch
# yum install perl-JSON.noarch



残りの依存パッケージはRPMforgeになかったので、SmokePingと同じく、Fedora15のSRPMパッケージを使いました。

# wget http://ftp.iij.ad.jp/pub/linux/fedora/development/15/source/SRPMS/perl-Config-Grammar-1.10-7.fc15.src.rpm
# rpm -ihv --nomd5 perl-Config-Grammar-1.10-7.fc15.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/perl-Config-Grammar.spec
# rpm -ihv /usr/src/redhat/RPMS/noarch/perl-Config-Grammar-1.10-7.noarch.rpm

# wget http://ftp.iij.ad.jp/pub/linux/fedora/development/15/source/SRPMS/perl-Convert-BER-1.3101-8.fc15.src.rpm
# rpm -ihv --nomd5 perl-Convert-BER-1.3101-8.fc15.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/perl-Convert-BER.spec
# rpm -ihv /usr/src/redhat/RPMS/noarch/perl-Convert-BER-1.3101-8.noarch.rpm

# wget http://ftp.iij.ad.jp/pub/linux/fedora/development/15/source/SRPMS/perl-qooxdoo-compat-0.7.3-9.fc15.src.rpm
# rpm -ihv --nomd5 perl-qooxdoo-compat-0.7.3-9.fc15.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/perl-qooxdoo-compat.spec
# rpm -ihv /usr/src/redhat/RPMS/noarch/perl-qooxdoo-compat-0.7.3-9.noarch.rpm

# wget http://ftp.iij.ad.jp/pub/linux/fedora/development/15/source/SRPMS/perl-SNMP_Session-1.12-7.fc15.src.rpm
# rpm -ihv --nomd5 perl-SNMP_Session-1.12-7.fc15.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/perl-SNMP_Session.spec
# rpm -ihv /usr/src/redhat/RPMS/noarch/perl-SNMP_Session-1.12-7.noarch.rpm


これで依存パッケージはが入ったので、SmokePingにインストールに再チャレンジ。
# rpm -Uvh /usr/src/redhat/RPMS/noarch/smokeping-2.4.2-12.noarch.rpm


設定
無事にインストールできたら設定を行います。
当初、httpd.confを触る必要があるのかと思ってましたが、その必要はないようです。
RPMパッケージが自動的に、/etc/httpd/conf.d/smokeping.conf という設定ファイルを作ってくれてました。

しかし、アクセス権がデフォルトでは自分自身しか無いので smokeping.conf を設定してやります。

# vi /etc/httpd/conf.d/smokeping.conf

#デフォルトでは自分自身しかアクセス出来ない
<Directory "/usr/share/smokeping" >
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>

<Directory "/var/lib/smokeping" >
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Directory>
  ↓
#とりあえず誰でもアクセスできるようにしてみた。
<Directory "/usr/share/smokeping" >
Order allow,deny
# Deny from all
Allow from all
</Directory>

<Directory "/var/lib/smokeping" >
Order allow,deny
#Deny from all
Allow from all
</Directory>


次に、smokepingの設定をし、どのホストを監視するか設定します。
smokeping自体の設定ファイルは /etc/smokeping/config になるようです。

# vi /etc/smokeping/config

#cgiutlのホスト名を変更してやります。
cgiurl = http://localhost/smokeping/smokeping.cgi
 ↓
cgiurl = http://サーバホスト名/smokeping/sm.cgi


#日本語のホスト名の文字化けを解消するために文字コードを指定します。
# *** Presentation *** の後に、charset = UTF-8 を追加します。(configファイル自体もUTF-8である必要があります)
*** Presentation ***
charset = UTF-8

#各監視ホストの設定ですが、下記probe=Fping セクション内に書いてやります。
probe = FPing

menu = Top
title = Network Latency Grapher
remark = Welcome to the SmokePing website of Insert Company Name Here. \
Here you will learn all about the latency of our network.

#ここから↓が各監視ホストの設定です。
+dc             ←監視グループ名(なんでも良い)
menu = domain controller  ←ブラウザで見たときの左側のメニュー名
title = ドメインコントローラ ←ブラウザで見たときのタイトル名

++dc01      ←ホストの識別名(なんでも良い)
menu =dc01    ←ブラウザで見たときの左側のメニュー名
title=ドメコン01 ←ブラウザで見たときのタイトル名
host = 10.0.1.10 ←対象のIPアドレス

++dc02
menu = dc02
title = ドメコン02
host = 10.0.1.11

++dc03
menu = dc03
title = ドメコン03
host = 10.0.98.11


+terminal
menu = terminal
title = terminal server

++ts1
menu = ts1
title = terminal server1
host = 10.0.1.20

++ts2
menu = ts2
title = terminal server2
host = 10.0.1.21

デフォルトだと +Ping にFedoraサイトへの設定があるので、これはのけてしまっていいと思います。

なお、設定例は公式サイトにもあるので参考にできるかもしれません。

これでApacheの再起動と、SmokePingの起動を行います。
OS起動時にも立ち上がるようにchkconfigで設定もしておきましょう。

# service httpd restart
# service smokeping start
# chkconfig smokeping on




後は、ブラウザからアクセスします。
URLは /etc/httpd/conf.d/smokeping.conf に定義してあるエイリアスになります。
デフォルトだと下記です。
http://hogehost/smokeping/sm.cgi

上記アドレスにアクセスして、下記のように表示されていればOKです。
e0091163_2362354.jpg


左側のメニューから各ホストへの結果ページにアクセスできます。
Chartsメニューはサマリーのような感じで、パケットロスが多い順や、遅延が多い順に表示できるので、ここから問題がないか確認できるかもしれません。

メニューでグループを選択すると、そのグループ内の一覧が参照できます。
e0091163_23908.jpg


また、ホストを選択すると、選択したホストの期間毎の結果がわかります。

e0091163_2391762.jpg

しきい値を超えた場合のメール設定とかも出来るらしいですが、今回は時間がなかったのでそこまでできませんでした。


参考:
ず's - smokeping
第1回 状態監視ツール(smokeping)構築ガイド
smokeping(その1):はいはい、備忘録ですよ。
smokepingの日本語、文字化け対策
[PR]
by Jehoshaphat | 2012-04-25 23:12 | ツール | Trackback | Comments(0)
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)
PukiWikiで最終更新したIPアドレスとユーザ名を表示したい
PukiWiki 1.4.7 で、HTTPベーシック認証をつかって特定のユーザにか編集させないようにしているんですが、各ページの最終更新者が誰であるかというのをページ最下部の Last-modified に表示できないかと思いました。

で、調査すると、質問箱3/408 - PukiWiki-officialに答えがありました。

まず、lib/file.php ファイルの page_write() 関数の、links_update($page);の下に下記を追加します。

$fh = fopen(CACHE_DIR.'lmb_'.encode($page),'w');
fwrite($fh,$_SERVER['PHP_AUTH_USER'].'('.$_SERVER['REMOTE_ADDR'].')');
fclose($fh);

今回は、ベーシック認証時のユーザ名とIPアドレスを記録するようにしました。
スーパーグローバル変数を使って、サーバから取れる任意の情報を記録します。(詳しくはPHP: $_SERVER - Manualを参考)
上記コードにより、キャッシュフォルダに "lmb_ページ名" のファイルが作成されます。
(なのでキャッシュをクリアしちゃうと最終更新者情報が消えちゃいます。)

あとは表示側の設定です。

skin/pukiwiki.skin.php ファイルで、Last-modified の部分を下記のように修正します。
<div id="lastmodified">Last-modified: <?php echo $lastmodified.' by '.file_get_contents(CACHE_DIR.'lmb_'.encode($vars['page']));?></div>


これで、ページ編集後に Last-modified: の部分が下記のように最終更新者が表示されるようになりました。

Last-modified: 2011-07-01 (金) 10:00:0 (0m) by hoge(10.0.0.10)

[PR]
by Jehoshaphat | 2012-04-25 00:51 | Webがらみ | Trackback | Comments(0)
GoogleChromeで拡張機能をインストールしようとするとエラーになる
GoogleChromeで拡張機能をインストールしようとすると、下記のようなエラーとなりました。

「拡張機能を解凍できません。拡張機能を安全に解凍するには、ドライブ文字で始まるプロフィールディレクトリへのパスが必要です(ジャンクション、マウントポイント、シンボリックリンクが含まれていないこと)。このようなパスがプロフィール内に存在しません。」

解決法ですが、chrome.exeへのショートカットで引数に、--single-process を付けて起動するとインストールできます。
ただ、そのまま放置しておくとサンドボックスが有効にならないようなので、インストールが終わったら引数をのけてやりましょう。

参考:
chromeヘルプフォーラム:拡張機能がインストールできない
[PR]
by Jehoshaphat | 2012-04-19 22:10 | 豆知識 | Trackback | Comments(0)
EVT形式のイベントログをEVTX形式に変換
(Windows)ログオン・ログアウトをイベントログから解析する でイベントログを解析するLog Parser というツールを紹介しました。

WindowVistaやServer2008以降はイベントログの形式が evtx に変わっています。

WindowVistaやServer2008以降で、LogParserをインストールして解析したところ、うまくいきました。
インポートのフォーマットも -i:EVT でOKです。

しかし、XPやServer2003以前では LogParser で evtx のログは解析できません。
(解析かけると「<from-entity> を開けません。: イベントログ "C:\hoge.evt" を開く際にエラーが発生しました。: イベント ログ ファイルが壊れています。」と怒られます)


WindowVistaやServer2008以降でも LogParser で EVT ファイルは解析できないようです。
なので、WindowVistaやServer2008以降で EVT ファイルを解析する場合は、一端 EVT を EVTX に変換してやる必要があります。

EVT から EVTX への変換は wevtutil というコマンドを使うと可能なようです。

wevtutil epl e:\hoge_old.evt e:\hoge_new.evtx /lf:true


すると、hoge_new.evtx というevtx形式ののイベントログが出来上がります。

あとはこれをLogParserにかけてやればいいわけですね。


参考:
イベントログを SQL Server に入れて分析する
Tip o' the Week: WEVTUTIL for EVTX/EVT file conversion
[PR]
by Jehoshaphat | 2012-04-19 00:13 | 豆知識 | Trackback | Comments(0)
SunRayで誰かが動画再生すると全体の描画が遅くなった
SunRay2を使ってるんですが、突然描画重くなったりする現象が発生してました。
サーバのCPU,メモリ負荷は問題なかったため、smokeping でSunrayサーバのネットワークの遅延を調べてみると以下のようになってました。
e0091163_0113938.jpg


ちょうど描画が重かった12:40-13:00にかけて大きな遅延が発生しています。

さらにユーザの利用調査をしていると、どうやら動画再生をしているときに重くなり、Sunrayサーバへの遅延も発生しているようです。

この現象についてググると、Osamu Sayama's Weblog:sunray bandwidth limit にドンピシャな情報が載っていました。

どうやらSunRayで動画サイト等を見ると、画面遷移が多いためサーバ側はクライアント側に大量の描画パケットを送信します。
SunRayの描画パケットはSunRay2で画面描画が遅く残像らしきものが残るで書いたようにUDPを使ってます
UDPは相手の都合お構いなしにパケットを投げるので、今回の動画のように画面更新が多くて、クライアント側のネットーワークがサーバ側ネットーワークより遅い場合、描画パケットが大量過ぎて捌ききれない状態になり、他のユーザへの描画パケットや/クライアントからのマウス・キーボード操作パケットが破棄/遅延されてしまうようですね。


参考先にあるように、DTU側で帯域制限をしてやれば、そのDTUに対してサーバ側は設定された帯域以上はパケットを投げず全体への影響を抑えることができるようです。
それで、utcapture コマンドで帯域制限無しと有りでのSunRayサーバ~クライアントのパケットロスを調べてみました。

utcapture の結果の各列の意味は下記のとおりです。

TERMINALID:クライアントの MAC アドレス。
TIMESTAMP:「20041229112512」などの「年-月-日-時-分-秒」の時刻形式で表示されるロスが発生した時間。
TOTAL PACKET:サーバーからクライアントに送信された合計パケット数。
TOTAL LOSS:クライアントによって消失と報告された合計パケット数。
BYTES SENT:サーバーからクライアントに送信された合計バイト数。
PERCENT LOSS:現在と前のポーリング間隔の間に消失したパケットの割合。
LATENCY:クライアントとサーバー間の往復にかかる時間 (ミリ秒単位)


まず帯域制限をかけなかった場合です。

====帯域制限なし
bash-3.00# /opt/SUNWut/sbin/utcapture | grep aabbcc(特定のDTUのみ抽出したかったので、そのDTUのMACアドレスでgrepしてます)
TERMINALID TIMESTAMP TOTAL PACKET TOTAL LOSS BYTES SENT PERCENT LOSS LATENCY
↓通常の業務操作
002128aabbcc 20111111143745 45453 6565 51095948
002128aabbcc 20111111143815 82038 9317 96325054 7.522
002128aabbcc 20111111143830 124093 11114 150312460 4.273
002128aabbcc 20111111143845 135388 11664 164520680 4.869
↓画像ファイルを全画面で表示を繰り返したとき
002128aabbcc 20111111143915 142906 13804 171358852 28.465
002128aabbcc 20111111143930 203722 32692 227348840 31.058
002128aabbcc 20111111143945 287421 66322 293922746 40.180
002128aabbcc 20111111144015 318069 76575 321067832 33.454
002128aabbcc 20111111144031 318079 76576 321068570 10.000

画像ファイルを全画面表示するとやはりサーバから送信するパケットが増えるとと共にパケットロスと遅延が増大しています。


次に、DTU側で帯域制限を 30Mbps でかけた時です。
(帯域制限のかけ方は、DTUで Ctrl+Pause+M → Advanced → Bandwidth Limit で、bps単位で帯域を制限します)

====帯域制限あり 30Mbps
bash-3.00# /opt/SUNWut/sbin/utcapture | grep aabbcc
TERMINALID TIMESTAMP TOTAL PACKET TOTAL LOSS BYTES SENT PERCENT LOSS LATENCY
↓画像ファイルを全画面で表示を繰り返したとき
002128aabbcc 20111111144231 86999 11306 101932702 7.813
002128aabbcc 20111111144301 123778 16061 145332462 12.929
002128aabbcc 20111111144316 151922 20277 177660986 14.980

ちょっとは送信パケットが減り、同様にパケットロスと遅延も減っています。


さらに、8Mbpsで制限をかけた時です。

====帯域制限 8Mbps
bash-3.00# /opt/SUNWut/sbin/utcapture | grep aabbcc
TERMINALID TIMESTAMP TOTAL PACKET TOTAL LOSS BYTES SENT PERCENT LOSS LATENCY
↓画像ファイルを全画面で表示を繰り返したとき
002128aabbcc 20111111144446 48332 1457 61692026 2.405
002128aabbcc 20111111144531 51240 1458 65180180 0.117
002128aabbcc 20111111144546 53590 1478 68135492 0.851
002128aabbcc 20111111144616 57335 1627 72505752 3.979
002128aabbcc 20111111144731 67512 1629 84757134 0.261
002128aabbcc 20111111144847 80039 1653 99529180 1.666
↓画像ファイル全画面テスト
002128aabbcc 20111111145132 88198 1853 110024494 2.483
002128aabbcc 20111111145147 100233 2177 125551832 2.692

8Mbpsでは、画像ファイル全画面表示しても大きな遅延やパケットロスがさほど発生していません。

もちろんクライアント側では制限なしの時に比べると描画が遅く感じますが、他への影響をかけないという観点からするとやはり帯域制限は必要だと感じました。


参考:
Sun Ray Server Software 4.0 管理者マニュアル P34あたりにutcaptureの使い方が載ってます。


最近忙しすぎて全然ブログ更新できてませんでしたが、ようやく時間ができたのでボチボチアップしていこうかと思います。
[PR]
by Jehoshaphat | 2012-04-19 00:12 | サーバがらみ | Trackback | Comments(0)