2008年11月29日土曜日

telnet があれば、RAWプリンタで印刷できる

telnet ですかー!?
telnetがあれば、TCP9100のRAWポート印刷に対応しているネットワークプリンタから印刷できる。
 
lprコマンドとかの立場はまあおいといて。
 
 

取りあえずそこらにネットワークプリンタがあったら、Telnetで9100番ポートに繋いでみよう。
telnet [プリンタのIPアドレス] 9100

セッションが張れたら任意の文字を入力しよう、コピペでもOK。
 
 

そしておもむろにCtrl+] でエスケープ(Windows・Linuxと多分共通)、「telnet >」のプロンプトで "c" または "close" と入力してセッションをクローズしよう。
 

印刷された?
 

telnetシリーズタグ

ちょっとjmeterでメモ

jmeter関連でアドバイス貰ったのでメモ。
 

http://www.jasst.jp/archives/jasst07e/pdf/C2-1.pdf
 

http://d.hatena.ne.jp/defiant/20080909#1220944470
http://d.hatena.ne.jp/defiant/20080909#1220943546
 

http://www.programmerplanet.org/pages/projects/jmeter-ant-task.php
 

MS の Applecation Center Test とかも悪くないんだけど。
負荷・テストツールは手軽に手に入る環境がいいなあ。
 
 

あと、CSVデータセットの使い方
http://www26.atwiki.jp/11rtksn/pages/7.html

2008年11月28日金曜日

携帯対応とはてなスター機能追加@自分のwordpress

Wordpress の機能追加をした。
携帯電話(モバイル)に対応するプラグイン、「MobilePressNEO」と、色々なWEBサービス提供でおなじみの はてな より、ブログに はてなスター をつけてもらえる機能を実験的に追加。
これは はてな にログイン済みのユーザで無いと分からないかな?
 
 

携帯対応、MobilePressNEO


元々携帯向けのブログではないけどやってみた、MobilePressNEO というプラグインを採用。
 
プラグイン有効にしただけで携帯からのアクセスはあっさり風味のモバイルサイトに見せてくれる優れものプラグイン。
作者の言うとおり造りが素直なようで、phpのバージョンやら気にしなくてよいのもうれしい、php4でも5でも動くっぽい。
 

折角なのでQRコードを作成、
[caption id="attachment_1084" align="alignnone" width="250" caption="画像:「SawanoBlog.」QRコード"]画像:「SawanoBlog.」QRコード[/caption]
 
 

はてなスター機能追加


スター付与ボタンがついているブログをどこかで見たのでSawanoBlogにもつけてみた。
 

wordpressが出力するHTMLのHEADにて、はてなスタースクリプトを読み込むように記述、記事タイトルの横にはてなスター付与ボタンができた。
コメントは無効にしてある(はず)。

[sourcecode language='html']
[/sourcecode]
 

Wordpress を はてなスター に対応するには、普通のはてなスタースクリプトを追加するだけじゃあ駄目、Wordpress対応用スクリプトも一緒に読み込む必要がある。
 
専用スクリプトが何か言うと、はてなスター付与ボタンをつけるためにコンテンツを解析して、「記事のタイトルっぽい所」を検出、その後ろに付与ボタンをつけるという処理をしているらしい。
テンプレートをあちこち改造する必要もなく、とても楽に設置できた。
 


 

はてなスター、 重かったりイタズラされやすい という話もあるが、うちはそんなに人こないので全く問題ないだろう。
とりあえず見栄え優先。

2008年11月27日木曜日

GNU screen で仮想端末。処理をほったらかしにして切断、さあ帰ろう

先日、全力でCPU負荷をかけているサーバにリモートシェルからMySQLのレコードを数十万行流し込むという用事があった。
作業してた人は、sshクライアント落とせないので 「PC落とせない=帰れん」 となり、少々悩んで結局PCをつけっぱなしで帰った。
 

これが自分の身に降りかかったら とても嫌 だと思い、そうなった場合の対策を探したところ、GNU screen という結構由緒正しい仮想端末ソフトがヒット。
 
これは使える、、、知らなかったのは不覚だ。ちょっとさわりを書いてみる。
(追記)突然の回線切断でも大丈夫、繋ぎなおしたら作業中の環境復活OK、と追記しとく。
 
 

screen のデタッチ、アタッチについて簡単に説明


勝手に終わらないコマンドとして適当なもの、たとえばTOPを実行しているとした場合。
 

×Screenがないとき
TOPコマンドはsshクライアントからつないだ仮想端末(例:xterm)を制御端末として動く。
sshクライアントを終了するとTOPコマンドの制御端末がなくなるのでTOPコマンド終了ー。
 

○Screenがあるとき
sshクライアントからつないだ仮想端末(例:xterm)でscreenコマンドを使用すると、新たな仮想端末(screen)ができる。
screenからTOPコマンドを実行すると、当然制御端末は screen になる、そして screen は起動時の制御端末 - xterm が終了しても独立して動く機能がある。
ということで、sshクライアントを終了しても screen は配下のTOPコマンドを生存させたまま残ることが可能。
(追記) これは別の表現で言うと突然xtermの接続が切れても大丈夫、ということ。
 
 

表現とかちと怪しい部分もあるが大体こんな感じ、
詳しいことは下記サイトとかがいいのかな?

screenのススメ
http://www.dekaino.net/screen/


screenの理解ならここはとても参考になります。ただ、エスケープキャラクタは「Ctrl+a」のままでもいいと思う。
 
 

一通り実際やってみる


yum でも cvsよいのでscreenをインストールしよう。cvs のほうが縦分割ができてお得か。
 

[caption id="attachment_1074" align="alignnone" width="500" caption="画像:puttyでsshログイン"]画像:puttyでsshログイン[/caption]
早速screenコマンドを叩いてみる、クライアントは putty を使った。
 

