第11回 HFS Plus独自の機能【後編】Undocumented Mac OS X(2/2 ページ)

» 2007年10月16日 00時00分 公開
[白山貴之,ITmedia]
前のページへ 1|2       

拡張属性(EA)とアクセスコントロールリスト(ACL)

 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

実行例1  ACLはデフォルトでは無効となっており、fsaclctlコマンドで有効化できる。ACLの設定は「+a」または「-a」オプションをつけてchmodコマンドを実行し、参照には「-e」オプションとともにlsコマンドを使う
リスト2

 EAは、Tigerではデフォルトで有効になっており*、listxattr(2)、getxattr(2)といった関数で属性を取得、setxattr(2)で設定できる。リスト2はファイルの属性を取得し、表示する簡単なサンプルで図1はその実行結果だ。

リスト2 ファイルの属性を取得し、表示する簡単なサンプルgetattr.c(編集部注:リスト1は画像として用意しました。上記アイコンをクリックいただくことでご覧いただけます)
図1 図1 リスト2の実行結果画面

 EAとACLの実装には、HFS独特のフォークの仕組みが流用されている。前回説明したとおり、HFS Plusでは、データフォークとリソースフォーク以外にもより多くのフォークを持てるように設計されていた。旧来のMac OSではそれを活用するだけの能力がOSになかったため使われることがなかった領域だが、ここを活用しEAやACLの情報をそれぞれ小さなフォークとして格納している(図2)

図2 図2 アトリビュートファイルによるフォークの実現

EAの活用

 一方、従来リソースフォークやFinder情報へのアクセスは、CarbonフレームワークがMac OS X独自のシステムコールを呼び出したり、パスを流用することで実現していたが、EAの実装に伴いリソースフォークやFinder情報も拡張属性の1つとしてとらえ直され、リソースフォークはcom.apple.ResourceFork、Finder情報はcom.apple.FinderInfoという名称のEAとして標準的なシステムコールでアクセスできるようになった。このため、EAに対応したソフトウェアならばHFS独自のそうした属性を正しく扱えるようになった。Tigerからはmv、cpといったコマンドでリソースフォークやカスタムアイコン、ラベルの色などを正しく扱えるようになったのはこのおかげである。

HFS Plusの今後

 これまで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 拡張(大文字小文字を区別、ジャーナリング)」を選んだときのみ使用される。

このページで出てきた専門用語

EAはTigerではデフォルトで有効になっており

正確には、ACLと異なり無効化できない。

Mac OS 8.1でマウントできる

ただし、Jaguar以前のOSではジャーナリングが有効にならず、ただのHFS Plusボリュームとして扱われるなどの制限はある。

cvsコマンドをソースからビルドできない

CVSディレクトリとビルドの結果生成されるcvsコマンドの名前が大文字小文字で衝突するため。


本記事は、オープンソースマガジン2006年4月号「Undocumented Mac OS X」を再構成したものです。


関連キーワード

Mac | Mac OS X | UNIX | アクセス制御 | アルゴリズム | Apple


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