本文へジャンプ

GIDEON STAFF BLOG

ESTA

来年(2009年)の1月29日から米国に入国する際は "電子渡航認証システム(ESTA)" による事前認証が必要になります。

米国国土安全保障省(DHS)は8月1日より、 電子渡航認証システム (Electronic System for Travel Authorization: ESTA)を開始した。 この新しいオンラインシステムは、ビザ免除プログラム(VWP)の一部である。 現在、ESTAのウェブサイトでは任意ので申請を受付けているが、 2009年1月12日からは申請が義務化され、 米国に短期商用・観光目的(90日以下)で渡航予定の VWP参加国のすべてのビザなし渡航者は、 米国行きの航空機や船舶に搭乗する前に オンラインで渡航認証を受けることが必要になる。
アメリカ大使館のWebSiteより

今までは3ヶ月未満の短期滞在の場合は I-94W と呼ばれる 米国査証免除プログラム参加国用入国用紙に記入するだけで良かったが、 今後は事前認証が必要になるので注意が必要です。
ESTA による認証は2年間有効との事なので、 出発直前に慌てない様に早めに済ませておくのが良いかも?

セキュリティ情報

FreeBSD 上に以下のセキュリティ上の脆弱性が発見された。

  1. Bluetooth 関係のカーネルモジュールの BUG に起因する脆弱性
  2. netgraph 及び bluetooth 関係のカーネルモジュールで、 適切に初期化されていないポインタが存在している事が原因で 発生する脆弱性が存在する。
    この脆弱性によりローカルユーザにより任意のコードの実行や root 権限の奪取、jail からの脱獄が可能となる。

  3. ftpd サーバにクロスサイトリクエストフォージュリの脆弱性
  4. ftpd は汎用目的の ftp サーバの実装の一つであり FreeBSD ベースシステムに含まれているが、 非常に長い文字列により与えられたコマンドの分割処理に問題があり、 結果として任意のコマンドを実行されるなどの危険性がある。

どちらも標準状態では無効になっているので、 明示的に設定している場合以外はそれほど問題はないが、 修正パッチがリリースされているので適用すべきである。

セキュリティニュース

2008.11.11 にMcColo がプロバイダより切断された後の経過をフォローする。

2008.11.15

Srizbi および Rustock の配信サーバ McColo C&C サーバ (米国サンノゼ IPアドレス:208.66.194.22) からの配信が再開した。
実はサーバが物理的に撤去されていないことが判明。 まだサンノゼの Market Post Tower で活動を続けているようだ。

2008.11.16

Rustock の配信サーバ C&C サーバが McColo から ロシアのデータセンターに移動した。

2008.11.25

Srizbi に感染しているボットがよみがえった。 新しい実行ファイルに更新され活動を再開した。
その配信サーバはエストニアにあり、 ロシア語 (koi8-r) でMIMEエンコードしたスパムであった。 このことから当初ロシアにある SMTP サーバにターゲットにしているようだ。

2008.12.01

Srizbi および Rustock の配信サーバは現在のところ、 大半が停止し、ごくわずかな配信サーバを残すに至った。
SrizbiRustock に代わって Pushdo が代替ボットになっている。
Cutwail というワームプログラムは迷惑メールの送信および Cutwail を最新にアップデートするために使われるため、 このプログラムの配信を止めることでスパム配信を停止できる。

