1    プログラマ向けセキュリティ機能の概要

この章では,トラステッド Tru64 UNIX システム上でのトラステッド・アプリケーションの実行に関連する事項について説明しています。ライブラリ,ヘッダ・ファイル,標準のトラステッド・システム・ディレクトリ,およびトラステッド・コンピューティング・ベース (TCB) について記述しています。この章およびこの章以降では,C プログラムの一部や全体を使用して,基本的な考え方を説明します。変更せずに使用できるプログラムも記載されていますが,これらのルーチンを集めても,トラステッド・プログラムを構築することはできません。

本書で説明するプログラミング技法のほかに,次の技法も使用できます。

この章では,次の内容について説明しています。

この章およびこの章以降では,C プログラムの一部や全体を使用して,基本的な考え方を説明します。変更せずに使用できるプログラムも記載されていますが,これらのルーチンを集めても,トラステッド・プログラムを構築することはできません。

1.1    セキュリティ・プログラミングの概要

トラステッド・コンピューティング・ベース (TCB) を誤って変更しないように,保護しなければなりません。そのためには,どのプログラムとデータ・ファイルが TCB の一部なのかをまず定義します。以下に,TCB の構成要素について説明します。

1.1.1    TCB ファイルの保護

以下の各メカニズムは,TCB のファイルとディレクトリを保護する方法を提供しています。

1.1.2    セキュア・アプリケーション

Tru64 UNIX では,セキュリティ統合アーキテクチャ (SIA: Security Integration Architecture) を提供しています。このアーキテクチャは,ローカル・セキュリティ認証メカニズムおよび分散セキュリティ認証メカニズムを,オペレーティング・システム上に階層化可能にします。SIA 構成フレームワークは,セキュリティを扱うコマンドを,特定のセキュリティ・メカニズムから切り離します。詳細については,『セキュリティ・ガイド』の「SIA インタフェースの使用 」の章と, sia*(3) のリファレンス・ページを参照してください。

また,『セキュリティ・ガイド』の「プログラマ向けセキュリティ・ガイド」でも,トラステッド・プログラムの作成に関する詳細を説明しています。

1.2    ライブラリとヘッダ・ファイル

システムのドキュメントには,すべての新しいセキュリティ・システム・コール (セクション 2) とルーチン (セクション 3) のリファレンス・ページが含まれています。

ライブラリ libsecurity.solibaud.alibaud.solibpacl.a,および libpacl.so には,新しく拡張されたセキュリティ・インタフェースのバイナリがあります。これらのライブラリをプログラムにリンクするには,-l コンパイル・オプションを使います。たとえば,次のように使用します。

$ cc ... -lsecurity -ldb -lm -laud ...

プログラムには,いくつかのヘッダ・ファイルを取り込む (インクルードする) 必要があります。このヘッダ・ファイルには,Tru64 UNIX セキュリティ・インタフェースを使うのに必要な定義 (定数,マクロ,構造体,ライブラリ・インタフェースなど) があります。従来の UNIX の慣例に従い,すべての Tru64 UNIX システム・コールとライブラリのリファレンス・ページでは,そのルーチンを使うために必要なヘッダ・ファイルを示しています。多くの場合,次の各ヘッダ・ファイルを,次の順序で使用します。

<sys/secdefines.h>

システムのセキュリティ構成を決定するコンパイル定数を定義します。 このファイルは,必ず最初にインクルードする必要があります。

<sys/security.h>

一般的な定義を格納しています。このファイルは,ほとんどの場合にインクルードする必要があります。

<sys/acl.h>

アクセス制御リスト用です。このファイルは,アクセス制御リストを操作する場合に必要です。

<prot.h>

認証データベースと Tru64 UNIX 保護サブシステムを定義しています。プログラムで認証データベースをアクセスする場合に必要です。

<sys/audit.h>

セキュリティ監査インタフェースの監査サブシステム定数を定義しています。監査レコードを生成または処理する場合に必要です。

