2011年8月29日月曜日

Nessus on CentOS-6.0

Vulnerability Scanner(脆弱性検査ツール) の Nessus を使ってみた。

Nessus について

Nessus (software) - Wikipedia, the free encyclopedia」に概要が書いてある。

そのほかの特徴を、思いつくまま挙げた:

  • 商用利用の場合は有料ユーザー登録が必要(register to ProfessionalFeed
  • 商用でない場合も登録は必要(register to HomeFeed
  • バージョン 4.4 からWebインターフェースが提供されたため、クライアントソフト(NessusClient)のインストールが不要になった
  • コマンドラインインターフェース(CLI)もある
  • デフォルト「ポリシー」が4種類提供されている。これらをコピーして自分のポリシーを作成し、スキャンを実行する
  • 「プラグイン」を定期的に更新する必要がある(Nessus 4.4 Installation Guide によると普通は1日1回、場合によっては4時間に1回とのこと)

rpm をダウンロード

利用許諾のページ「Nessus Download Agreement | Tenable Network Security」から進んで、プラットフォームに合ったファイルをダウンロードする。今回の場合はRed Hat ES 6 (64 bits) / CentOS 6: Nessus-4.4.1-es6.x86_64.rpm をダウンロード。

インストールと設定

rpmでインストール。

# rpm -Uvh Nessus-4.4.1-es6.x86_64.rpm

あとは、Documentation のなかの Nessus 4.4 Installation Guide を読んで作業する(PDFファイル)。英語だが目次がきちんと整理されているので分かりやすい。

ポリシー作成とスキャンの実行

これも Documentation の Nessus 4.4 User Guide を読んで作業すれば難しくない。

以下は画面のキャプチャを適当に貼っていく。

ポリシーの編集画面

スキャン結果(Reports)

Severity が high のものが1個あった。

スキャン結果の詳細

Severity が high のものを掘り下げてみた。

スキャン結果の詳細

さらに掘り下げてみたところ、脆弱性に関する詳しい説明が表示された。

CVE-2011-3192と書いてあり、2011年8月19日に発見されたApacheの脆弱性のことだと分かる(脆弱性と対策は以下のリンク先に書いてある)。

対策を行ってから再度スキャンしてやると、当然ながらこの脆弱性はレポートから消えた。

tar コマンドの xattrs オプション

star

少し前の Linux(RedHat)では、SELinux や ACL の情報をもったファイルをアーカイブするときに star というコマンドを使うことになっていた。

ただし、このコマンドは圧縮のオプションが充実していなくて不便だった。

たとえば、gzip圧縮する場合には

$ star -H=exustar -xattr -c dir1 | gzip > dir1.tgz

のようにパイプやリダイレクトを行う必要があった(tar -z のような圧縮オプションが無いため)。

tar -xattrs

しかし、最近は tar が改良されて -xattrsオプションを使えばよくなったらしい(これで -j, -J, -z などの圧縮も使える)。

tar -xattrs の例

CentOS-6.0(Linux 2.6.32-71.29.1.el6.x86_64)にて確認。

準備
~/dir, ~/dir/file1, ~/dir/file2 を作って、テキトーにACLと拡張ファイル属性を設定。
$ cd
$ mkdir dir1 && touch dir1/file{1,2}
$ setfacl -R -m m:rwx dir1
$ setfattr -n 'user.test' -v 'test' dir1
$ setfattr -n 'user.test' -v 'test' dir1/file{1,2}
tar -xattrs でアーカイブ
$ tar --xattrs -cvzf dir1.tgz dir1
/tmp に展開して属性を確認
$ tar -xvzf dir1.tgz -C /tmp
$ getfacl -R /tmp/dir1
getfacl: Removing leading '/' from absolute path names
# file: tmp/dir1
# owner: useruuser
# group: useruuser
user::rwx
group::rwx
mask::rwx
other::r-x

# file: tmp/dir1/file2
# owner: useruuser
# group: useruuser
user::rwx
group::rw-
mask::rwx
other::r--

# file: tmp/dir1/file1
# owner: useruuser
# group: useruuser
user::rwx
group::rw-
mask::rwx
other::r--/

$ getfattr -d /tmp/dir1 /tmp/dir1/file*
getfattr: Removing leading '/' from absolute path names
# file: tmp/dir1
user.test="test"

# file: tmp/dir1/file1
user.test="test"

# file: tmp/dir1/file2
user.test="test"

…というわけで、tar -xattrs で拡張属性が保存されていることがわかった。

2011年8月23日火曜日

CentOS-6.0: semanage SELinux Command Not Found

CentOS-6.0 で semanage(SELinux用のコマンドラインツール)を使おうと思ったら command not found だった。

これはよくある話のようで、「RHEL 6: semanage SELinux Command Not Found」に回答を発見(厳密には RHEL6 向けの回答だが)。

要するに、# yum provides で欲しいファイルを指定すると、必要なパッケージがわかる。知らなかったので、覚えておきたい。

2011年8月22日月曜日

フェイス(face)を変えて見やすくしよう

Emacsのテキスト表示に関する属性、すなわちフォント、前景色、背景色、下線などをまとめたものを「フェイス」と呼ぶ。フェイスの概念は、テキストをちょっとカスタマイズしたいときなどに役に立つ。

例:SLIMEの slime-repl-inputed-output-face

下の画像は、Emacs で SLIME の REPL を使っているところ。式の評価結果「1.4142135」が赤で表示されていて見えにくいため、「フェイスを変更して見やすくしよう」という気分になる。

見えにくい部分のフェイスを調べる

問題のテキストに指定されているフェイスを調べることから始める(環境は GNU Emacs 22.3.1)。

具体的には、カーソルを「1.4142135」の所に移動して M-x eval-expression を実行。次いでミニバッファに以下の式を入力する。

(get-char-property (point) 'face)

すると、同じくミニバッファに slime-repl-inputed-output-face という文字が表示されるはず。これが見えにくい部分のフェイスの名前なので、メモしておく。

※毎回 eval-expression するよりも、「Meadow/Emacs memo: 基本的な設定」に紹介されているように、フェイスを調べるコマンドをあらかじめ init.el や .emacs に定義しておくほうが便利。

色の見本を参照して使いたい色を決める: list-colors-display

コマンド M-x list-colors-display を実行すると、以下のように色の名前("snow"、"GhostWhite"など)が表示される。この中から、新しい文字に使いたい色の名前をピックアップしておく。

フェイスを変える: customize-face

Emacsにはフェイスを変更するためのコマンド customize-face が用意されているので、これを利用する。

M-x customize-faceを実行して、目的のフェイスであるslime-repl-inputed-output-face を入力。すると、次のようなバッファができる。

下のほうにある"Foreground: Red"の所までカーソルを移動して、新しい文字の色を入力。入力に応じて右側の "sample" の文字色が変わるので、試行錯誤することもできる。

色を入力したら、上のほうにある "Save for Future Sessions" にカーソルを合わせて Enterキー を押す。これで変更が永続化、つまり .emacs や init.el に設定が書き込まれる。

確認

customize-face による設定はすぐに反映されるので、REPLのバッファに戻れば文字色の変化を確認できる。

さらに、設定ファイルを開いてみると、末尾にカスタマイズのためのコードが追加されていることがわかる。

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(slime-repl-inputed-output-face ((((class color) (background dark)) (:foreground "IndianRed1")))))

勝手に追加されるのが気持ち悪い場合は、custom-set-faces の式を自分で作って書き込めばいい。ただし、背景の種類に応じて (background dark) の部分を調整する必要があるはず。

2011年8月20日土曜日

Tunnelblick の WARNING

Tunnelblick というのは、Mac用のOpenVPNクライアント。

今日まで気がつかなかったが、ログを見ると次のようなWARNINGが出ていた。

2011-08-20 00:13:31 WARNING: No server certificate verification method has been enabled.  See http://openvpn.net/howto.html#mitm for more info.

バージョンは *Tunnelblick: OS X 10.6.8; Tunnelblick 3.1.7 (build 2190.2413); OpenVPN 2.1.4

よくあること?

ほかの人のブログにも同じWARNINGが出てるケースが散見されるし、OpenVPNを使ううえで問題はないので、無視してよいのかもしれない。

…が、やはり気になったので調べた。

原因と解決策

実は Tunnelblick の設定ファイル( config.ovpn )が微妙に間違っていて、証明書や秘密鍵を参照できてなかった様子。念のため絶対パスで記述したらWARNINGが出なくなった。

修正前
ca ca.crt
cert client01.crt
key client01.key
修正後
ca /Users/foo/Library/openvpn/TunnelblickVPNConfigurationClient01.tblk/Contents/Resources/ca.crt
cert /Users/foo/Library/openvpn/TunnelblickVPNConfigurationClient01.tblk/Contents/Resources/client01.crt
key /Users/foo/Library/openvpn/TunnelblickVPNConfigurationClient01.tblk/Contents/Resources/client01.key

ここで、fooTunnelblickVPNConfigurationClient01 はそれぞれ Macユーザ名と Tunnelblickの設定名称なので環境に依存する。

2011年8月19日金曜日

Node.js をビルドするときの openssl-libpath

うちのMacで久しぶりにビルドしようとしたら、makeの途中でエラーが発生した(Mac OS 10.6.8 での話)。むかしは問題なかった気もするが…

解決策

makeのメッセージを確認したところ、SSL関係の共有ライブラリ(/opt/local/lib/libssl.dylib)がおかしい。そこで configure のオプションで別のパスを指定してみたら解決した。

$ git clone --depth 1 git://github.com/joyent/node.git
$ cd node
$ git checkout v0.4.11
$ ./configure --prefix=$HOME/local/node --openssl-libpath=/usr/lib/
$ make

ちなみに、オプションを表示するには configure --help と打てばOK.

$ ./configure --help
waf [command] [options]

Main commands (example: ./waf build -j4)
  abspath  : Return an absolute path.
  build    : builds the project
  clean    : removes the build files
  configure: configures the project
  dirname  : Returns the directory component of a pathname
  dist     : makes a tarball for redistributing the sources
  distcheck: checks if the sources compile (tarball from 'dist')
(略)

それと、ここで表示される "waf" って何のことだろと思ったら、Pythonでできたビルドツールらしい。Waf - Wikipedia, the free encyclopedia … 初耳でした。

2011年8月18日木曜日

JavaScriptコードの性能比較 - jsPerf

概要はこちら「JavaScriptコードのパフォーマンス比較ができるWebサービス「jsPerf」の使い方 | Web scratch」に。

とりあえず、キャピタライズ処理のためのコードを比較してみた > Upcase first character · jsPerf

※コードは「デザインとプログラムの狭間で: javascriptでキャピタライズ(一文字目を大文字にする)」のものを利用させていただいた。

使うのはとても簡単。コードだけでなく、いろいろな環境での結果を共有できるのも面白い。

あとはどういった場面で活用するか。たとえばFirebugのプロファイラでボトルネックを特定し終わって、具体的な改善方法を模索するときとか。