2012年12月2日日曜日

「日経BP ITPro 今日の腕試し!」地味だけど面白い

ブログ停滞した。軽く書く。

大変失礼なこと書きますが、あか抜けない印象の ITPro のページ。「今日の腕試し!

なぜこのページにたどり着いたのかよく覚えてないけど、とにかくプラットフォーム、レイヤーを問わず雑多な問題が提供されていて面白かった。なぜか微笑がこぼれた。週に一回くらい見てもよいんじゃなかろうか。

2012年10月3日水曜日

ファイバチャネルHDDの40ピンコネクタ

拾い読みしてまとめた。

  • FC-HDDの、40ピンのコネクタはSCA-2に分類される。SCA-40と呼ばれることもある
  • 同じSCA-2で、80ピンのものもある。こちらはSCSI-HDDに用いられる
  • SCA(Single Connector Attachment)の目的の一つは、従来複数に分かれていたSCSIケーブルを1本にすること
  • 分かれていた、信号(68ピン)と電源等をまとめた結果 SCSI-HDD は80ピンになった。FC-HDDのほうは40ピンで済んだ
  • ケーブルが1本にまとまった結果、サーバーやSANストレージのディスク交換作業がちょっと楽になった(ちょっとした気遣いが大事ですよねー。USBコネクタの上下非対称問題とか考えると)

2012年9月14日金曜日

CentOS-6 で使われているTCPの輻輳制御アルゴリズム

/procを使って読み書きができた。CentOS-6(kernel 2.6.32-279)では"CUBIC"がデフォルトになっている模様。

# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

選択肢としては、"reno"もある。

# cat /proc/sys/net/ipv4/tcp_available_congestion_control
cubic reno

2012年9月10日月曜日

CentOS-5 起動スクリプトのスケルトン

'/etc/init.d/' に入れるスクリプトを書こうと思ったとき、そのひな形(スケルトン、テンプレート、等々)を求めてついインターネットを検索してしまう。しかし、無駄にエネルギーを消費する必要はない。システムにあらかじめインストールされているのだった。

そのパスは、'/usr/share/doc/initfiles-x.y.z/sysvinitfiles' のあたり(CentOS の場合)。

2012年9月6日木曜日

Linuxで使用されているNICドライバを調べる方法2つ

いつもの方法
まずdmesgコマンドの出力から'eth0'や'eth1'を探してモジュール名を特定。モジュール名を引数としてmodinfoコマンドを実行し、バージョン等の詳細情報を知る。
今日知った方法
ethtoolコマンドの'-i'オプションを使う(参考URLのコメント欄に書いてあった)。modinfoみたいにたくさんの情報は出力されないが、バージョンとバスは把握できる。

2012年9月3日月曜日

RedHat, CentOS のリリースバージョンを知る方法

すごく簡単なことだけどなかなか覚えられないのでメモっておく。

例)cat /etc/redhat-release 
Red Hat Enterprise Linux Client release 5.2 (Tikanga)

2012年8月30日木曜日

yumdownloader:依存関係を満たすRPMをまとめてダウンロード

yumdownloaderというコマンドがあるんですね(特に'--resolve'オプションが便利)。

LinuxをインストールしたけどNICのドライバがあたらない。yum も使えない、といった状況で役に立つかな? つまり、ドライバのビルドに必要なパッケージを別の計算機でダウンロードして、USBメモリで移す、とか。。。

2012年8月17日金曜日

CentOS-6 の OpenLDAP 環境構築

CentOS-6.3 で LDAPサーバーを作ろうとしたところ、次のようなエラーが出てどうもうまくいかなかった:

  • ldap_bind invalid credentials (49) ldapsearch
  • bdb_db_open no such file or directory

ネットを探してみると、CentOS-6 での OpenLDAP について書いているブログが多数あった。つまりつまずくポイントが色々あるということか:

