このドキュメントは Linux で安全性が求められるプログラムを書く場合に 必要になる設計と実装のしかたについて、そのガイドラインを示します。 このドキュメントの目的は、「安全なプログラム」です。安全なプログラムとは セキュリティの防護壁となっており、プログラム自身と同じアクセス権限を持って いない入力先からの入力を受け取るプログラムのことです。 そのようなプログラムとして、接続先に存在するデータを見るためのアプリケー ション、CGI スクリプト、ネットワーク関連のサーバー、setuid/setgid されて いるプログラムなどがあげられます。 このドキュメントでは、Linux のカーネル自体の修正は取扱いませんが、ここで 議論される手法の多くはカーネルの修正にも有効です。 これらのガイドラインは、安全なプログラムを書くための様々な情報(著者自身の 考えも含まれています)から「教訓として学んできたこと」を整理して、原則の 集大成としてまとめ直したものです。
このドキュメントでは、安全についての保証基準やソフトウエア工学の手法、 品質保証の手法は扱いません。それらは大切なことですが、すでに他のところ で広く論じられています。 これらの手法には、テスト、ピア・レビュー、コンフィギュレーション管理、 フォーマルメソッドがあります。セキュリティについての開発時の保証基準 については、the Common Criteria [CC 1999] や the System Security Engineering Capability Maturity Model [SSE-CMM 1999] などがあります。 ソフトウエア工学の手法については、Software Engineering Institute's Capability Maturity Model for Software (SE-CMM) や ISO 9000 (ISO 9001 と ISO 9001-3 と合わせて参照のこと)、ISO 12207 などに詳しく書かれています。
訳註:
このドキュメントは、読者のみなさんがコンピュータの安全性について おおよそ理解しており、UNIX ライクなシステムのセキュリティ・モデルや C に ついても理解していることを前提としています。 また、セキュリティに関連する Linux のプログラミング・モデルについても若干 ですが解説しています。
このドキュメントの原本は http://www.dwheeler.comにあります。 また Linux Documentation Project (LDP) http://www.linuxdoc.org にも含まれています(LDP 版は、原本よりも古い可能性があります)。
このドキュメントは David A. Wheeler が著作権((C) 1999-2000 David A. Wheeler) を保持しています。また GNU General Public License (GPL) によってその権利は 保護されています。詳しいことはこのドキュメントの最後のセクションを参照して ください。
このドキュメントはまず Linux の背景とそのセキュリティについて論じます。 次のセクションでは、一般的な Linux のセキュリティ・モデルについて、 プロセスやファイルシステム等を対象に、その属性と取扱い方を一通り見ていき ます。 その次にこのドキュメントの中心となる Linux 上でのアプリケーション開発の設計 と実装についてのガイドラインを説明します。この中では下記の項目を取り上げて います。