[http://blog.fireeye.com/research/2008/11/index.html 出典]

GNU Bourne-Again Shell を便利に使う

対話シェルとして使用する bash (1) の コマンドライン履歴機能の便利な使い方。
bash (1)のコマンドライン履歴機能のうち イベント指示子、単語指示子、修飾指示子は オンラインマニュアルにも情報が少ないが、 慣れると非常に便利でキータイプ量も減るので是非マスターしておきたい。
以下の文中で nm は任意の整数、 foobarbaz などは任意の文字列を示します。

機能一覧

イベント指示子
!! 直前に実行したコマンドを実行する
!-n n 回前に実行したコマンドを実行する
^foo^bar
!:s/foo/bar
直前に実行したコマンドの foobar に変更して実行する
!:gs/foo/bar 直前に実行したコマンドの全ての foobar に変更して実行する
!foo foo で開始されるコマンドを実行する
!n
n 番目に実行されたコマンドを実行する
単語指示子
!:n 直前に実行したコマンドの n 番目の引数を取得する
!^ 直前に実行したコマンドの 1 番目の引数を取得する
!$ 直前に実行したコマンドの最後の引数を取得する
!* 直前に実行したコマンドの全ての引数を取得する
!:n* 直前に実行したコマンドの n 番目から最後までの引数を取得する
!:n-m 直前に実行したコマンドの n 番目から m 番目までの引数を取得する
!:-n 直前に実行したコマンドの最初から n 番目までの引数を取得する
!:n- 直前に実行したコマンドの n 番目から最後の 1 個前までの引数を取得する
修飾指示子
:p コマンドを表示のみして実行しない
:h パスのファイル名部分を取り除きディレクトリ名を取得する
:t パスのディレクトリ名部分を取り除きファイル名を取得する
:r ファイル名の拡張子を取り除き "." の前を取得する
:e ファイル名の拡張子を "." 付きで取得する

イベント指示子

  • !!
  • 直前に実行したコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ !!
    echo foo bar baz
    foo bar baz
    			

  • !-n
  • n 回前に実行したコマンドを実行する (複数のコマンドを繰り返して実行する場合に便利)
    $ echo foo bar baz
    foo bar baz
    $ echo FOO BAR BAZ
    FOO BAR BAZ
    $ !-2
    echo foo bar baz
    foo bar baz
    $ !-2
    echo FOO BAR BAZ
    FOO BAR BAZ
    			

  • ^foo^bar
    !:s/foo/bar
  • 直前に実行したコマンドの foobar に変更して実行する (下のパターンの場合 "/" は任意の文字に変更が可能)
    $ echo foo foo foo
    foo foo foo
    $ ^foo^bar
    echo bar foo foo
    bar foo foo
    $ echo foo foo foo
    foo foo foo
    $ !:s/foo/bar
    echo bar foo foo
    bar foo foo
    			

  • !:gs/foo/bar
  • 直前に実行したコマンドの全ての foobar に変更して実行する ("/" は任意の文字に変更が可能)
    $ echo foo foo foo
    foo foo foo
    $ !:gs/foo/bar
    echo bar bar bar
    bar bar bar
    			

  • !foo
  • foo で開始されるコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ touch foo bar baz
    $ !ec
    echo foo bar baz
    foo bar baz
    			

  • !n
  • n 番目に実行されたコマンドを実行する
    $ echo foo bar baz
    foo bar baz
    $ echo FOO BAR BAZ
    FOO BAR BAZ
    $ !1
    echo foo bar baz
    foo bar baz
    			

単語指示子

  • !:n
  • 直前に実行したコマンドの n 番目の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:0
    echo echo
    echo
    $ echo foo bar baz
    foo bar baz
    $ echo !:2
    echo bar
    bar
    			

  • !^
  • 直前に実行したコマンドの 1 番目の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !^
    echo foo
    foo
    			

  • !$
  • 直前に実行したコマンドの最後の引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !$
    echo baz
    foo
    			

  • !*
  • 直前に実行したコマンドの全ての引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !*
    echo foo bar baz
    foo bar baz
    			

  • !:n*
  • 直前に実行したコマンドの n 番目から最後までの引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:2*
    echo bar baz
    bar baz
    			

  • !:n-m
  • 直前に実行したコマンドの n 番目から m 番目までの引数を取得する
    $ echo foo bar baz FOO BAR BAZ
    foo bar baz FOO BAR BAZ
    $ echo !:3-5
    echo baz FOO BAR
    baz FOO BAR

  • !:-n
  • 直前に実行したコマンドの最初から n 番目までの引数を取得する
    $ echo foo bar baz FOO BAR BAZ
    foo bar baz FOO BAR BAZ
    $ echo !:-4
    echo foo bar baz FOO
    foo bar baz FOO
    			

  • n-
  • 直前に実行したコマンドの n 番目から 最後の 1 個前までの引数を取得する
    $ echo foo bar baz
    foo bar baz
    $ echo !:1-
    echo foo bar
    foo bar
    			

修飾指示子

  • :p
  • コマンドを表示のみして実行しない
    $ echo foo bar baz
    foo bar baz
    $ touch foo bar baz
    $ !e:p
    echo foo bar baz
    			

  • :h
  • パスのファイル名部分を取り除きディレクトリ名を取得する
    $ echo /foo/bar/baz
    /foo/bar/baz
    $ echo !$:h
    echo /foo/bar
    /foo/bar
    			

  • :t
  • パスのディレクトリ名部分を取り除きファイル名を取得する
    $ echo /foo/bar/baz
    /foo/bar/baz
    $ echo !$:t
    echo baz
    baz
    			

  • :r
  • ファイル名の拡張子を取り除き "." の前を取得する
    $ echo foo.c
    foo.c
    $ echo !$:r
    echo foo
    foo
    			

  • :e
  • ファイル名の拡張子を "." 付きで取得する
    $ echo foo.c
    foo.c
    $ echo !$:e
    echo .c
    .c
    			

社名『ギデオン』の由来

社名ギデオンは旧約聖書の士師記にでてくる勇者の名にちなんでいます。
「後顧の憂いのない300人」の戦士を集め、3万人の敵を相手に勝利したという 「ギデオンの300」のエピソードを創業精神としました。

聖書にでてくるダビデ、ソロモンなどの勇者は、もとよりとても強く、 優れた人脈を持つ賢者として描かれています。 一方ギデオンは元来はひ弱で、人脈もなく貧乏だった人ですが、 神の助けを得て王者となりました。

創業初期は、資金もなく、営業力もなく、開発人員も少なく、 状況はギデオンと全く同じでしたが、 「ギデオンの300」を心のよりどころとして一歩一歩事業を展開してきました。

1990年創業からやっと2009年には新社屋を建設するにいたりました。
今後10年には、現在の10倍規模の事業に成長させたいと考えています。

iSCSI Initiator on FreeBSD

最近は Buffalo の TeraStation など安価な iSCSI ストレージもあるが、 勿論 FreeBSD からも iSCSI は利用可能である。

ただし残念ながら iSCSI がサポートされているのは FreeBSD では 7系からなので、 FreeBSD 7.0-RELEASE で試してみる。

# kldload scsi_initiator
# iscontrol -d -t IPアドレス
TargetName=iqn.2004-08.jp.buffalo:TS…
TargetAddress=IPアドレス
# cat << EOF > /etc/iscsi.conf
name {
	TargetName=iqn.2004-08.jp.buffalo:TS…
	TargetAddress=IPアドレス
}
EOF
# iscontrol -n name
# ls /dev/da*
/dev/da0    /dev/da0s1
ドライバをロードした後で iscontrol コマンドを実行して target を検索。
検出した TargetNameTargetAddress/etc/iscsi.conf に設定を保存して、 再度 iscontrol コマンドを実行すると、 ちゃんと /dev/da0s1 が生えてきて普通に使えました。

迷惑メール防止法本日より施行

特定電子メールの送信の適正化等に関する法律(通称 迷惑メール防止法)の改正案が 本日より施行された。
今回の改正はオプトイン方式( 受信を同意した相手にしか特定の電子メールを送信できなくなる) へ移行した事が一番大きなポイントであるが、 他にも厳罰化や送信者情報偽装の禁止などが盛り込まれている。

FreeBSD 6.4-RELEASE

FreeBSD Release Engineering Team は 6-STABLE 系最後のリリースとして FreeBSD 6.4-RELEASE を発表しました。

主な変更は以下の通り

  • NFS Lock Manager (NLM) Client
  • 暗号化フレームワーク Camellia cipher のサポート
  • USB デバイスや GPTへの対応といった boot loader の改良
  • DVD インストールイメージの配布開始
  • KDE 2.5.10、GNOME 2.22.3 の採用
  • BIND、sendmail、OpenPAM などのアップデート

ICANNが悪質なドメイン登録業者を取り消し

ITmedia News - 悪名高きドメイン登録業者、ICANNが認定取り消しへ

ICANN - EstDomains Update: Notice of Termination Stayed

取り消しの理由はESTDomainsの社長が有罪になったからとのことで、悪質なドメイン登録を許していたからではない模様。

今回の措置が効果があったとしても、悪質なドメイン登録業者であっても代表者が有罪にならなければ登録業者としての取り消しができないということを示しており、必ずしも良いニュースとはいえない。

php からのディスクアクセス

php だという時点でアレなんですが…

php からディレクトリにある全ファイルの一覧を取得する処理のパフォーマンスを exec()popen()opendir() を利用した処理で比較してみる。

方法は単純にテスト用のディレクトリに 500 ファイルを用意して、 それぞれの関数を使用してファイル名一覧を取得する処理を 10回実行した場合の処理速度を計測する。

exec("ls -1") 0.774762
popen("ls -1") 0.865914
opendir() 0.136642

外部 shell を実行しないので opendir() が早いだろうとは予想していたが、 これほど差が出るとは思わなかった。
パフォーマンスを優先する場合は勿論だが、 余計なプロセスを生成しないので opendir() が地球に優しい様だ。

<?

	$func = array("byls", "bypopen", "byopendir");

	for($i=0; $i<3; $i++){
		$dist = array();
		$start[$i] = gett();
		for($j=0; $j<100; $j++)
			$dist[$j] = $func[$i]("/tmp/test");
		$end[$i] = gett();

		printf("%-10s:%f\n", $func[$i], $end[$i] - $start[$i]);
	}

	function	byls($dir)
	{

		exec("ls -1 $dir", $output);

		return($output);

	}

	function	bypopen($dir)
	{

		if(($fp = popen("ls -1 $dir", "r"))){
			while($buf = fgets($fp))
				$output[] = trim($buf);
			pclose($fp);

		}

		return($output);

	}

	function	byopendir($dir)
	{

		if($dir = dir($dir)){
			while($file = $dir->read())
				$outout[] = trim($file);
			$dir->close();
		}

	}

	function	gett()
	{

		$t = gettimeofday();
		return((float)($t['sec'] + $t['usec'] / 1000000.0));

	}

?>

ついでにシェルの glob なパターン指定を利用して 指定した文字列にマッチするファイル名の一覧取得を行う場合のテストもしてみた。

20071203000 から 20071203499 までの500個のファイルの中から、 200712032?? にマッチするファイル名の一覧取得で時間を計測してみる。

exec("ls -1 200712032??") 0.883770
popen("ls -1 200712032??") 0.902392
opendir() -> preg_match("/200712032../") 0.188792
glob("/200712032../") 0.203928

exec()popen() が遅いのは相変わらずだが、 preg_match() の呼出しが意外に早かったのが驚き。
正規表現のマッチ処理って基本的に相当時間がかかる筈なんだが…
glob() はファイルシステムに自分でアクセスしてる様なので早い。
複雑なパターン指定が必要なら preg_match() の方が柔軟だが、 シェルに渡せる程度のパターン指定なら glob() を利用するのが 可読性やメンテナンス性と性能が両立できて良いのかも?

Tweak

Leopard を使っていてちょっと便利な小技

  1. iTunes 8 から表示される様になった曲の右側の iTunes Store へのリンク矢印を表示させない
    $ defaults write com.apple.iTunes show-store-arrow-links -bool FALSE
    		

  2. iTunes 8 のブラウザ表示時にジャンルを表示させない
    $ defaults write com.apple.iTunes show-genre-when-browsing  -bool FALSE
    		

  3. Spaces が自動で切り替わるのを防止する
    $ defaults write com.apple.dock workspaces-auto-swoosh -bool NO
    		

  4. ドラッグで Spaces を移動する際の待ち時間を設定する
    $ defaults write com.apple.dock workspaces-edge-delay -float 0.5
    		

  5. HelpViewer のウィンドウをフローティングではなくする
    ヘルプが最前面にこなくなるので便利
    $ defaults write com.apple.helpviewer NormalWindow -bool YES 
    		

  6. ネットワークドライブに .DS_Dtore を作成しない
    $ defaults write com.apple.desktopservices DSDontWriteNetworkStores true 
    		

  7. X11 の終了確認ダイアログを無効にする
    $ defaults write org.x.x11 no_quit_alert false
    		

  8. Mail.spp で添付ファイルのインライン表示を無効にする
    $ defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
    		

  9. Front Row の iTunes トップソングの国を指定する
    $ defaults write com.apple.frontrow MusicStoreFrontID 国コード
    		

    代表的な国コード
    111111 デフォルト (アメリカ)
    143442 フランス
    143443 ドイツ
    143444 イギリス
    143447 フィンランド
    143449 アイルランド
    143460 オーストラリア
    143461 ニュージーランド
    143462 日本

NTFS-3G

BootCamp を利用して Windows とデュアルブートの環境を構築している場合、 Leopard 標準のドライバだと NTFS でフォーマットされたハードディスクには 読み込みのみしかアクセスできないので何かと不便である。

しかし MacFuse と NTFS-3G を利用すると NTFS でフォーマットされたディスクにも 何の問題もなく書き込みができるので便利である。
MacFuse も NTFS-3G も公式サイトではバイナリも配布されているが、 MacPort からも簡単にインストールできる。
NTFS-3G を利用するためには既に Leopard によってマウントされてる NTFS のディスクのマウントを解除した後で NTFS-3G によるマウントを実施する。

$ sudo port install ntfs-3g                    # MacPort から ntfs-3g をインストール(依存関係で MacFuse もインストールされる)
FuseFS を利用するためにここで再起動する
$ /usr/sbin/diskutil list                      # 現在マウントされているボリュームを表示しデバイス名を確認しておく
   :
   3:       Microsoft Basic Data Windows Xp              64.9 Gi    disk0s3
$ mkdir -p /Volumes/NTFS                       # 最初の1度だけマウントポイントとなるディレクトリを作成する
$ /usr/sbin/diskutil umount disk0s3            # Leopard によって既にマウントされているディスクのマウントを解除する
$ sudo /usr/local/bin/ntfs-3g /dev/disk0s3 /Volume/NTFS -o volume=NTFS,default_permissions,locale=ja_JP.UTF-8,uid=UID,gid=GID
ntfs-3g コマンドのオプションに uid、gid を指定すると マウントされたディスクに含まれるファイルやディレクトリの オーナ、グループを指定できる。
アクセスは非常に遅いが NTFS パーティションに書き込みできるのは嬉しい。

Time Machine

Leopard から搭載された Time Machine というバックアップシステム
標準状態だと Time Machine のバックアップ先は直接接続されたドライブ、 もしくは Apple 純正の Time Capsule しか選択できないのだが、 以下の手順を実施する事により samba で共有しているネットワークドライブに バックアップする事ができた。
ただし、この方法は公式にサポートされた機能ではないので、 バックアップの消失等の危険性がある。
あくまでも自分自身の責任において実施して下さい。

  • samba で新規の共有を作成する
  • → 共有する名称は任意でかまわない

  • ターミナルから以下のコマンドを実行する
  • $ defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
    

  • Finder の "移動" メニューから samba で共有したサーバに接続する
  • Time Machine の環境設定でディスクの変更を行う
  • → ネットワークドライブが選択可能となっているので選択する

  • Time Machine の "今すぐバックアップを作成" でバックアップを開始する
  • ネットワークドライブに作成されるイメージのファイル名を確認する
  • → 通常は ホスト名 + "_" + マックアドレス + ".sparsebundle" となっている

  • Time Machine によるバックアップがエラー終了する
  • ディスクユーティリティを起動して新規ディスクイメージを作成する
  • 名前: ネットワークドライブに作成されたイメージのファイル名
    場所: 任意の場所
    ボリューム名: 任意の名称
    ボリュームサイズ: バックアップに必要となる容量を指定する
    ボリュームフォーマット: Mac OS 拡張 (ジャーナリング)
    暗号化: なし
    パーティション: 単一パーティション - Apple パーティションマップ
    イメージフォーマット: スパースバンドル・ディスクイメージ

    ネットワーク越しにスパースバンドル・ディスクイメージを作成できないので、 "場所" はローカルディスクを指定する必要がある。
    一番最初に" イメージフォーマット" を スパースバンドル・ディスクイメージに設定する事により 実際のハードディスク容量よりも大きなサイズが指定できる。

  • 作成したイメージファイルをバックアップ先に転送する
  • Time Machine を再度実行してバックアップを作成する

Flash9 on FreeBSD!

先日 FreeBSD 7-STABLE で Flash9 を動作させるためのパッチが公開されたが、 更に FreeBSD 6.{3,4}-RELEASE でも Flash9 を動作させるパッチが公開されたので、 [http://people.freebsd.org/~nox/linprocfs-6.3.patch ここ] から 早速ダウンロードして Make World してみる。

新しい環境で再起動した後 ports から linux-flashplaye9 をインストール。
インストール後、

$ nspluginwrapper -i /usr/local/lib/npapi/linux-flashplugin/libflashplayer.so
を実行してから firefox を起動し、 about:plugins すると、ちゃんと flashplayer 9 を認識している。
さっそくニコニコ動画にアクセスすると動画がちゃんと表示されています。

結構嬉しいです