だが、これらの内容を俯瞰してみるとけっこうバラツキがあって、腑に落ちない感じがした。さらにしつこく探してみると、よく整理された英語のページがみつかった:

"Minimal"とうたっているだけあって必要十分な手順が書いてあり、要所でのテスト(設定途中での動作確認)も理解を助けてくれる。うちの CentOS-6.3 でもうまくいった。

2012年8月10日金曜日

grep -r で再帰的に grep

今日ではないけど最近知った。ずっと find ... | xargs ... を使っていた。

小さい、軽量な、Linux distribution

Small で light weight な Linuxディストリビューション。

Webアプリとかそういうレベルではなくて、OS込みのプロダクトを、要するにハードウェアに直接インストールする形態の製品を提供したいときに使えるんじゃないかと思う。

2012年8月1日水曜日

iMacros と JavaScript を組み合わせて使う

よく使う Firefox add-on のひとつが、 iMacros なるもの(厳密には名前の右肩にTMが付く)。browser-based macro recorder であり、Webブラウザを使った操作を記録&再生することができる。


で、今日メモっておきたいのは、iMacros と JavaScript を組み合わせる方法について。iMacros のマクロはいくつかのコマンドからなっているが(Command Reference - iMacros に掲載されている)、一般的なプログラミング言語が提供するような関数や制御構造、データ構造をもたない。そこを JavaScrpt で補完しよう、という話。


環境は Firefox 14.0.1, iMacros for Firefox 7.5.0.4.