[caption id="attachment_1075" align="alignnone" width="500" caption="画像:screen起動直後"]画像:screen起動直後[/caption]
タイトルバーのところに「screen 0」 というのが出てきた。今は仮想端末screenの0番を使っているよという意味だ。準備OK。
 
 

コマンドを実行したままで screen をデタッチ


screen上で適当にコマンドを実行して、そのままscreenを切断します。
ちなみにscreen制御用のコマンドはまずエスケープ(デフォルトではCtrl+a(^a と書いたり))してからコマンド入力します。とりあえずデタッチは「Ctrl+a → D(大文字)」
 

[caption id="attachment_1076" align="alignnone" width="500" caption="画像:screenで画面分割、コマンド実行"]画像:screenで画面分割、コマンド実行[/caption]
とりあえずscreenの画面分割機能を使って、ping, vmstat, top と実行してみた。
0番のping シーケンス番号が目安になるかな、
 
そしておもむろに デタッチ「Ctrl+a → D(大文字)」
 

[caption id="attachment_1077" align="alignnone" width="500" caption="画像:「^a + D」でscreenをデタッチ"]画像:「^a + D」でscreenをデタッチ[/caption]
screen実行前の仮想端末に帰ってきた、一回ログアウトする。
 
 


デタッチしたscrennに後日アタッチして、続きをやる


とりあえず「screen -ls」で今動いているscreenのリストがとれる。目的のものに「screen -r {プロセスID(1つしかなければ省略可)}」 でアタッチすればいい。
 

[caption id="attachment_1078" align="alignnone" width="500" caption="画像:接続しなおして、screenのリスト"]画像:接続しなおして、screenのリスト[/caption]
リストがとれたのでアタッチする。
 

[caption id="attachment_1079" align="alignnone" width="500" caption="画像:アタッチした"]画像:アタッチした[/caption]
screen 0番につながったのがわかる、ping健在。
他のコマンドはどうだろうか。
 

[caption id="attachment_1080" align="alignnone" width="500" caption="画像:screen上の分割リスト"]画像:screen上の分割リスト[/caption]
screen内の画面リストを出してみる、名前は任意に変えることができるのでここではわかりやすい名前を付けている。
それぞれに切り替えてみるとコマンド実行が継続されていることがわかる。
 


[caption id="attachment_1081" align="alignnone" width="500" caption="画像:デタッチ前の状況が保たれている"]画像:デタッチ前の状況が保たれている[/caption]
切断前の状況再現(継続中)もOK。ヒストリなどもちゃんと継続している。
いやあこれは便利だ。
 
 

次は分割?


screen は正直機能が多くてまったく紹介しきれないが、まずはこのデタッチ・アタッチを知っておくと便利なので各サーバに導入しておきたい。
 

余談として、プロンプトに($TERM) を表示するようにすると区別がついていいかも。
「PS1='[\u($TERM)@\h \W]\$ '」 というようにしておくと、
[sawano(xterm)@myserver ~]$
[sawano(screen)@myserver ~]$
こんな感じになってscreen使用中かどうかわかる。
 

今度は分割も記事にしたい、打鍵で混乱するからそのへん消化したいんだよね。

「一般的なペーストビン」とかのペーストビン(pastebin)

今まで特に気にしていなかったが ペーストビン を調べてみた。検索でしばしば見るやつ。
 

突然調べた理由は、これまでずっと ベースピストン(ピストンベース) だと思っていた のが間違いだったと気づいたから。
「(・ー・)..。oO( 油圧的ななんたらで使う部品かなー…)」という認識、気づいてみればそんなわけ無いがずっとスルーしていた。第一印象は大事だ。
 
 

調べたら丁寧に解説してくれているサイトがあった。
>> ペーストビン(pastebin)について - Life, don’t talk to me about life.
 

よく分かった、引用した情報などを複数人で共有する為のWEBサービスなのね。
確かにリンク先にもあるような、オープンソース開発的な利用法には良さそう。
 
 

ペーストビン は エンジン関連の部品的なものではなかったんだ!

2008年11月21日金曜日

NTBackupで強引にP2Vマイグレーション@WindowsServer2003[自己責任注意]

物理サーバで動いている WindowsServer2003 でシステムの NTBackupを取りました、でそれを、VirtualServer で動いている WindowsServer2003 上でシステム状態ごとフルリストアしました。
 

さて、これ動かないですよね。でも NTBackup を取るときに物理サーバの設定を工夫すれば動くことがあります。
 
 

注意:この記事どおりにやったからと言って確実にうまくいくとは限りません、自己責任でお願いします

ちょっと参考リンクを。

Windows XP または Windows Server 2003 セットアップ後の HAL オプション
http://support.microsoft.com/kb/309283/ja


 

キモはこのHAL、物理→仮想のマイグレーションってこの辺いじってるらしいのでこれが通れば何とかなる。
 
あまり検証してないので仮説ですが、仮想PCのマザーボードは互換性のためアーキテクチャがとっても古い(VS2005なら440BXくらい)ものをエミュレートしてるらしいんですよね、ってことで新しめハードのHALをそのまま仮想に突っ込んだら動作しない、って事だと思う。
 
 

なので、NTBackup を取得する前に、物理サーバ上で デバイス マネージャのHAL オプションを仮想化後を想定したものに変更する必要がある。リストア先の仮想PCでHALオプションを見てみよう、多分違うはず。
 

ここで物理サーバのHALを仮想にあわせると絶対ダメ、物理側がおじゃんになる。
手順があるのでそれを踏もう。要は互換性重視で一番しょぼいHALを使おうと言うこと。

  1. まず物理サーバでHALオプションを「"標準 PC"、非 ACPI PIC HAL (Hal.dll) 」にする

  2. NTBackupで移行する

  3. ちゃんとOSが立ち上がってくるのでHALオプションを仮想PCでの元々の設定に戻す


 

