Tigerで追加されたのが、拡張属性(Extended Attribute)とアクセスコントロールリスト(Access Control List)だ。この2つの概念自体はすでに商用UNIXではお馴染みのものだろう。
簡単に説明すると、ファイル名やパーミッション、作成日時や更新日時、所有者とグループといった、あらかじめ決められた属性以外に、ファイルの内容により即した属性をユーザーやアプリケーションが自由に割り振れるようにするというのがEAである。また、これまでの所有者、グループ、それ以外に読み、書き、実行を割り振るという大雑把なパーミッションに対して、指定ユーザーやグループに対して個々にアクセス権を割り振るという、より詳細なアクセスコントロールを実現するのがACLだ(実行例1)。
$ sudo /usr/sbin/fsaclctl -p / -e
Password:
$ ls -le getattr.c
-rw-r--r-- 1 osm osm 1232 5 17 16:54 getattr.c
$ chmod +a "admin allow delete" getattr.c
$ ls -le getattr.c
-rw-r--r-- + 1 osm osm 1232 5 17 16:54 getattr.c
0: group:admin allow delete
EAは、Tigerではデフォルトで有効になっており*、listxattr(2)、getxattr(2)といった関数で属性を取得、setxattr(2)で設定できる。リスト2はファイルの属性を取得し、表示する簡単なサンプルで図1はその実行結果だ。
EAとACLの実装には、HFS独特のフォークの仕組みが流用されている。前回説明したとおり、HFS Plusでは、データフォークとリソースフォーク以外にもより多くのフォークを持てるように設計されていた。旧来のMac OSではそれを活用するだけの能力がOSになかったため使われることがなかった領域だが、ここを活用しEAやACLの情報をそれぞれ小さなフォークとして格納している(図2)。
一方、従来リソースフォークやFinder情報へのアクセスは、CarbonフレームワークがMac OS X独自のシステムコールを呼び出したり、パスを流用することで実現していたが、EAの実装に伴いリソースフォークやFinder情報も拡張属性の1つとしてとらえ直され、リソースフォークはcom.apple.ResourceFork、Finder情報はcom.apple.FinderInfoという名称のEAとして標準的なシステムコールでアクセスできるようになった。このため、EAに対応したソフトウェアならばHFS独自のそうした属性を正しく扱えるようになった。Tigerからはmv、cpといったコマンドでリソースフォークやカスタムアイコン、ラベルの色などを正しく扱えるようになったのはこのおかげである。
これまでMac OS Xで行われたHFS Plusの改善は性能的なものにとどめられ、互換性を損なう改善は控えられてきた。HFS Plusとしての後方互換性が保たれているため、Tigerで作成された、EAやACLが使用されているジャーナリングを有効にしたHFS Plusボリュームであっても、旧来のMac OS 8.1でマウントできる*。
ただ、この互換性維持のために、HFSに由来する大文字小文字を区別しないなどの仕様もそのまま保たざるを得なかった。パーソナル用途ではともかく、エンタープライズ用途ではそうした時代遅れの仕様があだになることもある。UNIXユーザーとしては、HFS PlusではMakefileとmakefileが共存できない、cvsコマンドをソースからビルドできない*などちょっとした問題がある。
HFS Plusのそうした後方互換性の制約を超えてさらに機能を強化したものが、HFS Xだ。HFS XはHFS Plusとほぼ同様の構造を持つが、ボリュームヘッダに記録される署名やバージョンが異なるため、もはやMac OS 9ではマウントできない。互換性を捨てた代わりにHFS Xはさまざまなオプションの追加が可能となっている。
そして現在のところ、HFS Xでは大文字小文字を区別するCase sensitiveオプションのみ定義されており、ディスクユーティリティからフォーマットとして「Mac OS 拡張(大文字小文字を区別)」もしくは「Mac OS 拡張(大文字小文字を区別、ジャーナリング)」を選んだときのみ使用される。
正確には、ACLと異なり無効化できない。
ただし、Jaguar以前のOSではジャーナリングが有効にならず、ただのHFS Plusボリュームとして扱われるなどの制限はある。
CVSディレクトリとビルドの結果生成されるcvsコマンドの名前が大文字小文字で衝突するため。
本記事は、オープンソースマガジン2006年4月号「Undocumented Mac OS X」を再構成したものです。
Copyright © ITmedia, Inc. All Rights Reserved.