1. マクロを記録
まずは簡単なマクロをひとつ作るため、google.co.jp を開いて検索する操作を記録してみた。そうすると、次の内容のマクロ(#Current.lim)ができた。
VERSION BUILD=7500718 RECORDER=FX
TAB T=1
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT=foo
ここで、fooの部分が検索した文字列に相当する。
2. マクロを編集(変数の導入など)
記録したマクロをもとにして、繰り返し検索を行う処理をJavaScriptで作ることにする。そのための準備としてまずはマクロ "#Current.lim" を "my.lim" にリネーム。それから内容を編集。
第一に、新しいタブを作ってフォーカスを移すための iMacrosコマンド TAB OPENTAB T={{!VAR1}} を追加する。{{!VAR1}} はタブの番号を指定するために導入した変数。
第二に、JavaScriptから指定した文字列で検索を行うことにしたいので、foo{{!VAR2}} と置換。
結果、マクロは次の内容になった。
VERSION BUILD=7500718 RECORDER=FX
TAB OPEN
TAB T={{!VAR1}}
URL GOTO=https://www.google.co.jp/
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:f ATTR=ID:lst-ib CONTENT={{!VAR2}}
TAG POS=1 TYPE=INPUT:BUTTON ATTR=VALUE:Google<sp>検索
3. JavaScriptを作成
とりあえずテキトーにマクロを作って、my.js とリネームしてから編集。 iimSet, iimPlay という2つのインターフェースを利用してJavaScriptを書く。具体的には、マクロに導入した変数 {{!VAR1}} に、タブ番号を iimSet() という関数でセット。それから配列にはいっている文字列 foo, bar, baz を {{!VAR2}} にセット。最後に、iimPlay() で my.lim を実行する。
var a = ['foo', 'bar', 'baz'];
for(var i=0, n=a.length; i<n; i++){
  iimSet("VAR1", i + 1);
  iimSet("VAR2", a[i]);
  iimPlay("my");
}
4. JavaScriptを実行
作成した JavaScript(my.js)を保存して、実行する(Playボタンとか)。うまくいくとタブを新規作成して検索する操作が3回繰り返される。
※空白のタブがひとつできてしまうから、いまひとつなところがあるのかもしれないな。。。

2012年7月7日土曜日

Fedora のインストールメディアとUSBメモリ、Mac OS X で作る

今日、Fedora-17 をうちのPCにインストールした。CD-RW, DVD-RWメディアが手元になかったのでUSBメモリを使った。USBメモリへの書き込みには、MacBook(Mac OS X)を使った。ただそれだけの話。しかしながら、いくつかの情報を必要としたのでメモしておく。


Fedoraをインストールするハードウェアは?

まずはハードウェア、なかでもCPUやマザーボードの仕様が分からないといけない。

CPUはAMD Phenom II 64bit で、マザーボードは ASRock の 880GM-LE。このマザーボードは BIOS を使っているモデル(UEFIではない、という点が重要)。

※ASRockのマザーボードAMD8シリーズのリストはこれ:ASRock AMD8


どのファイルをダウンロードすればよいか?

Fedora の場合、「Full Distribution」, 「Live Image」,「Minimal Boot Media」の3つの選択肢がある。今回は、必要なパッケージをあとから追加するスタイルでゆくから Minimal Boot Media がいい。

Minimal Boot Media のISOファイルは「boot.iso」という名前で配布されており、今回はこれで十分。一方、対象のマザーボードがUEFIを使用している場合は注意が必要で、「efiboot.img」を Full Distribution の中から抽出しなければならないらしい。

boot.iso は配布用サーバーの「fedora/linux/releases/17/Fedora/arch/os/images/boot.iso」といったパスに配置されている。


USBメモリにISOイメージを書き込む

MacにUSBメモリを挿して、ISOイメージを書き込む。Fedoraのドキュンメントにddコマンドを使った方法が掲載されているので、これに基づいてやればよい。Linuxを前提として書かれているが、Macにもddコマンドがあるのでそれほど大きな差はない(Mac OS X のコマンドである diskutil を使う点が異なる)。

2012年7月1日日曜日

Emacs で整数をさまざまな基数(radix, 底)で表現する

整数を2進数や16進数で表す方法は?

リファレンスマニュアルをひいたらちゃんと書いてありました。


The syntax for integers in bases other than 10 uses ‘#’ followed by a letter that specifies the radix: ‘b’ for binary, ‘o’ for octal, ‘x’ for hex, or ‘radixr’ to specify radix radix. Case is not significant for the letter that specifies the radix. Thus, ‘#binteger’ reads integer in binary, and ‘#radixrinteger’ reads integer in radix radix. Allowed values of radix run from 2 to 36. For example:

#b101100 ⇒ 44
#o54 ⇒ 44
#x2c ⇒ 44
#24r1k ⇒ 44

#{radix}rという表現で2から36までの任意の基数を指定できる、という機能は初めて知った。面白い。

ちなみに上の例は Emacs Lisp だけでなくて Common Lisp でも機能した(SBCL-1.0.55 だけど)。しかし、リファレンスからその説明をみつけだすことができなかった。


2012年6月19日火曜日

Google電卓で立方根とか

ある数の累乗根を知りたいとき、Googleでなんて検索すればよいんだろう?

一般形
nth root of x
例(2th, 2nd, 3th, 3rd の違いは許容される)
  • 2th root of 5
  • 2nd root of 5
  • 3th root of 5
  • 3rd root of 5
  • 4th root of 5

平方根

square root x

square root of x

sqrt (x)

sqrt x

立方根

cube root x

cube root of x


2012年6月11日月曜日

coerce関数で型変換

Common Lisp で array を list に変換したいなー、と思って調べたら coerce という関数がみつかった。

CL-USER> (mapcar #'(lambda (x) (1+ x)) (make-array 4))
; Evaluation aborted on #<TYPE-ERROR expected-type: LIST datum: #<(SIMPLE-VECTOR 4) {1271CFBF}>>.
CL-USER> (mapcar #'(lambda (x) (1+ x)) (coerce (make-array 4) 'list))
(1 1 1 1)

Emacs Lisp にもありました。

(car [1 2 3])
Debugger entered--Lisp error: (wrong-type-argument listp [1 2 3])
  car([1 2 3])

(car (coerce [1 2 3] 'list))
1

"coerce"というのは他動詞で「〈人を〉強制[強要]して〔…〕させる 〔into〕」という意味が一番目。辞書を引くとけっこうseriousな例文が出てくる。"They coerced her into signing the contract." 「彼らは無理に彼女にその契約書に署名させた.」



perl -0777 による slurping

Perlでファイルの内容を読み込む場合、普通は1行ずつ処理する。

もし1行ずつ処理する方法が適当でない思ったら、undef $/ することによってファイルの内容をスカラ変数に一気に代入することができる。tこれを"slurping"と呼ぶ。

undef $/;
$whole_file = ;               # 'slurp' mode

Slurping は Perlコマンド実行時のオプション '-0777' でも有効にできる。今日まで知らなかったけど、ワンライナーの場合にすごく便利。

$ cat foo.txt
foo
foo
foo
$ perl -0777 -pe 's/o\nf//g' foo.txt
foooo

'-0'に続く数値は400以上であれば何でもよいのだが、777と書くのが慣例になっているらしい。詳しいことは参考ページに書いてある。


2012年6月7日木曜日

Windows Server 2003 の diskpart ってパーティション縮小(shrink)できない。GParted便利

Windows Server 2003 の diskpart

人生で初めて Windows server 2003(x64)を直接触る仕事を経験。Unix系じゃないサーバー機。ぼくも人生の荒波に揉まれてずいぶん大人になりました。

パーティションを切る必要があったけど、インストールやらネットワーク設定やらWindowsアップデートやらを一通りやった後でいいや、と思っていざやろうとするとできなくて焦った。というのは'diskpart'コマンド自体は入っているんだけど、Win server 2008 と違ってなんだかオプションが少ない。'shrink'も無い。


GParted

最初からやり直すのはしんどいのでいろいろと道具を探した結果、'GParted'というソフトがみつかった。ダウンロードしたISOをCDに焼いてブートして、GUIで自由に(たぶん、自由に)パーティションを設定できるというもの。

最初からやり直しになってもまあいいか、と期待せず使ってみるとこれがとても使いやすかった。そしてパーティション変更後も Windows server 2003 が正常にブートした。感謝。


2012年5月27日日曜日

wget の '--spider' オプションはHEADメソッド

こちら wget –spider = Head Request : alexking.org の記事について。


自分の場合、ブックマーク(リンク集)のリンク切れをまとめてチェックしたいときにwget の '--spider'オプションを使う。このような利用方法のときは特に気にすることはないのだが、何らかのWebアプリケーションを実行したい場合には注意が必要とのこと。

というのは 'wget --spider' がHEADメソッドを実行するよう実装されているので、Webアプリのコードが実行されないことがあるらしい(サーバーの環境や設定に依存するみたいだが)。

GETでアクセスしつつ、ダウンロードされたファイルを自動的に削除したい場合には、'--delete-after'オプションを使うのがよい。

NetHogs - プロセスごとのデータ転送量をtop風に表示

既存のネットワークアプリの転送量を調べるときに使ったソフト。サーバーでこの NetHogs を起動しておいて、クライアント側でアプリのシナリオとかユースケースを1つ実行。サーバーのほうの画面で何バイト送受信したかを見て記録しておく。「なるほどこのシナリオの場合はx[KB]くらい通信するのか」と、だいたいの数字が分かる。

特徴は、転送速度(KB/sec)だけでなく、転送量の累積値が表示されるところ。たぶん初期状態では KB/sec の表示になっているが、実行中に m キーを押せば表示モードが KB/sec, KB, MB, B とサイクリックに切り替わる。

インストールに関しては、libpcap と ncurses に依存している。今回の環境(CentOS-6.0)では、epelリポジトリから yum でインストールできたので特に問題無し。


表示の例

テキトーに sshd と apache にアクセスした場合のキャプチャを貼り付けておく。

まずは Byte単位の表示。

プロセスのIDごとに、USER, PROGRAM, DEV, SENT, RECEIVED が表示される。シンプル。

それから KB/sec 単位の表示。


Windows バッチファイル FOR文での「コマンド置換」

Windowsの .bat ファイルを書いた。そして、dir等のコマンドの出力を、FOR文のパラメータとして指定する方法を知った。


.batファイルの例
拡張子 xml のファイル名を降順ソートで列挙し、後続のコマンド(ここでは単なる echo)に渡すFOR文。

@echo off
for /F "usebackq" %%file IN (`DIR /B /-N *.xml`) DO @echo %%file


Unix系のシェルで言うところのコマンド置換(command substitution)。バッククォート(`)を使う点は共通だ。


2012年3月18日日曜日

ルーティングテーブル(FIB)、ルーティングキャッシュ

LinuxではルーティングテーブルのことをFIB(Forwarding Information Base)と呼ぶ。一度参照されたら routing cache にキャッシュされる。

これらを表示するコマンドは何通りかある。

route コマンド
# route -F
Kernel IP routing table
Destination     Gateway         Genmask          Flags Metric Ref      Use Iface
172.16.78.0     *               255.255.255.0    U     0      0          0 eth0
(略)
# route -C
Kernel IP routing cache
Source          Destination     Gateway         Flags Metric Ref   Use Iface
192.168.105.1   192.168.105.130 192.168.105.130 il    0      0      29 lo
(略)
netstat コマンド
# netstat -r
Kernel IP routing table
(略)
# netstat -rC
Kernel IP routing cache
(略)
ip コマンド
# ip route show
172.168.78.0/24 dev eth0  proto kernel   scope link  src 172.16.78.130
(略)
# ip route show cached
192.168.105.128 from 192.168.105.130 dev eth2
    cache  mtu 1500 advmss 1460 hoplimit 64
(略)

Netfilter Architecture

古いけどわかりやすいドキュメントが netfilter.org の HOWTO の中にあった。

NICとプロセス、ルーティングコードのあいだにフックが5個仕掛けてあって、通過するパケットに関数が作用する。

Linux netfilter Hacking HOWTO: Netfilter Architecture

次のドキュメントも参考になる。

Linux network stack walkthrough

2012年3月4日日曜日

GPG で表示される "2048R" や "usage: SC", "usage: E" の意味

GnuPGで '--edit-key' オプションを使うと鍵の管理作業のためのメニューが出てくる。

$ gpg --edit-key 549B5813
gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There in NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub 2048R/549B5813  created: 2012-01-22  expires: never     usage: SC
                    trust: ultimate      validity: ultimate
sub 2048R/6878DE41  created: 2012-01-22  expires: never     usage: E
sub 2048g/60ACA1A9  created: 2012-01-22  expires: never     usage: E
sub 2048D/29641C08  created: 2012-01-22  expires: never     usage: S
(略)

ここで表示される "2048R" とか "usage: SC" の意味を理解しないでいるとまずそうだから調べてみた、という話。


2048R

これは "The GNU Privacy Handbook" に書いてあった。

The public key is displayed along with an indication of whether or not the private key is available. Information about each component of the public key is then listed. The first column indicates the type of the key. The keyword pub identifies the public master signing key, and the keyword sub identifies a public subordinate key. The second column indicates the key's bit length, type, and ID. The type is D for a DSA key, g for an encryption-only ElGamal key, and G for an ElGamal key that may be used for both encryption and signing. The creation date and expiration date are given in columns three and four. The user IDs are listed following the keys.

要するに数字の部分が鍵のビット長、残りのアルファベット1文字が鍵の種類を表す。R なら RSA、D なら DSA、g なら 暗号化専用の ElGamal、G なら 暗号化と署名両方に使える ElGamal(このハンドブックは1999年の古いものなのでRSAについて言及していないが)。

"2048g"


usage: SC とか

なんとなく "S" は Sign で "E" は Encrypt だろうと予想が付いているものの、調べてみると同じ疑問をもった人がいた。

How are the GPG usage flags defined in the key details listing? - Unix and Linux - Stack Exchange

回答によれば "S" が "for signing", "E" が "for encrypting", "C" が "Creating a certificate"(たとえば Revocation certificate: 失効証明書とか?), "A" が "authentication"とのこと(SSHやTLSにおける認証で使えるらしい)。


2012年3月1日木曜日

dd コマンドでファイルを読み書き

ddコマンドはディスクのバックアップやダンプに使われることが多いので、コピー専用のコマンドだと思っていたことがある。

実際はそうではなくて、もっと軽い用途、たとえば標準入力から読み込んだ内容をファイルに書き込んだり、ファイルを読み込んで標準出力に出力したりすることもできる。


入力した内容をファイルに出力
'of'オプションで出力先を指定しつつ ddを実行すると入力待ちになる。そこで任意の文字とEOF(Ctrl-D)を入力すれば、ファイルができる。
$ dd of=hello.txt
hello, world
0+1 records in
0+1 records out
13 bytes transferred in 2.835518 secs (5 bytes/sec)
$ cat hello.txt
hello, world
$
ファイルの内容を表示
'if'でファイルを指定するだけ。
$ dd if=hello.txt 
hello, world
0+1 records in
0+1 records out
13 bytes transferred in 0.000138 secs (94173 bytes/sec)
$
ディスクなどのブロックデバイスファイルの場合も同様に表示できる。ただしサイズが大きいので 'bs' や 'count' オプションで調節する。
$ sudo dd if=/dev/disk0 bs=5 count=1  # MacOS requires root privilege to read /dev/disk0
?1???1+0 records in
1+0 records out
5 bytes transferred in 0.000334 secs (14969 bytes/sec)
$

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+などのジャーナリングファイルシステムを使っている場合の話)。


Mac OS X: diskutil -- Modify, verify and repair local disks.

Mac OS にインストールされている、ディスクユーティリティコマンド。ディスク状態の確認、パーティションの作成、マージなどに使える。

diskutil によると、このコマンドはAppleが用意したもので、普通のBSDには入っていないらしい。


自分が使ったものだけメモしておく。

diskutil list
ディスクと、ディスク内のパーティションを一覧表示。
$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *250.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            249.7 GB   disk0s2
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:        CD_partition_scheme Gateway                *442.3 MB   disk1
   1:                      CD_DA                         75.3 KB    disk1s0
   2:                      CD_DA                         83.6 MB    disk1s1
   3:                      CD_DA                         23.5 MB    disk1s2
   4:                      CD_DA                         117.1 MB   disk1s3
   5:                      CD_DA                         51.5 MB    disk1s4
   6:                      CD_DA                         50.7 MB    disk1s5
   7:                      CD_DA                         115.8 MB   disk1s6
SATAのHDD(disk0)と、CD-ROM(disk1)を認識しているのが分かる。
disk0 は"GUID_partition_scheme"というTYPEになっているので、MBRではなくGPTが書かれているのが分かる。
disk1 のほうは"Gateway"という名前になっているが、これは "Amazon.com: Gateway: John Abercrombie, Dave Holland, Jack Dejohnette: Music" という音楽作品である。
diskutil info
ディスクまたはパーティションの詳細情報を表示。次の実行例は、"SMART"情報だけを grep したもの。
$ diskutil info disk0|grep SMART
   SMART Status:             Verified
diskutil mergePartitions
パーティションをマージする。ファイルシステムと名前、マージするパーティション(複数)を引数で与える。最初に指定したパーティション以外のパーティションは消える。"JHFS+" は Journaled HFS+ のこと。
# diskutil mergePartitions JHFS+ new disk0s2 disk0s3