晴れてPtoV、仮想化完了という運びになります。これはすごく楽、VHDの容量とか元のサーバを気にしないで良いし。
 
 

この強引な手段はマイグレーションとは言わないかもしれない。
最後にも言うけど、やってみるなら自己責任で、業務用のはやめておこうね。

2008年11月20日木曜日

VBScriptからSQLSERVERに接続する(ADO)

WindowsServer の運用管理で、ちょっと SQLServer から情報もってきたい時に VBScript(やWSH) でDBに接続できたら都合がいい。
 
 

ADO(ActiveX Data Object) とかいうやつを使ってちょっとクエリを流そうという時のメモ。
 
 

サンプル:SQLServer上に設定されている、サーバのホスト名を取ってくる


大体が [Master] の [sysservers] に1行あるレコードがローカルサーバ情報。サンプルでは一応複数あった場合の処理をさせてる。
 

下記を拡張子VBSで保存して実行する。
[sourcecode language='vb']
Private cn ,rs

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

'// ADODBでSQLOLEDBに接続、この場合ユーザはログイン中のものを使う
cn.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=msdb;Integrated Security=SSPI;"
'// SQLのクエリを書いてレコードセットを取得する
rs.Open "SELECT [SrvName] FROM [Master].[dbo].[sysservers] WHERE [srvid] = '1'", cn


'// レコードセットを1行づつ処理する
Do While Not rs.EOF
Wscript.echo rs("SrvName")
rs.MoveNext
Loop
'// レコードが一行ならこれでもOK
'// Wscript.echo rs("SrvName")

rs.Close
cn.Close

Set cn = Nothing : Set rs = Nothing

Wscript.Quit
[/sourcecode]
 

sysdatabaseからデータベースの一覧とかを持ってくるのも簡単。
SELECT以外の文は結果がどうなるのかは試してないけど、多分単純に結果コードが帰って来るんだと思う。
 

まぁ更新系を使う場合はVBScriptとかじゃないよね、と思う。

2008年11月19日水曜日

任意のフォルダでWindowsエクスプローラ(explorer.exe のオプションの話)

Windowsのエクスプローラはいいファイラだと思う。少なくともデフォルトのファイラとして十分な使い勝手じゃないだろうか。
 

それはさておき、そのエクスプローラ(explorer.exe)を狙ったフォルダで開けると助かる。役に立つ局面としてはたまに面倒を見るサーバでの作業や、お客さんのサーバで作業用フォルダを作っている場合など。
普通のショートカットと違って、ぱっと2ペインでフォルダツリーが展開されるのは小気味がよい。
 
 

やってみる。単純に引数を渡すだけではダメ、/e と カンマで


まず純正のエクスプローラへのショートカットをデスクトップにコピーしてこよう。見当たらなければ「アクセサリ」 に入ってると思う。
[caption id="attachment_1059" align="alignnone" width="273" caption="画像:エクスプローラのプロパティ(デフォルト)"]画像:エクスプローラのプロパティ(デフォルト)[/caption]
 

ではリンク先の所を書き換える%SystemRoot%\explorer.exe↓↓↓↓↓"D:\WORK"で開きたい場合はこうする。スラッシュe でカンマで区切ってパス
%SystemRoot%\explorer.exe /e,"D:\Work"
 
これで指定したパスが展開された状態でエクスプローラが起動する。
 
 

ツリーのルートも変更する


exeplorer.exe のコマンドラインオプションとして他に、/rootオプションを使うと、ツリーのルートが変更できる。
%SystemRoot%\explorer.exe /e,/root,"D:\Work"
変なところいじらなくてすむので、用途によっては /root オプションは使えるだろう。
 

要はこんな感じになる、左がスッキリ。
[caption id="attachment_1060" align="alignnone" width="500" caption="画像:ツリーのルートを選択したエクスプローラ"]画像:ツリーのルートを選択したエクスプローラ[/caption]
 
 

作業用フォルダを作るなら、ショートカットはエクスプローラで開くように作っておこう。
 
 
 

その他、explorer.exe のコマンドラインオプションについてはマイクロソフトのKBで。

Windows XP の Explorer.exe コマンドライン オプション
http://support.microsoft.com/kb/314853/ja

2008年11月16日日曜日

Google Docs のプレゼンテーション機能

Google Docs にプレゼンテーションあるなんて知らなかった。
ドキュメント、スプレッドシート(MSOfficeのWord・Excelに相当)しかないと思っていたが、Googleプレゼンテーションを使った方の記事を見てちょっと試してみた。
第3回PHP懇親会に行ってきた:nekoya氏
 
 

では使ってみた感想と、サンプルの公開をしますよー。
 
 

十分な基本入力機能、テキスト&画像と図形の挿入


使ってみたがここらの機能はとっても PowerPoint、これならだいたい直感的に使える。
 
テキストはフォントや色はもちろん、箇条書きやインデントの自動化に対応しており十分な表現ができる。
画像、図形は挿入&サイズ変更ができる、画像は HTTP URL での指定も可だ。図形の中に文字を書くのに 「図形+テキストボックス」 と組み合わせる必要がある事が気になったくらい。
 
画像いじり(透明色指定とか)ができないが、それはローカルでやろう。
 
 

表示関連の機能はシンプル


表示関連の機能は画像、テキストの遅延表示(クリックで表示、表示順の設定が可能)に対応、ほかは特に無いっぽい。
アニメーション多様するプレゼンはうっとおしい事が多いのでこれでいいと思うが、少々さびしい。
 
 


テンプレ、マスタはちと弱いか(日本語版の問題か?)


欲張るなという気もするが、レイアウトのマスタをデザインする機能が背景設定くらいしかない。
※英語版はテンプレの編集ができる模様、これで心配ないかも。
 
 

インポート、エクスポートがスゴい


*.ppt (Powerpoint2003以前のファイル形式)のインポートができるみたい。今度仕事に無関係なPPT作って試してみよう。手元のはWEBに上げるにはシャレにならんのばっかり。
 

