( 章目次へ >> )
| ||||||||||||
第8章 セキュアWindows プログラミング
| ||||||||||||
|
|
![]() |
||||||||||
![]()
NTFS はその名の通り,Windows NT のファイルシステムである。Windows NT の開発が進められる過程でこれまでのパーソナルコンピュータとは一線を画した(1994 年当時としては)高度で信頼性の高いファイルシステムを実現し,その上で稼動するWindows NT の信頼性そのものを高める目的で作られたものである。
(注1・NTFS 1.1 は通称NTFS 4.0 とも呼ばれている。Windows NT 4.0 に搭載されていることとNTFS 5.0 と対比されることが多いためである。NTFS 5.0 は正式なバージョン番号である。)
![]()
NTFSがもつセキュリティ機能は,アクセスコントロールリスト(ACL)によるきめ細かなアクセス制御,監査ログ機能,データの暗号化などであるが,その中で最も重要なものは,最初に挙げたアクセス制御である。NTFSのアクセス制御はWindows NTカーネルが実現しているOS の機能と直結したものだ。
図1 ACL のイメージ
![]()
許可したり禁止したりするアクセスの種類も,読み出し,書き込み,削除,実行,ディレクトリの参照に加え,細かなオプションがある。Windows2000などのユーザインタフェースにはあまり多くの項目は表示されないが,システム内部では32ビットのビットパターンでアクセスの種類が表現されている(表1)
表1 ファイルのアクセス権(アクセスの種類)
![]()
DACL と SACL
NTFSのACLには実は2種類ある。上記でACLと呼んでいるものは,厳密にはDACL(Descretionary Access Control List)と呼ばれるものだ。もう一つのACLはSACL(System Access Control List)と呼ばれる。SACL はアクセス監査ログを記録する条件を記述するものである。この記事では簡略化して,DACL のことをACL と呼んでいる。
![]()
Windows 2000 やNT を対象としたアプリケーションを開発の現場では,特定のデータ処理で利用しようとしたファイルにアクセス許可がなくてプログラムがうまく動かない,といった問題に遭遇することがある。
図2 アクセス権設計: 権限の分離と絞り込み
![]() ![]()
ファイルシステムのファイルといえば「一つのいれもの」としてしばしば捉えられるが,実はNTFS のファイルはそれ以上の収容能力を持っている。NTFS のファイルは一つのファイルの下に複数のデータストリームを保持できるのである。いわば「ファイルの中に複数のファイルがある」といった構図だ(図3)。
図3 NTFS のファイルは複数のデータストリームをもてる
![]()
ふだんわれわれがデータをファイルに保存するとき,NTFS のファイルがもつことのできるデータストリームのうち一つしか使っていないのである。
(ここに,d:\dir\ = ディレクトリ,file.ext = ファイル名,stream = ストリーム名 である) ![]()
ファイルの主内容を保持する無名ストリームは「主ストリーム」(prime stream),それ以外の名前を持つストリームは「副次ストリーム」(alternate stream)とそれぞれ呼ばれる。副次ストリームはこれまであまり目立つ場所で使われてこなかった。Macintoshに対するファイルサーバ機能や,Windows 2000で各ファイルにさまざまなプロパティを記録できる機能がその少ない実例である。
(注2・バックアップAPIを使ってストリームを取り扱う手法については,参考文献に挙げたWebページ『プログラマから見たNTFS 2000 Part1: ストリームとハードリンク』をご覧いただきたい。)
![]()
上で主ストリームは「無名」であると述べたが,技術的には主ストリームに名前を指定して呼び出すことが可能だ。ストリーム名として「:$DATA」を指定するのである。ファイルfoo.txtの主ストリームを参照する名前は,区切りのコロン(:)がさらに加わり次のような形になる。
(注3・Windows のパス名についてはNTFS のストリーム名以外にも注意すべき点がいくつもある。それらについては関連記事『8-1. Windows パス名の落とし穴』をご覧いただきたい。)
![]()
NTFSは高度かつ高信頼性のオペレーティングシステムの稼動を目的として開発されたファイルシステムである。NTFSがもつアクセスコントロール機能はしばしばプログラムの動作を邪魔する存在でもあるが,簡単にそれを迂回させるとセキュリティが弱まってしまう。逆にこれはうまく活用すべきものである。また,副次ストリームのような普段利用しない機能も常に有効になっており,思わぬ問題が生じないようパス名の取り扱いには配慮が必要である。
関連記事
参考文献
『インサイドWindows NT 第2版』, David A. Solomon著,有限会社東京ネットワーク情報サービス訳, 1998年,日経BP ソフトプレス
『NTFS 5.0 ファイルシステムの新しい機能』
『プログラマから見たNTFS 2000 Part1: ストリームとハードリンク』
『Insider's Computer Dictionary: “Windows”』
『CreateFile』(Win32 API ドキュメント)
『Inside Windows NT, Second Edition』(英文),David A. Solomon 著,1998 年,Microsoft Press
(『インサイドWindows NT 第2版』の原書)
『Inside Microsoft Windows 2000, Third Edition』(英文),
David A. Solomon,Mark Russinovich 著,2000 年,Microsoft Press
『The Evolution of NTFS: NTFS 1.1』(英文)
![]() |
||||||||||||