2012年2月27日月曜日

iノード番号で find

findコマンドには、inode 番号を指定するオプション '-inum' がある。


find /root/ -inum 261232
/root/.bash_history

このオプションは、今日「SELINUXシステム管理」という本を読んで知った(アクセス拒否の際 audit.log に対象のファイルのinode番号が出力されるので、inode番号からファイルを検索できると便利だよ、との文脈で)。


2012年2月20日月曜日

SEAndroid - security-enhanced version of Android

先月(2012年1月)、"SEAndroid"というのがリリースされたらしい。SELinuxの機能をAndroidでも使えるようにしようという話なので、開発はNSA関係の人が中心に行っている模様。WikiサイトからダウンロードできるPDFに、いろいろと例が載っていた。


このニュースで初めて知ったけれど、Kernel の LSM(Linux Security Module)でAndroidをセキュアOS化する試みはすでにスマートフォンメーカーによって行われているらしい。たとえばSHAPR製のIS01に導入された "Deckard LSM" が一つの例(IS01は、root化に対して確かにセキュアだけど、LSM自体を無効にする方法が発見されてしまったらしい。。。)


今後SEAndroidが普及したら、SELinuxとおなじ効果が享受できるだろうか。ポリシーがきちんと書けていれば侵入攻撃を防御できるので、IDS的な機能を入れなくて済む、セキュリティホールにパッチやアップデートを急いで適用しなくて済む、など(ただしLSM無効化は無しの前提で)。


2012年2月19日日曜日

ethtoolコマンドでNICの調査と設定

システムの性能が思ったより出ないときなどに、原因の切り分けに使えるツール。


NICの状態を調べるコマンド
# ethtool eth0
Settings for eth0:
       Supported ports: [ TP ]
       Supported link modes:   10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
                               1000baseT/Full
       Supports auto-negotiation: Yes
       Advertised link modes:  10baseT/Half 10baseT/Full
                               100baseT/Half 100baseT/Full
                               1000baseT/Full
       Advertised pause frame use: No
       Advertised auto-negotiation: Yes
       Speed: 1000Mb/s
(略)
設定を変更するコマンド
# ethtool -s eth1 speed 100 duplex full autoneg off

ethtoolで調べてみると、LinuxホストのNICが 1Gbps まで対応しているのに、古いスイッチングハプを使っているせいで Speed: 100Mbps で通信している、なんてことがごくまれだけどある。

ちなみにWindowsの場合はコマンドプロンプト(cmd)で調べたり設定したりするのはかえって手間がかかるみたい。素直にNICを右クリックしてプロパティを開いてください、と。


Perlの 'x' オペレータ(repetition operator)

たとえば Ruby や Python で "4444" という文字列を出力したいときは、'*'演算子を使って次のように書く。

$ ruby -e 'p "4" * 4'
"4444"
$ python -c 'print "4" * 4'
4444

一方、Perlの場合は'x'演算子(アルファベットのx)を使う。

$ perl -e 'print "4" x 4, "\n"'
4444

さらに、リストコンテキストで使った場合はリスト内の要素を複製できる。

perl -e '@a = (1, 2) x 4; print join (":", @a), "\n"'
1:2:1:2:1:2:1:2

ちなみに、この演算子は"perldoc perlop"によると"repetition operator"と呼ばれている。

2012年2月13日月曜日

sesearchコマンドの例(SELinux)

"sesearch" は、SELinuxが動いている環境でポリシー設定を調査するときに使うコマンド。CentOS-6.0の場合は "setools-console" というパッケージに入っている。

コマンドの使用例が "man sesearch" しても出てこないので、ちょっと探してみた。


Redhat Enterprise Linux 6 の User Guide から

ポリシーファイルを指定して、"role allow rule"を検索
# sesearch --role_allow -t httpd_sys_content_t /etc/selinux/targeted/policy/policy.24
※"role allow rule"についてはNSAのドキュメント Policy Language and the Example Policy Configuration に書いてある。
※"-t httpd_sys_content_t"の部分がちょっと謎。"--role_allow"と一緒に指定する意味がわからない。現実的には、ソースやターゲットのロールを指定することが多いと思われる('--role_source', '--role_target')。
# sesearch --role_allow --role_source unconfined_r
Found 1 role allow rules:
  allow unconfined_r system_r;
# sesearch --role_allow --role_target sysadm_r
Found 2 role allow rules:
  allow system_r sysadm_r;
  allow staff_r sysadm_r;
"allow"ルールの総数を調べる
# sesearch --allow | wc -l
"dontaudit" ルールの総数を調べる
# sesearch --dontaudit | wc -l

Gentoo Linux の マニュアル から

shadow_t タイプのファイルへの書き込みが許可されているドメインを調べる
# sesearch -t shadow_t -c file -p write -A
file_type 属性への書き込みが許可されているドメインを調べる('-d' で direct search)
# sesearch -t file_type -c file -p write -A -d
"global_ssp"というSELinux boolean に関連するポリシーを調べる
# sesearch -b global_ssp -A -C -d

日本セキュアOSユーザ会のかたの資料から

httpd_t の httpd_sys_content_t に対する定義を確認する
# sesearch -A -C -s httpd_t -t httpd_sys_content_t

2012年1月15日日曜日

ハードディスクエラーとSMARTのPending sector, reallocated sector

SMARTで"Current Pending Sector Count"が検出されたときに、どう対応すればよいかという話。


Pending sector と reallocated sector、remap の概要

"Pending Sector"は、一言で言うと「不安定なセクタ」。次にアクセスしたときに正常に読み込める可能性もあるので"Remap"は行われないが、Remapされずにずっと不安定なままOSから参照されると dmesg等のログに "1 Currently unreadable (pending) sectors" といったエラーが出力され続けることがある。

エラーを解消するには、セクタをPending状態からremapされた状態、つまり"Reallocated sector"に変化させる必要がある。そのためには、セクタに対して一度書き込みを行えばよい。書き込みを行うことにより"Pending"の状態から"Reallocated"の状態に変化し、remapが行われるようになってエラーが解消する。同時に、SMARTの"Current Pending Sectors Count" が減り、"Reallocated Sectors Count"が増える。

ただし、エラーが解消する代わりにRemap処理はディスクアクセスの性能を落とす可能性がある(論理的に連続している情報が物理的には離れたトラックに配置され、磁気ヘッドのシーク時間が増えるため)。


対応方法

参考ページに書いてある。"hdparm --write-sector /dev/x" を使う方法と "dd if=/dev/zero of=/dev/x bs=4096 count=1 seek=y" を使う方法の二通りがあるが、前者のほうがLBAを直接指定すればよいので簡単かな、と。


Mac OS X: fsck reports benign errors when journaling is turned on

support.apple.com に、MacOS X で fsck のエラーが出ても気にしなくてよいよ、と書いてあった(JHFS+などのジャーナリングファイルシステムを使っている場合の話)。