エクスポート(ダウンロードして保存)対応形式は、pdf, ppt, txt となっていた。結構すごいのではないか。
pptは実際にGoogleプレゼンテーションで作ったオブジェクトごとに編集ができるようになってて、スライドマスタもきちんと使える。これはインポートも期待できるだろう。
 
 

サンプルを作ってみた


と、機能を試しながらサンプルのプレゼンテーションをひとつ作ってみた、ワンタッチでWEB公開が可能なのはとても便利ですね。
公開用の直接リンクと、WEB埋め込みの形式がえらべます。下記リンクから参照してみてください。
 
 
プレゼンの内容については作業中に子が来たので一緒に作った為、 超お子様向け になってます、ご了承ください。(※予定ではGoogleプレゼンテーションの使い方を紹介だったんだが。。)
 

まずはWEB共有公開版
http://docs.google.com/Present?docid=ddz7r3m9_1d47nd3gf&skipauth=true
 

こちらはWEB埋め込み版、遅延表示など一部対応していない機能があるようですね。

 
 

あったらいいな


コネクタ、図形へのテキスト埋め込み、マスタ編集、スプレッドシート埋め込み
とできれば(自分の用途の範囲では)もう何も要らないな。一応全部画像貼り付けで対応可能だけど。
 
 
 

全体を通して、とってもアリだね「Googleプレゼンテーション」と思った。

2008年11月14日金曜日

EXCELのマクロ(VBA)を触ってみた、ランダム陣取りシミュレータ?

ちょっと待ち行列を計算する用事があったので、今まで操作録以外全然触らなかったExcelのマクロの書き方を勉強してみた。
 
 

しかし、なぜか予定と違って観察系の陣取りシミュレータができた。。
    仕様はこんな感じ
  • セルに1-100までの数字を並べる

  • ランダムに1つチョイス、これまたランダムな場所に上書きコピーする

  • 繰り返す。そのうち1つの数字が天下を統一する。


 

待ち行列の計算しようとおもったんですよ、本当ですよ?
 

ということで、数字のセットとランダムコピーのマクロ(VBA)を載せておこう。
 
 


準備用マクロ(VBA):1-100までの数字をセット、ついでにカウンタを0にリセットする


1行に5列ずつで、20行目まで数字を置いていく。

[sourcecode language='vb']Sub reset()
s = 1
For j = 1 To 20
For i = 1 To 5
' セルに数字を書き込む
Cells(j, i) = s
s = s + 1
Next i
Next j

' カウンタリセット、F5がカウンタ
Range("F5") = 0
End Sub[/sourcecode]
 

これで準備はOK、リトライも簡単。
 
 

シミュレータ実行用マクロ(VBA):ランダムに数字を選んで1回コピーの繰り返し


ところどころ乱暴だけど、ランダムコピーの処理。
rnd()の周りはなんかきれいなやり方があるんだろうなぁ。

[sourcecode language='vb']Sub Shuffle()
Randomize
s = Range("F5")

For i = 1 To 500
rndset:
m = Round((Rnd * 40 / 2 + 1), 0)
j = Round((Rnd * 10 / 2 + 1), 0)
k = Round((Rnd * 10 / 2 + 1), 0)
l = Round((Rnd * 40 / 2 + 1), 0)
' 6とか21とか、はみ出し系の結果が出るのでやり直しさせる
If j = 6 Or k = 6 Or m = 21 Or l = 21 Then
GoTo rndset
Else
' 参考用に座標を出力しておく
Range("F1") = j
Range("F2") = k
Range("F3") = m
Range("F4") = l
' これはカウンタ
Range("F5") = s + i
' ランダムに選んだマスの数字を任意の場所に上書きコピーする
Cells(m, j).Copy Destination:=Cells(l, k)
End If
Next i

End Sub[/sourcecode]
 
 


実行してみる、グラフつけると面白い


視覚的なことを考慮してグラフとか色々つけている、リアルタイムで勢力図が見れて面白い。
これもマクロでセットアップしたら良いんだろうけどそれはまた今度かな。
 

統一させるまで見届ける場合は While でまわせばOK、大体 4000-8000 位の施行で終わるがたまに1万超えるし。
 

スタート時点の図、すべての勢力は1つで均等
[caption id="attachment_1051" align="alignnone" width="300" caption="画像:陣取り合戦スタート"]画像:陣取り合戦スタート[/caption]
 
 

ランダムコピー500回実行したところ。93が最大勢力(26ヶ)
[caption id="attachment_1052" align="alignnone" width="300" caption="画像:500ターン"]画像:500ターン[/caption]
左下のところはグラフ用、COUNTIF文 と IF文 で0個になったら勝手に消えるようにしてグラフを見やすいようにしている。
 
 

統一までほったらかしてみる、2300くらい。
とても三国時代だ、NINTENDO64(仮名) vs PC-98(仮名) vs .. JR-100(仮名)? といった所か。
[caption id="attachment_1053" align="alignnone" width="300" caption="画像:2300ターンくらい、三国時代"]画像:2300ターンくらい、三国時代[/caption]
 
 

完全に天下統一 ※Whileに変更したので500回のサンプルとは違う回
[caption id="attachment_1054" align="alignnone" width="300" caption="画像:天下統一!"]画像:天下統一![/caption]
 

見事9102ターン目で PC-98(仮名) が天下統一を果たした、Cバス万歳と言うことなんだろうか。
 
 
 

えーかげん と言うか 今更というか、Excelマクロ も活用したほうがいいなと思った。

2008年11月13日木曜日

ニンテンドーDS(無印)のWi-Fi接続をバッファローの Wi-Fi Gamers(WCA-G)で (がんばって)セキュアにやる