<protcmd.h>

Tru64 UNIX で提供されるトラステッド・コマンド用のその他の定義がいくつかあります。多くの場合,これらの定義は必要ありません。

<sia.h>

SIA の定数,構造体,およびマクロ定義があります。

<siad.h>

インタフェースおよびセキュリティ・メカニズムで内部的に使用する,SIA の定数,構造体,およびマクロ定義があります。

1.3    標準のトラステッド・システム・ディレクトリ

Tru64 UNIX では,セキュリティ情報を格納するためにいくつかのディレクトリが定義されています。これらのファイルとディレクトリの説明は,リファレンス・ページで参照できます (特にリファレンス・ページのセクション 4)。

標準のトラステッド・システム・ディレクトリ内に,新たにファイルおよびディレクトリを作成することが必要な場合もあります。通常,これらのツリーにファイルを置くときは,新しいディレクトリを作成する必要があります。このようなファイル用として作成されているディレクトリの場合以外は,既存のディレクトリに新しいファイルを置かないでください。表 1-1 は,使用する可能性のあるディレクトリを示しています。

表 1-1:  標準のトラステッド・システム・ディレクトリ

ディレクトリ 内容
/tcb/bin,/usr/tcb/bin 直接実行されるトラステッド・コマンドおよびデーモンが置かれます。
/tcb/lib コマンド行からは起動されず,他のトラステッド・プログラムから実行されるプログラムが置かれます。
/tcb/files トラステッド・コンピューティング・ベース (TCB) で使用する制御ファイル,データベース,およびスクリプトが置かれます。必要に応じて,保護サブシステム用にこのディレクトリのサブディレクトリを定義することができます。
/var/tcb /tcb ディレクトリの代替ディレクトリです。

1.4    セキュリティに関連するシステム・コールとライブラリ・ルーチン

以降の項の表では,プログラマから見てセキュリティに関連する Tru64 UNIX システム・コールとライブラリ・ルーチンを示しています。

ただし,これらの項で扱っていないシステム・コールとライブラリ・ルーチンについても,セキュリティに関連するものがあります。

システム・コールやライブラリ・ルーチンを誤って使用し,セキュリティに対する配慮が行われなければ,コンピュータ・システムのセキュリティが脅やかされる可能性があります。たとえば,特権プロセスからシステム・コールが呼び出された場合,ファイル・アクセス許可はチェックされません。最終的には,プログラマがプログラムのセキュリティに関して責任を持つことになります。

1.4.1    システム・コール

表 1-2は,プログラマから見てセキュリティに関連するシステム・コールを示しています。

表 1-2:  セキュリティに関連するシステム・コール

カテゴリ システム・コール
ファイル制御 creatopenfcntlreadmknod [脚注 1]write
プロセス制御 fork, sigpauseexecvesigsetmasksetpgrp [脚注 1], sigvecsigblock
ファイル属性 accesschroot [脚注 1], ,chmod [脚注 1], statchown [脚注 1], ,umask
ユーザ ID とグループ ID getegidgetuidgetgid, setgroups [脚注 1], geteuidsetreuid [脚注 1]
監査 audcntl [脚注 1], audgen [脚注 1]
汎用 syscall

1.4.2    ライブラリ・ルーチン

ライブラリ・ルーチンは,プログラムから呼び出せるシステム・サービスです。多くのライブラリ・ルーチンでは,システム・コールを使用します。表 1-3は,セキュリティに関係する Tru64 UNIX ライブラリ・ルーチンを示しています。

表 1-3:  セキュリティに関連するライブラリ・ルーチン

カテゴリ ライブラリ・ルーチン
ファイル制御 fopen,popen
パスワード処理 getpass,putpwent,getpwnam,setpwent,getpwent,endpwent,getpwuid,passlen,pw_mapping,randomword,time_lock
プロセス制御 signal