Next: , Up: Changing the Current Working Directory


8.2.1.1 O_NOFOLLOW

システムがopen(2)システムコールのO_NOFOLLOWフラグをサポートする 場合1findは安全にディレク トリを変更するとき使用します.目的となるディレクトリは最初にオープンさ れ,findfchdir()システムコールで作業ディレクトリを変更 します.これで,シンボリックリンクは確実にたどられなくなり,シンボリッ クリンクの作成を使用する競合状態の攻撃の類は避けられます.

なんらかの理由でこの手法が動作しない場合,findはO_NOFOLLOWがサポー トされていない状況で一般的に使用される手法に戻ります.

以下を実行することで,システムがO_NOFOLLOWをサポートしてかどうか分かり ます.

     find --version

これで,バージョン番号と利用可能な機能が表示されます.例えば,私のシス テムでは以下のようになります.

     GNU find version 4.2.18-CVS
     Features enabled: D_TYPE O_NOFOLLOW(enabled)

ここで,実行しているfindのバージョンがfindutils-4.2.18の前の リリースの開発(CVS)コードからビルドされたことと,D_TYPEとO_NOFOLLOWの機 能が存在することが分かります.O_NOFOLLOWは“enabled”であると分かります. これは,現在のシステムでO_NOFOLLOWをサポートしているらしいことを,簡単 に示しています.システムでビルドされたfindがO_NOFOLLOWを定義 していて,O_NOFOLLOWフラグを無視するシステムで実行されている可能性があ るので,この調査は必要です.我々は,開始時にオペレーティングシステムと バージョン番号を調査することで,そのような状況の検出を試みます.このよ うな状況では,“O_NOFOLLOW(disabled)”を代わりに見ることになります.


脚注

[1] GNU/Linux (kernel version 2.1.126 以降)そしてFreeBSD (3.0-CURRENT 以降)はこれをサポートします