ニンテンドーDS(無印)では無線の通信暗号化方式が WEP しか使えない。
自宅に無線LANこそ導入はしているが、そこは当然 WPA(AES)を使ってる、WEPも選択できるが…ITPro:利用率7割のWEPは「1分」で破られる こんな現状なのではっきり言って使いたくない、使えない。
 
 

しかし実際に ニンテンドーDS を使う子はそんな事情なんて知ったこっちゃない、Wi-Fi やりたいと頼まれちゃあなんとかする方法を模索するしかない。なんでWiiはブリッジにならないんだよ!(言いがかり)
 

ちなみに新しい ニンテンドーDSi はWPA にきっちり対応している、それ買えって?
だって 古いDS壊れてないし DSi高いし WEBブラウザなんて余計な機能がついてる(注:もちろん制限できるんだけど…いまいち不安)しで却下、そんなにコスト掛けたくない。
 
 

で、既存の環境に影響がでないように安手のAPを追加として、これ使うことにした。

 
 

「BUFFALO Wi-Fi Gamers 無線LANアクセスポイント WCA-G」に電源スイッチを組み合わせた。


結論から言うと「電源OFFにしてWEPの脆弱性から身を守る」という運用を課すことで親子間のSLA合意した。
↓構成はこうだ。
[caption id="attachment_1045" align="alignnone" width="300" caption="写真:WCA-Gと電源スイッチ"]写真:WCA-Gと電源スイッチ[/caption]
 

子には「DSでWi-FiしたくなったらスイッチON、終わったら切ってくれ」とした。ACアダプタにくっついている電源スイッチだ、LED付き でお子様にも分かりやすくしている。
うちの環境では常時起動のマシンはない為、これで十分。 「Wi-Fi Gamers(WCA-G)」 の起動には15-20秒ほどかかるが特に気にするほどではない、ポケモンのWi-Fiセンターに突撃している間に準備は完了している。
 
 


予想以上にコンパクトサイズだった





[caption id="attachment_1046" align="alignnone" width="225" caption="写真:AirStatonとWCA-Gのサイズ比較"]写真:AirStatonとWCA-Gのサイズ比較[/caption][caption id="attachment_1047" align="alignnone" width="225" caption="写真:WCA-G持ってみた"]写真:WCA-G持ってみた[/caption]

 

すごい小さい。
 
 

初期設置は楽なもんだった、液晶小窓もよい感じだ


ニンテンドーDS は AOSS に対応している、で、 この 「Wi-Fi Gamers(WCA-G)」 もAOSSで設定するようになっている。
説明書の設定方法には「AOSSでつなぐのでこのボタン(上についてるデカいボタン)押せ」程度のことしか書いてない。
まあそれで済むからいいや。
 
液晶小窓、ステータスが表示できる。 「起動中」 → 「起動完了」 ってちゃんとわかるので今回の運用方法にかなりマッチ。
画面下のカーソルキーで少し操作できる、環境確認やチャンネル変更が可。ファームのアップデートなんかもできるようだが、発売以来新しいのは一つもないようなので確認できず。
 
 


説明書にはなぜか載ってないWEB設定画面に注意、使いではあるが…


さてこの「Wi-Fi Gamers(WCA-G)」 説明書に載ってないWEB設定管理画面がある。
 
これがとってもいただけないことに、
「root / 空パスワード」 で設定画面に入れる。
んですね、初期設定では。
 
[caption id="attachment_1048" align="alignnone" width="500" caption="画像:WEB設定画面トップ"]画像:WEB設定画面トップ[/caption]
小窓でIPアドレス確認できる仕様にしといて、これはないだろ。
 

もし「Wi-Fi Gamers(WCA-G)」 を使う場合は、
WEB管理画面のパスワードを必ず設定してください
[管理設定] → [パスワード] で変更できます。
 

AOSS なので「無線ANY許可」、DS なので「WEP」 となかなか強力なカードがそろっている中、Root空パスはアカンやろうに。
 
 

パスワードさえ設定してしまえば、WEB設定画面はそれなりに使いでがある。クライアントモニタや許可済み機器の状況も把握できる。
[caption id="attachment_1049" align="alignnone" width="500" caption="画像:WEB管理画面の一部"]画像:WEB管理画面の一部[/caption]
 

まあ自宅ではこの構成に落ち着いたが、普通にWPA(AES)なども対応しているので安手の追加APとしても十分に使える。手軽に無線AP追加したかったらいい商品なのかもしれない、小さいし。
 

くれぐれもWEBのパスワードは忘れないように、液晶でIPわかっちゃうからね。
 
 

2008年11月10日月曜日

MySQLでバイナリログから更新系のクエリをトレースする

メモエントリ。
 
MySQLのバイナリログをSQLのトレース目的で使ったのでメモ。
 

MySQLのバイナリログ取得設定


MySQLのバイナリログをとっておけば色々出来る、その辺は公式やら書籍が詳しいので割愛。
 

取りあえず設定。
my.cnfを編集、[mysqld] のセクションに取りあえず3行入れよう、ディレクトリはmysqlユーザが読み書きできるところならどこでもいい、この例では yum でのデフォルトのdataディレクトリだ。
[mysqld]
・・・
log-bin=/var/lib/mysql/binary
expire_logs_days = 14
max_binlog_size=200M


"log-bin"だけでも良いけど、放っておくとどこまでもログが残る、1ファイル200MB制限・14日間保存と
ファイル容量を制限するのは、ログ抽出の際に不便だから。
 
 
これで MySQL を再起動すれば、"/var/lib/mysql/binary.index","/var/lib/mysql/binary.000001" ファイルが作成されている。
(※起動に失敗したらmy.cnfで指定しているエラーログを見ると大体分かる。)
 
バイナリログはこっち、 "/var/lib/mysql/binary.000001" ローテーションするごとに数字が増える。
 
 

バイナリログから更新系ログを抽出


バイナリログの設定が終わったので本題。
 

バイナリログには、データベースの基本機能、 CRUD のうちReadを除くCUDが記録されている。
これを mysqlbinlog コマンドでテキストデータ(=実行時のSQLクエリ)に戻せるのでやってみよう。
 

テスト用DBの作成と削除


とりあえずDBを作って消した。
#mysqladmin create test001 -p
#mysqladmin drop test001 -p

mysqladmin とかいう妙なコマンドを使ったが、実際どういうSQL文が実行されたのかこれではよく分からない。
が、実行結果がバイナリログに記録されているので安心。
 

変換したバイナリログを眺める


mysqlbinlog コマンドにバイナリログファイルを渡してみる、
# mysqlbinlog binary.000001

 

上記実行後、出力の一部が下記。
#081110 12:33:26 server id 1 end_log_pos 104655065 Query thread_id=1071 exec_time=0 error_code=0
SET TIMESTAMP=1226288006/*!*/;
SET @@session.foreign_key_checks=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
create database `test001`/*!*/;
# at 104655065
#081110 12:39:45 server id 1 end_log_pos 104655154 Query thread_id=1076 exec_time=0 error_code=0
SET TIMESTAMP=1226288385/*!*/;
drop database `test001`/*!*/;

 

ばっちり記録されている。
本来はフルバックアップからの差分とかでの利用が想定されているみたいだけど、WEBアプリ制作時のデバッグとか、わけのわからんアプリが何かしているので調査とか、そういう局面でも役に立つ。

2008年11月8日土曜日

タスクスケジューラのログファイルの場所@WindowsServer

WindowsServer のタスクスケジューラは色々細かい設定ができて便利、よく活用してる。
これの豆知識っぽいネタ。
 

コントロールパネルのタスクを開いた状態で、[詳細設定]→[ログの表示]とやるとタスクの実行ログ、「SchedLgU.Txt」というファイルが開く。Windowsでは少々珍しく、32KBでサイズ固定の循環ログファイルだ。
 

しかし「SchedLgU.Txt」を検索しても出てこない、どこにあるのか気になってヘルプを見たら書いてあった。
 
このファイルは SchedLgU.txt という名前で \Windows\Tasks フォルダにあります。最近実行されたタスクを表示するには、SchedLgU.txt ファイルで、「***** 一番最近のエントリはこの行より上にあります *****」を検索します。このテキストのすぐ上にあるエントリが最近実行されたタスクです。

さよか、要は下記にあるということでいいんだ。
%SYSTEMROOT%TASKS\SchedLgU.txt
↓(大体の環境ではこうだろう)
C:\WINDOWS\TASKS\SchedLgU.txt

Tasks フォルダは特殊だからエクスプローラーからでは見えないだけだったのか。
DOS窓からDIRコマンドでファイル一覧を出すと、ちゃんと「SchedLgU.txt」がいる。
 

エディタでパスを指定して直接開くことも可能、これなら走査してイベントゲット監視も出来ないことは無いな。

2008年11月7日金曜日

Google Chromeのシークレットモード

何かと話題の Google Chrome にはシークレットモード がついている。
 

[caption id="attachment_1035" align="alignnone" width="397" caption="画像:シークレットモード"]画像:シークレットモード[/caption]
 

履歴の残らない、誰にもナイショのWEBアクセスができるぞ、と言うことなんだが。(出し方は→こちら)
 
 
 

なんというか… コイツに見られている感が常にするのが実にイヤ。[caption id="attachment_1036" align="alignnone" width="240" caption="画像:シークレットアイコン"]画像:シークレットアイコン[/caption]
 
こっち見ないでおくれよ。

IISのアプリケーションプールを開始するVBScript(WMI)

IISのアプリケーションプールが勝手に止まったりする事あります?
滅多に無いけどたまにある。そうか、わかるよ多分わかる。
 

止まっているアプリケーションプールを検出して自動で開始してくれるスクリプトを書いたのでエントリ。スケジュールタスクに登録して適度な間隔で実行すれば、簡易IIS監視体制の完成。
拡張子"vbs"で保存して実行してください、コマンドラインから実行もできるのでわりと便利。
[sourcecode language='vb']
strComputer = "."

set locatorObj = CreateObject("WbemScripting.SWbemLocator")
set providerObj = locatorObj.ConnectServer(strComputer, "root/MicrosoftIISv2")

Set colItems = providerObj.ExecQuery _
("Select * From IIsApplicationPoolSetting")

For Each objItem in colItems
if objItem.AppPoolState="4" Then
set nodeObj = providerObj.Get("IIsApplicationPool='" & objItem.name & "'")
nodeObj.start
end if
Next
[/sourcecode]

 

止まった原因はちゃんと調べたほうがいいけど、取りあえず動いておいて欲しいのも人情。
応用として、WQLにWhere句を使えば狙ったアプリケーションプールのみを監視できる。
(※Where name = 'hogehoge' とか name like ''%hoge% とか)
 

解説は参考情報を見てもらえると詳しく書いてあります、というかほぼMSDNからコピペ組み立てですけど。

2008年11月6日木曜日

iptablesでお手軽なssh総当りログイン試行攻撃対策

有用だと思ったのでメモ、元ネタチェインつきで。
 

元ネタ
sshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ)

の元ネタ
sshへの総当り攻撃をiptablesの2行で防ぐ方法 (blog@browncat.org)

の元ネタ
Block brute force attacks with iptables (Kevin van Zonneveld)
 
 

sshに対する攻撃といえば、ブルートフォースや辞書によるログインの試行が代表的、secureログが汚れるわ最悪ログインされるわと大迷惑(事故?)だ。
そもそも不要な接続は許可しないべきなんだけど、接続元のIPアドレスを限定するという事がしづらい場合もある。
 
 

2行の iptables コマンドでSSH攻撃対策をしよう



※テストに使ったOS,バージョン → CentOS5.2+iptables v1.3.5
recentモジュールが必要なので"/proc/net/ip_tables_matches"ファイルに
recentという行があることを確認

iptablesの簡単設定で、一定時間内に複数回ssh接続してきたIPを自動で拒否するようにできる、という情報を見つけたので記事にする。
以前誰かがfail2ban を設定していたのは見たことある。やれることは大体同じのはずだけど、細かい設定とかを管理したいならそちらがいいかもしれない。
 
 

引用すると下記2行でOK(※ eth0 の部分は環境による)。はみ出した分はどっかにコピペで…
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

これで 60秒間に8回のssh接続を仕掛けてきたIPアドレスからの新規TCPセッションを拒否するようになる。
 

ぱっと見では2行目だけで良さそうな気もするが、recentモジュールの使い方がそうなっているのかな。
これでセーブしておけばOSの起動時にもルール有効になり、対策OK。
ほか、初代の元ネタBlock brute force attacks with iptables (Kevin van Zonneveld) に色々注意事項が書いてある、試すなら cron で iptables をリセットしとけとかは面白い記述。
 
 


攻撃されたことをログに残そう


コレだけだとほんとに転載しただけなので芸が無い、とりあえずログに残るようにしておこう。
また、一つ目の元ネタsshへの辞書攻撃をiptablesで防ぐ (曖昧スラッシュ) によると、デフォルトのINPUTチェインを使うだけでは他の通信に遅延が出る恐れが。確かにそうなるかもしれない。
 
幸い、色々考慮済みの iptables のテーブルが前述の元ネタに紹介されている。折角なので パクリ 再現してみよう。
 

実行するiptables のコマンドは下記、セーブなど考慮して無いので注意。
# ssh接続を取りあえずユーザチェインに渡す
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j SSH_ACCEPT
 
# SSH_ACCEPTチェインの設定、条件マッチでSSH_BFAチェインに渡す
iptables -A SSH_ACCEPT -m recent --set --name SSH_ACCEPT
iptables -A SSH_ACCEPT -m recent --rcheck --seconds 60 --hitcount 5 --rttl --name SSH_ACCEPT -j SSH_BFA
 
# SSH_BFAチェインの設定、ログに書き出してドロップ
iptables -A SSH_BFA -j LOG --log-tcp-options --log-level 4 --log-prefix 'iptables: ssh_bfa:'
iptables -A SSH_BFA -j DROP

 

で、出来たテーブルがコレ。
OK、元ネタ にほぼそっくりだ。これで遅延無し、攻撃者のIPがログに残るiptablesのルールが完成。
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
SSH_ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
 
Chain SSH_ACCEPT (1 references)
target prot opt source destination
all -- anywhere anywhere recent: SET name: SSH_ACCEPT side: source
SSH_BFA all -- anywhere anywhere recent: CHECK seconds: 60 hit_count: 5 TTL-Match name: SSH_ACCEPT side: source
 
Chain SSH_BFA (1 references)
target prot opt source destination
LOG all -- anywhere anywhere LOG level warning tcp-options prefix `iptables: ssh_bfa:'
DROP all -- anywhere anywhere

閾値は60秒当たり5回になった。ほか recent が update から rcheck になったが違いがよく分からないな。
 

気になるところとしては、LOGのルールがちょっと違う。
「LOG flags」って箇所がよく分からなかった。TCPフラグで判断する仕様なのかと思ったが、手元の iptables の man ではそれっぽいオプションが見当たらなかったので、代わりに tcp-options を入れた。
ログが詳細になったが、意図するところは多分違うかもしれない。

続・アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか

ちょっと前のエントリ、「アクセスログの保存期間は3ヶ月を目安にすればいいんじゃないか」の続き。
 


つい先日まで知らなかったんですが、PCI DSS(PCIデータセキュリティ基準)というのがあります。
米国でやっているクレジットカード業界の認定らしい。認定って言うとセキュリティ関連のISMS(ISO27001) や プライバシーマーク 等が思い浮かぶけど、考え方は似たようなものです。
 
ただそれらに比べると、とても技術重視なことが特徴といえるんじゃないでしょうか。←※さわりをちょっとかじった感想なので参考までに。
 

ITProから一部引用
CI DSS(Payment Card Industry Data Security Standard)は,情報セキュリティの向上を目的としたクレジットカード産業の業界基準である。
 
PCI DSSは,クレジットカードのカード情報および取引情報を保護するために,次に示す六つの目的と,それに関する12のデータ・セキュリティ要件を定めている。

 

ほか、PCI DSSの詳しい内容はITProがきっちりまとめてくれています、運用管理者は是非一読を。

ITPro:セキュリティ基準「PCI DSS」
http://itpro.nikkeibp.co.jp/article/COLUMN/20080407/298166/


 
 

PCI DSSでは要件がすごく具体的


なぜこのPCIDSSを記事に引っ張ってきたかというと、示されている用件がとても具体的で有用な定義だと思ったから。
 

どのように具体的か紹介しておきます、分かりやすいので他社さん(日本オフィス・システム株式会社)の記事から引用させてもらいます。「PCIDSS-ISMSとどこが違うのか」が参考になりました。

  • リモートアクセスのユーザー認証では二要素認証を導入する

  • パスワードの伝送・保管はすべて暗号化する

  • 休眠ユーザーは90日ごとに取り除く

  • パスワードは90日ごとに変更する

  • 直近4回は同一パスワードの使用は不可

  • 連続したアクセス試行は6回以内に制限

  • ロックアウトは30分

  • セッションアイドル時間は15分以上でパスワード入力にする

あふれんばかりの具体性ですね、さすがにお金がらみはシビアです。
 
が、お手本にするにはもってこいですね。
PCIDSSにあげられている要素を並べ、取捨選択。それに適当に期間を設定するだけでとてもセキュリティ管理の行き届いたシステムになることでしょう。
 
 

アクセス・ログを3カ月間保管しなければならない(タイトル引用→引用元)


ようやく本題?
前回提唱した「アクセスログは3ヶ月保存で定義しとけばいいじゃない」に関連したPCIDSSの要件は↓な感じ。

10.7 監査証跡履歴は,少なくとも1年は保管,最低3カ月間はオンラインで閲覧利用できるようにする。

 

ここでも目安として3ヶ月という期間が出てくる。
実は ITProの見出し「3ヶ月間保管」につられ、得たりとばかりに記事を書き始めてしまったが、クレジットカード的には1年保管しろという事のようだ。これでは趣旨が変わる?
 

しかし、いつもお金(取引・決済)関係のように気を使うシステムを作っているわけで無いためここは大きく解釈してみる。
「サーバ本体=1次ストレージ」、「ログ保管場所=2次ストレージ」 とした場合、1次に3ヶ月、2次を含めて1年というという事で妥当な感じがする。
PCIDSSの要件的には最初の3ヶ月時点で「集計済み・閲覧しやすい状態」が求められている気がするが、まあそれは置いとこう。awstats でも logparser でも何でもあるから。
 

2次ストレージを利用するかはシステムの要件次第という事で、基本は「1次ストレージに3ヶ月保管」というポリシーで運用すればよい、とすればやっぱり「ログの保管は3ヶ月でOK」 という結論を仕立てあげることが出来る。
 
 

1年保管はどうしてもログがかさばってしまうので出来ればやりたくない。
OSの初期設定とかもこういうニーズにあわせてあると後で困らなかったりするのになぁ。

2008年11月5日水曜日

plink.exe pscp.exe で Windowsコマンドラインからssh、scp

Windowsコマンドプロンプトから急にLinuxサーバにファイルの転送がしたくなった。
同様に、突然ssh経由でログインしたくなった。
 

そんな機会もあろうかと、有名なsshクライアントのputtyにはおまけが付いている。
plink.exe , pscp.exe がそれだ。単純にコマンドラインから ssh/scp がやりたければ十分なツールだ。
 

たまに使うので記事にしておく、適当なところに設置してパスを通しておくと便利かも。
 
 

sshクライアント plink.exe (PuTTY Link)


大まかな使い方は ssh コマンドと一緒。ヘルプを載せておく。
機能はイマイチ、Screen などのユーティリティもh上に変な動きになるが、動作確認程度として考えたら十分だ。コマンド叩いてくるだけのような使い方でもよい。
※機能十分なクライアントが使いたければ putty.exe を叩けばいい。
 
PuTTY Link: command-line connection utility
Release 0.60
Usage: plink [options] [user@]host [command]
("host" can also be a PuTTY saved session name)
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-v show verbose messages
-load sessname Load settings from saved session
-ssh -telnet -rlogin -raw
force use of a particular protocol
-P port connect to specified port
-l user connect with specified username
-batch disable all interactive prompts
The following options only apply to SSH connections:
-pw passw login with specified password
-D [listen-IP:]listen-port
Dynamic SOCKS-based port forwarding
-L [listen-IP:]listen-port:host:port
Forward local port to remote address
-R [listen-IP:]listen-port:host:port
Forward remote port to local address
-X -x enable / disable X11 forwarding
-A -a enable / disable agent forwarding
-t -T enable / disable pty allocation
-1 -2 force use of particular protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-m file read remote command(s) from file
-s remote command is an SSH subsystem (SSH-2 only)
-N don't start a shell/command (SSH-2 only)
-nc host:port
open tunnel in place of session (SSH-2 only)

 
 

scpクライアント pscp.exe (PuTTY Secure Copy client)


これも scp コマンドと似たような使い勝手。ヘルプのっけるだけでも大体分かるな。
 

PuTTY Secure Copy client
Release 0.60
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r copy directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol

2008年11月4日火曜日

Windows上でRPMパッケージを展開する

「RPMの中身が見たい、でも手元にLinuxがない!」
 

自宅にLinux環境を置いてないのが悪いんだが、ブログ記事を作るときにたまに困る。
Linux系のネタでは、 Google Notebook にメモってから後で記事に起こすということをよくやるが、細かいところでRPMを展開して確認することがある。
 
 

RPMの展開は意外と有名な多機能アーカイバでは対応していない、下記のツールで展開する事ができる。

XacRett(公開サイトのトップはこちら)
http://www.kmonos.net/lib/xacrett.ja.html


 
 

使い方はいたって簡単。任意のRPMパッケージを XacRett.exe にドロップすればデスクトップに展開される。
デフォルトのコンフィグファイルとか、バイナリのインストールパスとかの確認で使っています。
 
なお、 XacRett.exe を直接起動すると展開先の指定ができる、デフォルトのデスクトップから変更したい場合などは指定したらよいでしょう。(.ini ファイルができます。)
 
 

折角なのでRpmForgeのrpmforge-releaseを展開してツリーを見てみた。
rpmforge-release-0
├─etc
│ ├─apt
│ │ └─sources.list.d
│ │ rpmforge.list
│ │
│ ├─pki
│ │ └─rpm-gpg
│ │ RPM-GPG-KEY-rpmforge-dag
│ │ RPM-GPG-KEY-rpmforge-dries
│ │ RPM-GPG-KEY-rpmforge-matthias
│ │
│ ├─smart
│ │ └─channels
│ │ rpmforge.channel
│ │
│ ├─sysconfig
│ │ └─rhn
│ │ sources.rpmforge.txt
│ │
│ └─yum.repos.d
│ mirrors-rpmforge
│ rpmforge.repo

└─usr
└─share
└─doc
└─rpmforge-release-0.3.6
mirrors-rpmforge.yum
RPM-GPG-KEY-rpmforge-dag
RPM-GPG-KEY-rpmforge-dries
RPM-GPG-KEY-rpmforge-matthias
rpmforge.apt
rpmforge.smart
rpmforge.up2date
rpmforge.yum

なるほど。