1


フレームワーク関数

この章では、フレームワーク関数の使用、追加、変更、および削除について説明します。フレームワーク関数を使用すると、ソースコードを変更せずに Solaris Security Toolkit ソフトウェアの動作を柔軟に変更することができます。

フレームワーク関数は、新しい終了スクリプトと監査スクリプトの開発に必要なコーディング量を制限し、共通機能の一貫性を維持するときに使用します。たとえば、共通のログ関数を使用することで、新しいソースコードを開発したり、既存のソースコードを変更したりすることなく、レポートメカニズムを構成することができます。同様に、この共通関数のモジュール化コードを使用すれば、バグや拡張機能をより体系的に処理することもできます。

さらに、フレームワーク関数では元に戻すオプションも使用できます。たとえば、cpmv コマンドの代わりにフレームワーク関数 backup_file を使用すると、元に戻す処理時に操作を復元できます。

この章では、以下の項目を説明します。


フレームワーク関数のカスタマイズ

Solaris Security Toolkit ソフトウェアはモジュラーフレームワークをベースにしており、このフレームワークは、組織のニーズに合ったさまざまな方法で組み合わせることができます。しかし、時には Solaris Security Toolkit ソフトウェアが提供している標準機能が、実際の使用環境のニーズに合っていないこともあります。フレームワーク関数をカスタマイズすることによって標準機能を補完すれば、Solaris Security Toolkit ソフトウェアが提供している機能を強化および拡張することができます。フレームワーク関数で行うのは、Solaris Security Toolkit ソフトウェアの実行方法の設定、使用する関数の定義、および環境変数の初期化です。

多くの場合、簡単に標準のフレームワーク関数のファイルとスクリプトをコピーして、用途に合わせて機能をカスタマイズすることができます。たとえば、user.run ファイルを使用すると、標準のフレームワーク関数を追加、変更、置換、または拡張できます。user.run ファイルは、user.init ファイルが環境変数の追加または変更に使用できることを除けば、user.init ファイルと目的は同じです。

場合によっては、新しいフレームワーク関数を作成する必要があります。その場合、類似したフレームワーク関数をコーディングの手引きやテンプレートとして利用し、このマニュアルに記載されている推奨事項に従ってください。フレームワーク関数の作成は、Solaris Security Toolkit ソフトウェアの設計および実装に精通しているユーザーだけが行うようにしてください。



caution icon

注意 - 独自のフレームワーク関数を作成するときは、特に慎重に行ってください。誤ったプログラム作成を行うと、Solaris Security Toolkit ソフトウェアの、変更を正しく実装したり元に戻す機能、あるいはシステム構成の監査を行う機能に障害が生じることがあります。さらには、ソフトウェアに行った変更によって、ソフトウェアが実行されている対象プラットフォームに悪影響を及ぼす場合もあります。



標準のフレームワークをカスタマイズすることによって Solaris Security Toolkit の機能を拡張する方法を、コード例 1-1 に示します。この例では、JumpStart インストール時に開発者が追加ファイルシステムをマウントできるように mount_filesystems 関数を変更しています。mount_filesystems 関数は、driver.funcs スクリプトから user.run ファイルに直接コピーします。関数の変更は、行番号 8 と 9 で行っています。

コード例 1-1 フレームワークのカスタマイズによる機能の拡張

1   mount_filesystems()
2   {
3      if [ "${JASS_STANDALONE}" = "0" ]; then
4         mount_fs ${JASS_PACKAGE_MOUNT} ${JASS_ROOT_DIR} \
5            ${JASS_PACKAGE_DIR}
6         mount_fs ${JASS_PATCH_MOUNT} ${JASS_ROOT_DIR} \
7            ${JASS_PATCH_DIR}
8         mount_fs 192.168.0.1:/apps01/oracle \
9            ${JASS_ROOT_DIR}/tmp/apps-oracle
10     fi
11  }

コードを簡潔にするために、新しいファイルシステムのマウントに使用する変数を Solaris Security Toolkit 環境変数に変換していません。移植性と柔軟性を持たせるためには、環境変数を使用して実際の値を抽象化してください。これにより、製造、品質保証、開発などの要件が異なる環境にもソフトウェアが配備されるようになるため、変更に一貫性を持たせることができます。



注 - このマウントポイントを使用している終了スクリプト内に同じ機能を実装すれば、ファイルシステムのマウント、使用、アンマウント機能をすべてスクリプト内に埋め込むことは可能です。しかし、複数のスクリプトが単一ファイルシステムを使用している場合には、mount_filesystems を使用した方がより効果的かつ効率的にファイルシステムをマウントできます。





caution icon

注意 - mount_filesystems を変更した場合のマイナス面は、Solaris Security Toolkit ソフトウェアのアップデート版のインストール時に mount_filesystems を再度変更する必要があることです。




共通のログ関数の使用

以下の関数は、すべてのログ関数とレポート関数を制御する関数で、Drivers ディレクトリの common_log.funcs ファイルに格納されています。ログ関数とレポート関数は、Solaris Security Toolkit ソフトウェアのすべての操作モードで使用されるため、共通関数と見なされます。たとえば、このファイルには logWarninglogError などの共通関数が含まれています。

ここでは、以下の共通ログ関数について説明します。

logBanner

この関数は、バナーメッセージを表示します。通常、このメッセージは、ドライバ、終了スクリプト、監査スクリプトによる出力の前に表示されます。また、バナーメッセージは実行の開始時と終了時に使用され、ログ詳細レベルが 3 以上の場合にのみ表示されます。詳細レベルについての詳細は、第 6 章を参照してください。

バナーメッセージは、次の 2 つの書式になります。この関数に空の文字列を渡した場合は、一行区切り文字が 1 つ表示されます。多くの場合、この行は、表示される出力に強制的に「ブレーク」を入れるときに使用されます。1 つの文字列値を入力した場合は、一行区切り文字が表示されている 2 つの行の間に表示されます。バナーメッセージの例を、コード例 1-2 に示します。

コード例 1-2 バナーメッセージ例

================================================================
Solaris Security Toolkit Version: 4.1
Node name:                        imbulu
Host ID:                          8085816e
Host address:                     192.168.0.1
MAC address:                      0:0:80:85:81:6e
OS version:                       5.9
Date:                             Wed Jan  1 22:27:15 EST 2003
================================================================

バナーメッセージは、JASS_LOG_BANNER 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logDebug

この関数は、デバッグメッセージを表示します。この関数は、デバッグメッセージとして表示する単一文字列を引数として受け取ります。デフォルトでは、デバッグメッセージは Solaris Security Toolkit ソフトウェアでは表示されません。この機能は将来の使用のためと、開発者がデバッグログメッセージをコードに追加するときのために用意されています。詳細レベルが 4 以上の場合にのみデバッグメッセージが表示されます。詳細レベルについての詳細は、第 6 章を参照してください。

logError

この関数は、エラーメッセージを表示します。この関数は、エラーメッセージとして表示する単一文字列値を引数として受け取ります。エラーメッセージとは、文字列 [ERR ] が含まれているメッセージのことです。

使用例 :

logError "getScore:Score value is not defined."

出力例 :

[ERR ] getScore:Score value is not defined.

エラーメッセージは、JASS_LOG_ERROR 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logFailure

この関数は、失敗メッセージを表示します。この関数は、失敗メッセージとして表示する単一文字列値を引数として受け取ります。失敗メッセージとは、文字列 [FAIL] が含まれているメッセージのことです。

使用例 :

logFailure "Package SUNWatfsr is installed."

出力例 :

[FAIL] Package SUNWatfsr is installed.

失敗メッセージは、JASS_LOG_FAILURE 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logFileContentsExistlogFileContentsNotExist

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数はともに、ファイル内容のチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileContentsExist 関数および check_fileContentsNotExist 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logFileContentsExist /etc/default/inetinit "TCP_STRONG_ISS=2" 0

出力例 :

[PASS] File /etc/default/inetinit has content matching
TCP_STRONG_ISS=2.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFileExistslogFileNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数はともに、ファイルのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileExists 関数および check_fileNotExists 関数と一緒に使用します。

次の引数を指定できます。

この引数に NULL 文字列値が渡された場合、この関数は logNotice 関数を使用して、通知形式で結果を報告します。そうでない場合は、logFailure 関数を使用して、結果を失敗と報告します。

使用例 :

logFileExists /etc/issue

出力例 :

[NOTE] File /etc/issue was found.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFileGroupMatchlogFileGroupNoMatch

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数はともに、ファイルのグループメンバーシップのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileGroupMatch 関数および check_fileGroupNoMatch 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logFileGroupMatch /etc/motd sys 0

出力例 :

[PASS] File /etc/motd has group sys.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFileModeMatchlogFileModeNoMatch

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数はともに、ファイルアクセス権のチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileModeMatch 関数および check_fileModeNoMatch 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logFileModeMatch /etc/motd 0644 0

出力例 :

[PASS] File /etc/motd has mode 0644.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFileNotFound

この関数は、ファイル未検出メッセージを表示するときに使用します。この関数は、セキュリティー強化と監査の両方を実行する Solaris Security Toolkit コード全体で使用され、指定したファイルがシステム上で検出されなかったときに標準のメッセージを表示します。

次の引数を指定できます。

この引数に NULL 文字列値が渡された場合、この関数は logNotice 関数を使用して、通知形式で結果を報告します。そうでない場合は、logFailure 関数を使用して、結果を失敗と報告します。

使用例 :

logFileNotFound /etc/motd

出力例 :

[NOTE] File /etc/issue was not found.

通知メッセージと失敗メッセージは、それぞれ JASS_LOG_NOTICE 環境変数と JASS_LOG_FAILURE 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logFileOwnerMatchlogFileOwnerNoMatch

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、ファイル所有権のチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileOwnerMatch 関数および check_fileOwnerNoMatch 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logFileOwnerMatch /etc/motd root 0

出力例 :

[PASS] File /etc/motd has owner root.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFileTypeMatchlogFileTypeNoMatch

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、ファイルタイプのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_fileTypeMatch 関数および check_fileTypeNoMatch 関数と一緒に使用します。

次の引数を指定できます。

検出されるファイルタイプを、表 1-1 に示します。

表 1-1 check_fileTemplate 関数で検出されるファイルタイプ

ファイルタイプ

説明

b

ブロック型特殊ファイル

c

文字型特殊ファイル

d

ディレクトリ

D

door

f

通常ファイル

l

シンボリックリンク

p

名前付きパイプ (先入れ先出し)

s

ソケット


使用例 :

logFileTypeMatch /etc/motd f 0

出力例 :

[PASS] File /etc/motd is a regular file.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logFinding

この関数は、監査検出メッセージを表示します。この関数は、メッセージとして表示する単一文字列を引数として受け取ります。この関数に対して入力された値は、printPrettyPath 関数で処理されてから表示されます。また、詳細レベルが 2 である場合には、オプションのタグがメッセージの先頭に付加されます。以下は、この関数で付加できるオプションのタグです。



注 - driver.run スクリプトのフロー内など、監査スクリプト以外で検出が行われた場合には、現在のドライバの名前が使用されます。



これら 3 つの出力タグは、まとめて使用することも単独で使用することもできます。出力結果行での表示順は、指定した順序と同じになります。この関数と詳細レベルについての詳細は、第 6 章を参照してください。

使用例 :

logFinding "/etc/motd"

出力例 :

test-script /etc/motd

logFormattedMessage

この関数は、チェックするスクリプト名、チェックの目的、根拠などの情報を表示するフォーマット済み監査スクリプトヘッダを作成するときに使用します。この関数は、単一文字列値を引数として受け取り、関数に渡されるこのメッセージをフォーマットします。

これらのメッセージは次のようにフォーマットされます。

フォーマットされたメッセージは、詳細レベルが 3 以上の場合にのみ表示されます。この関数と詳細レベルについての詳細は、第 6 章を参照してください。

使用例 :

logFormattedMessage "Check system controller secure shell configuration."

出力例 :

# Check system controller secure shell configuration.

logInvalidDisableMode

この関数は、JASS_DISABLE_MODE 環境変数が無効な値に設定されているときに、エラーメッセージを表示します。このユーティリティー関数は、JASS_DISABLE_MODE 環境変数の状態を報告します。この関数は引数をとらず、以下のような出力を行います。

[ERR ] The JASS_DISABLE_MODE parameter has an invalid value: [...]
[ERR ] value must either be "script" or "conf".

この環境変数についての詳細は、第 6 章を参照してください。

logInvalidOSRevision

この関数は、check_os_revision 関数または check_os_min_revision 関数のいずれかがチェックに失敗したときに使用します。このユーティリティー関数は、適用されていない Solaris OS のバージョンで関数が呼び出されている場合に報告を行います。たとえば、Solaris 2.6 OS で Solaris 8 OS のスクリプトを使用してみるときなどに、この関数を使用します。

使用例 :

logInvalidOSRevision "5.9"

出力例 :

[NOTE] This script is only applicable for Solaris version
5.9.

複数のバージョンを指定する場合は、各バージョンの間にハイフン (-) を入力します (たとえば、"5.6-5.8")。

この関数は、通知メッセージを表示します。メッセージは、JASS_LOG_NOTICE 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logMessage

この関数は、ユーザーに対してメッセージを表示するときに使用します。使用するのは、メッセージに関連付けられているタグが含まれていない場合です。logFormattedMessage 関数と同様、この関数もフォーマットされていないメッセージを表示します。この関数は、そのまま表示される単一文字列値を引数として受け取り、何も変更は行いません。

フォーマットされていないメッセージは、詳細レベルが 3 以上の場合にのみ表示されます。この関数と詳細レベルについての詳細は、第 6 章を参照してください。

使用例 :

logMessage "Verify system controller static ARP configuration."

出力例 :

Verify system controller static ARP configuration.

logNotice

この関数は、通知メッセージを表示するときに使用します。この関数は、通知メッセージとして表示する単一文字列値を引数として受け取ります。通知メッセージとは、文字列 [NOTE] が含まれているメッセージのことです。

使用例 :

logNotice "Service ${svc} does not exist in ${INETD}."

出力例 :

[NOTE] Service telnet does not exist in /etc/inetd.conf.

通知メッセージは、JASS_LOG_NOTICE 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logPackageExistslogPackageNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、ソフトウェアパッケージがインストールされているかどうかのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_packageExists 関数および check_packageNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logPackageExists SUNWcsr 0

出力例 :

[PASS] Package SUNWcsr is installed.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logPatchExistslogPatchNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、ソフトウェアパッチがインストールされているかどうかのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_patchExists 関数および check_patchNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logPatchExists 123456-01 0

出力例 :

[PASS] Patch ID 123456-01 or higher is installed.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logProcessArgsMatchlogProcessArgsNoMatch

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、実行時プロセス引数のチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_processArgsMatch 関数および check_processArgsNoMatch 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logProcessArgsMatch inetd "-t" 0

出力例 :

[PASS] Process inetd found with argument -t.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logProcessExistslogProcessNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、プロセスのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_processExists 関数および check_processNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logProcessExists nfsd 0

出力例 :

[PASS] Process nfsd was found.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logProcessNotFound

この関数は、検出されないプロセスに対する FAIL メッセージを記録するときに使用します。この関数は、「プロセスの未検出」メッセージを表示します。指定したプロセスがシステムで検出されなかったときに、この関数は標準のメッセージを表示します。

次の引数を指定できます。

使用例 :

logProcessNotFound inetd

出力例 :

[FAIL] Process inetd was not found.

メッセージは、JASS_LOG_FAILURE 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logServiceConfigExistslogServiceConfigNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、構成ファイルが存在するかどうかのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_serviceConfigExists 関数および check_serviceConfigNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logServiceConfigExists /etc/apache/httpd.conf 0

出力例 :

[PASS] Service Config File /etc/apache/httpd.conf was found.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logStartScriptExistslogStartScriptNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、実行コントロール開始スクリプトが存在するかどうかのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_startScriptExists 関数および check_startScriptNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logStartScriptExists /etc/rc3.d/S89sshd 0

出力例 :

[PASS] Start Script /etc/rc3.d/S89sshd was found.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logStopScriptExistslogStopScriptNotExists

この 2 つの関数は、チェックの成功または失敗に関連するメッセージを記録するときに使用します。これらの関数は、実行コントロール停止スクリプトが存在するかどうかのチェック結果を報告します。どちらの関数も必要に応じて単独で使用することができますが、主に check_stopScriptExists 関数および check_stopScriptNotExists 関数と一緒に使用します。

次の引数を指定できます。

使用例 :

logStopScriptExists /etc/rc2.d/K03sshd 0

出力例 :

[PASS] Stop Script /etc/rc2.d/K03sshd was found.

表示されるメッセージは、成功または失敗のいずれかです。これらのメッセージは、JASS_LOG_FAILURE 環境変数と JASS_LOG_SUCCESS 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 6 章を参照してください。

logSuccess

この関数は、成功メッセージを表示するときに使用します。この関数は、監査成功メッセージとして表示する単一文字列値を引数として受け取ります。成功メッセージとは、文字列「[PASS]」が含まれているメッセージのことです。

使用例 :

logSuccess "Package SUNWsshdr is installed."

出力例 :

[PASS] Package SUNWsshdr is installed.

成功メッセージは、JASS_LOG_SUCCESS 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。

logWarning

この関数は、警告メッセージを表示するときに使用します。この関数は、警告メッセージとして表示する単一文字列値を引数として受け取ります。警告メッセージとは、文字列「[WARN]」が含まれているメッセージのことです。

使用例 :

logWarning "User ${acct} is not listed in ${JASS_PASSWD}."

出力例 :

[WARN] User abc is not listed in /etc/passwd.

警告メッセージは、JASS_LOG_WARNING 環境変数を使用して制御できます。この環境変数についての詳細は、第 6 章を参照してください。


その他の共通関数の使用

ここで説明する関数は、Solaris Security Toolkit ソフトウェアのいくつかの領域内で使用され、他のフレームワーク関数 (接尾辞 .func で終わるファイル) で提供される機能に特化していないその他の共通関数です。これらの関数は、Drivers ディレクトリの common_misc.funcs ファイルに格納されています。このファイルには、isNumericprintPretty などの共通ユーティリティー関数が含まれています。

ここでは、以下のその他の共通関数について説明します。

isNumeric

この関数は、入力された引数が正の数であるかどうかを判定するときに使用します。この関数は、入力値が 1 つの正の数であることを検証する必要がある場合に、ソフトウェア全体にわたりヘルパー関数で使用されます。この関数は、単一文字列を引数として受け取り、その値が正の数であるかどうかを判定します。値が正の数である場合は、値 0 が表示され、それ以外の数の場合は、値 1 が表示されます。

invalidVulnVal

この関数は、入力された引数が正の数であるかどうかを判定するときに使用します。この関数は、単一文字列を引数として受け取り、その値が正の数であるかどうかを判定します。正の数でない場合は、エラーメッセージを記録します。脆弱性値として無効な引数が関数に指定されていないかどうかを判定する際に、この関数が必要となります。その他のすべての点では、isNumeric 関数と同様に動作します。この関数は、監査操作に対してのみ適用されます。

checkLogStatus

この関数は、指定した入力文字列が LOG に設定されているかどうかを判定するときに使用します。この関数は、単一文字列を引数として受け取り、呼び出し元関数でその結果を記録する必要があるかどうかを判定します。評価される文字列が LOG という文字列の場合には、値 1 を返して、呼び出し元関数でその結果を記録する必要があることを示します。入力文字列にそれ以外の値が含まれている場合は、値 0 を返し、呼び出し元関数では出力が記録されないことを示します。この関数は、監査操作に対してのみ適用されます。

adjustScore

この関数は、audit_public.funcs ファイルで定義されている関数によって提供されているメソッド以外でスコアを調整するときに使用します。この関数は、監査スクリプトの現在のスコアに追加される値を示す正の数を引数として受け取ります。たとえば、監査スクリプトで失敗を判定できるだけでよい場合があります。こういった場合には、この関数を使用してスコアを調整して失敗を示すようにします。1 が追加されないときは、エラーメッセージが記録され、スコアは調整されません。この関数は、監査処理に対してのみ適用されます。

printPretty

この関数は、印刷出力結果をフォーマットして読みやすくするときに使用します。この関数は、フォーマットされていない入力文字列を受け取って、フォーマット処理します。フォーマットされた文字列は 72 文字で改行され、各出力行は 3 文字分だけインデントされます。

printPrettyPath

この関数は、パス名をフォーマットするときに使用します。この関数は、フォーマットされていないパス名を入力として受け取ります。入力された文字列から余分なスラッシュを取り除いてから、結果を表示します。文字列が空の場合には、表示場所にキーワード「<No Value>」が表示されます。

extractComments

この関数は、ファイルやスクリプトからコメントを削除するときに使用します。この関数は、トークン (スクリプト名、ファイル名など) のリストを入力として受け取り、コメントアウトされているテキストを削除します。この関数では、コメントを「#」(番号) 記号で始まり、行の最後まで続くテキストの部分文字列として定義します。

clean_path

この関数は、余分な「/」(スラッシュ) 文字をファイル名から削除するときに使用します。この関数は、単一文字列引数を入力として受け取り、その文字列から重複しているスラッシュ記号 (/) を取り除いた値を返します。パス名をユーザーに表示したり、記録したりする前に、この関数を使用してパス名の整理を行います。

strip_path

この関数は、ファイル名から JASS_ROOT_DIR 接頭辞を削除するときに使用します。この関数は、文字列引数を入力として受け取り、JASS_ROOT_DIR 接頭辞を削除して、単一の「/」(スラッシュ) 文字に置き換えてからその値を返します。JASS マニフェストファイルにパス名を格納する際に、add_to_manifest 関数とともにこの関数を使用します。


ドライバ関数の使用

以下の関数は、ドライバとしての機能を持つ関数です。これらの関数は、Driversディレクトリの driver.funcs ファイルに格納されています。このファイルには、add_pkgcopy_a_file などの関数が含まれています。

スクリプトをカスタマイズまたは作成する場合は、次の関数を使用して標準の操作を実行してください。

add_patch

この関数は、Solaris OS パッチをシステムに追加するときに使用します。デフォルトでは、インストールされるパッチが JASS_PATCH_DIR ディレクトリに格納されていることを前提としています。この関数のオプションを、表 1-2 に示します。

表 1-2 add_patch 終了スクリプト関数のオプション

オプション

説明

-o options

渡されるオプション

-M patchdir

ソースディレクトリへの絶対パス

patchlist

パッチリスト、または適用するパッチリストが含まれているファイル名


使用例 :

add_patch 123456-01

add_patch -M ${JASS_PATCH_DIR}/OtherPatches patch_list.txt

 

add_pkg

この関数は、Solaris OS パッケージをシステムに追加するときに使用します。デフォルトでは、パッケージが JASS_PACKAGE_DIR ディレクトリに格納されており、また、そのパッケージが Sun の標準フォーマット、スプールディレクトリ、またはパッケージストリームファイルのいずれかにあることを前提としています。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。元に戻す処理を実行すると、この関数を使用して追加したパッケージは、システムから削除されます。この関数のオプションを、表 1-3 に示します。

表 1-3 add_pkg 関数のオプション

オプション

説明

-a ask_file

pkgadd ask ファイル名。デフォルトでは、他のファイルを指定しない場合、pkgadd ask ファイル (noask_pkgadd) が使用されます。

-d src_loc

インストールするソースパッケージ (ストリームまたはディレクトリ) への絶対パス

-o options

pkgadd コマンドオプション

package

インストールするパッケージ


使用例 :

add_pkg ABCtest

add_pkg -d ${JASS_ROOT_DIR}/${JASS_PACKAGE_DIR}/SUNWjass.pkg SUNWjass

 

add_to_manifest

この関数は、ヘルパー関数を呼び出さずに、強化処理中に項目をマニフェストファイルに手動で挿入するときに使用します。コマンドで元に戻す処理を実行しなければならない場合に、この方法が最もよく使用されます。このオプションは、システムの完全性と Solaris Security Toolkit のリポジトリが保護されるように注意して使用してください。



caution icon

注意 - X マニフェストオプションを使用する際は、細心の注意を払って実行してください。root ユーザーとして Solaris Security Toolkit を元に戻す処理を行うときに、この操作で指定したコマンドが実行されます。不注意に実行すると、データが失われたり、対象システムが不安定になる可能性があります。たとえば、元に戻す処理中に rm -rf/ を実行すると、X マニフェスト項目によってシステムのルートパーティションが削除されることがあります。



add_to_manifest コマンドには、次の構文を使用します。

add_to_manifest operation src dst args

このコマンドでは、JASS_RUN_MANIFEST ファイルの項目を JASS_REPOSITORY/jass-manifest.txt ファイルに格納します。これは、終了スクリプトで実行した変更を元に戻すために重要なファイルです。



注 - Solaris Security Toolkit によるすべての操作において、上記の各引数がサポートされるわけではありません。また、srcdst、および args のオプションは、選択した操作によって意味が異なる場合があります。これについては、表 1-4 で説明します。



add_to_manifest 関数でサポートされる操作を、表 1-4 に示します。この表では、各オプションの説明の後に、追加されたマニフェスト項目の例を記載しています。

表 1-4 add_to_manifest オプションとマニフェスト項目例

オプション

説明

C

ファイルがコピーされたことを示します。この場合、src パラメータと dst パラメータは、それぞれ元のファイルとコピーしたファイルの名前を表わします。その他の引数は使用しません。

install-templates.fin /etc/syslog.conf /etc/ \
syslog.conf.JASS.20020823230626

D

ディレクトリが作成されたことを示します。この場合、src パラメータは新規作成されたディレクトリの名前を表わします。その他の引数は使用しません。

disable-lp.fin /var/spool/cron/crontabs.JASS

J

システム上でファイルが新規作成されたことを示します。この操作は、src パラメータで指定したファイルがシステムに存在していない場合にのみ使用されます。元に戻す処理中に、この操作コードが付いたファイルが削除されます。この操作では、src パラメータと dst パラメータは、それぞれ元のファイルと保存したファイルの名前 (ファイル名に JASS_SUFFIX を含める必要がある) を表わします。

disable-power-mgmt.fin /noautoshutdown \
/noautoshutdown.JASS.20020823230629

M

ファイルが移動されたことを示します。この場合、src パラメータと dst パラメータは、それぞれ元のファイルと移動したファイルの名前を表わします。その他の引数は使用しません。

disable-ldap-client.fin /etc/rcS.d/K41ldap.client \
/etc/rcS.d/_K41ldap.client.JASS.20020823230628

R

ファイルがシステムから削除されたことを示します。この場合、src パラメータは削除されたディレクトリの名前を表わします。この操作コードが付いているファイルは、Solaris Security Toolkit の元に戻すコマンドでは復元できません。

S

シンボリックリンクが作成されたことを示します。この場合、src パラメータと dst パラメータは、それぞれソースファイルとターゲットファイルの名前を表わします。元に戻す処理中に、この操作のタグが付いたファイルのシンボリックリンクが、システムから削除されます。

install-templates.fin ../init.d/nddconfig /etc/rc2.d/ \
S70nddconfig

X

Solaris Security Toolkit でこの操作コードを持つマニフェスト項目を処理するときに、実行しなければならないコマンドが定義されていることを示します。これは特殊な操作であり、標準の操作の範囲を超えている複雑なコマンドを実行するために、最もよく使用されます。たとえば、install-fix-modes.fin 終了スクリプトで、Fix Modes プログラムで行った変更を元に戻すように指示するときは、次のマニフェスト項目を追加します。

/opt/FixModes/fix-modes -u

このコマンドでは、-u オプションを指定して fix-modes プログラムを実行するように指示しています。この操作で処理するすべてのコマンドは、プログラムへの絶対パスを使用して指定する必要があります。


backup_file

この関数は、既存のファイルシステムオブジェクトをバックアップするときに使用します。元のファイルのバックアップには、標準の命名規則を使用します。この命名規則では、元のファイル名の最後に JASS_SUFFIX を付加します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

Solaris Security Toolkit ソフトウェアで実行中に変更されたファイルのバックアップコピーを保存するかしないかを、JASS_SAVE_BACKUP 変数で指定します。この環境変数を 0 に設定すると、バックアップファイルはシステムに保存されません。ファイルを保存しなかった場合には、元に戻すコマンドを使用して復元することはできません。

使用例 :

backup_file /etc/motd

check_os_min_version

この関数は、複数の Solaris OS リリースに搭載されている機能を検出するときに使用します。OS の最小リリースバージョンを示す引数を 1 つだけとります。対象プラットフォーム上の OS の実際のリリースバージョンが引数の値以上である場合、0 の値を返し、そうでない場合は 1 を返します。エラーが発生した場合は、255 を返します。

たとえば、この関数は コード例 1-3 に示すように使用することができます。

コード例 1-3 複数の OS リリースに搭載されている機能の検出

if check_os_min_revision 5.6 ; then
   if [ "${JASS_KILL_SCRIPT_DISABLE}" = "1" ]; then
      disable_rc_file ${JASS_ROOT_DIR}/etc/rcS.d K10dtlogin
      disable_rc_file ${JASS_ROOT_DIR}/etc/rc0.d K10dtlogin
      disable_rc_file ${JASS_ROOT_DIR}/etc/rc1.d K10dtlogin
   fi
   disable_rc_file ${JASS_ROOT_DIR}/etc/rc2.d S99dtlogin
else
   logInvalidOSRevision "5.6 and later"
fi

この例では、共通デスクトップ環境 (CDE) はバージョン 5.6 以前の Solaris OS には搭載されていないため、このスクリプトでは、バージョンが 5.6 以降であることを確認してから、指定した実行コントロールスクリプトを無効にしています。

check_os_revision

この関数は、特定の OS バージョン、または値の範囲をチェックするときに使用します。1 つまたは 2 つの引数をとることができます。引数を 1 つ指定したときは、対象のオペレーティングシステムのバージョンが引数と同じ場合にのみ 0 を返し、そうでない場合には 1 を返します。

同様に、引数を 2 つ指定したときには、対象のオペレーティングシステムのバージョンが 2 つの値の範囲内に含まれている場合に、結果が 0 になります。いずれの場合も、エラーが発生したときは 255 を返します。

たとえば、この関数は コード例 1-4 に示すように使用することができます。

コード例 1-4 特定の OS バージョンや範囲のチェック

if check_os_revision 5.5.1 5.8; then
   if [ "${JASS_DISABLE_MODE}" = "conf" ]; then
      disable_conf_file ${JASS_ROOT_DIR}/etc asppp.cf
   elif [ "${JASS_DISABLE_MODE}" = "script" ]; then
      if [ "${JASS_KILL_SCRIPT_DISABLE}" = "1" ]; then
         disable_rc_file ${JASS_ROOT_DIR}/etc/rcS.d K50asppp
         disable_rc_file ${JASS_ROOT_DIR}/etc/rc0.d K47asppp
         disable_rc_file ${JASS_ROOT_DIR}/etc/rc0.d K50asppp
         disable_rc_file ${JASS_ROOT_DIR}/etc/rc1.d K47asppp
         disable_rc_file ${JASS_ROOT_DIR}/etc/rc1.d K50asppp
      fi
      disable_rc_file ${JASS_ROOT_DIR}/etc/rc2.d S47asppp
   fi
else
   logInvalidOSRevision "5.5.1-5.8"
fi

この例では、対象 OS バージョンが Solaris OS バージョン 2.5.1 から 8 までの範囲内に含まれている場合に、JASS_DISABLE_MODE の値に基づいて、スクリプトと構成ファイルのみを無効にしています。

checksum

この関数は、ファイルのチェックサムの計算に使用します。この関数は、チェックサムが計算されるファイルを示す単一文字列値を引数としてとります。この関数ではチェックサムの計算に Solaris cksum プログラムを使用しており、checksum:number of octets という形式で値を出力します。

コード例 1-5 チェックサムの計算

checksum foobar
12345:23

copy_a_dir

この関数は、ディレクトリの内容を繰り返しコピーするときに使用します。コピー元のディレクトリ名とコピー先のディレクトリ名の 2 つの引数をとります。この関数は、コピー元ディレクトリの内容を、コピー先パラメータで指定したディレクトリにコピーします。指定したディレクトリが存在していない場合は、新しいディレクトリを作成します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

使用例 :

copy_a_dir /tmp/test1 /tmp/test2

copy_a_file

この関数は、1 つの通常ファイルをまるごとコピーするときに使用します。コピー元のファイル名とコピー先のファイル名の 2 つの引数をとります。この関数は、コピー元ファイルの内容を、コピー先パラメータで指定したファイルにコピーします。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

使用例 :

copy_a_file /tmp/test-file-a /tmp/test-file-b

copy_a_symlink

この関数は、シンボリックリンクを対象のプラットフォームにコピーするときに使用します。コピー元のリンク名とコピー先のファイル名の 2 つの引数をとります。この関数は、コピー先パラメータとして渡された新しいファイル名を使用して、指定されたコピー元リンクから新しいシンボリックリンクを作成します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

使用例 :

copy_a_symlink /tmp/test-link-a /tmp/test-link-b

copy_files

この関数は、JASS_HOME_DIR/Files ディレクトリツリーにある 1 組のファイルシステムオブジェクトを、対象のシステムにコピーするときに使用します。この関数では、これまでに説明した適切なコピー関数を使用し、元に戻す処理を行ったときに確実に変更が元に戻るようにしています。通常ファイル、ディレクトリ、およびシンボリックリンクのコピーが可能です。

使用例 :

copy_files /etc/init.d/nddconfig

copy_files "/etc/init.d/nddconfig /etc/motd /etc/issue"

 

ファイル名に付加されているタグに基づいてオブジェクトを選択的にコピーできることで、この関数は機能を拡張しています。

コピーするファイルは、次の基準で選択されます。

このオプションでは、対象プラットフォームの名前と ${HOST} で指定したタグが一致する場合にのみ、オブジェクトがコピーされます。この HOST 環境変数には、JASS_HOSTNAME 環境変数と同じネーミング形式を使用します。

例 : /etc/issue.jordan

このファイルが検出されなかった場合は、続いて一般ファイルの検索が行われます (次に記載されているオプション)。

このオプションでは、対象プラットフォームの OS バージョンと ${OS} で指定したタグが一致する場合にのみ、オブジェクトがコピーされます。OS パラメータには、JASS_OS_REVISION 環境変数と同じネーミング形式を使用します。したがって、Solaris 8 OS 専用のファイルは "filename+5.8" と表記します。

例 : /etc/issue+5.10

このファイルが検出されなかった場合は、ホスト名に関連するファイルの検索が行われます (次に記載されているオプション)。

このオプションでは、ファイルが対象システムにコピーされます。

例 : /etc/issue



注 - ファイルの長さまたはサイズがゼロの場合には、そのファイルはシステムにコピーされません。



上記の基準は、ファイルの照合に使用する優先度順にリストされています。たとえば、ホスト固有ファイルと一般ファイルの両方が存在し、対象システムの名前がホスト固有ファイルで定義されているホスト名と一致する場合には、ホスト固有ファイルが使用されます。



注 - copy_files 関数では、リストに指定されていても JASS_HOME_DIR/Files ディレクトリツリーで検出されないオブジェクトは無視します。



create_a_file

この関数は、対象システム上に空ファイルを作成するときに使用します。touchchown、および chmod コマンドを組み合わせて使用し、特定の所有者、グループ、およびアクセス権を持つ空ファイルを作成します。



注 - 存在するファイルに対するアクセス権や所有権は変更しません。



特定のアクセス権を持つファイルを作成します。

使用例 :

create_a_file -o guppy:staff -m 750 /usr/local/testing

この例では、/usr/local ディレクトリに、guppy と、グループ staff に所有され、アクセス権 750 を持つ testing という名前のファイルが作成されます。この関数では、表 1-5 に記載されているオプションを使用します。

表 1-5 create_a_file コマンドのオプション

オプション

有効な入力

[-o user[:group]]

chown(1) の構文に従い、useruser:group を使用します。

[-m perms]

chmod(1) の構文に従い、perms を使用します。

/some/fully/qualified/path/file

ファイルへの絶対パス


使用例 :

create_a_file /usr/local/testing

create_a_file -o root /usr/local/testing

create_a_file -o root:sys /usr/local/testing

create_a_file -o root -m 0750 /usr/local/testing

   

create_file_timestamp

この関数は、指定したファイルとすべてのファイルバックアップ操作に対して一意の時刻表示値を作成するときに使用します。一意の接尾辞値が必要となる、バックアップ済みファイルのバックアップを作成する場合に、この関数は便利です。作成される時刻表示値の形式は、JASS_TIMESTAMP と同じ形式です。この関数で作成された時刻表示値は、JASS_SUFFIX 環境変数に格納されます。詳細については、第 6 章JASS_TIMESTAMPを参照してください。

使用例 :

create_file_timestamp /usr/local/testing

disable_conf_file

この関数は、サービス構成ファイルを無効にするときに使用します。この関数は、このファイルが格納されているディレクトリ名と、サービス構成ファイル名を示す 2 つの文字列値を引数として受け取ります。「_」(下線) の接頭辞をファイル名の先頭に付加することで、サービス構成ファイルを無効にして、このファイルが実行されないようにします。

使用例 :

disable_conf_file /etc/dfs dfstab

この例では、ファイル名を /etc/dfs/dfstab から /etc/dfs/_dfstab.JASS.<timestamp> という名前に変更しています。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

disable_file

この関数は、元のディレクトリに格納できないファイルを無効にするときに使用します。たとえば、/var/spool/cron/crontabs ディレクトリに、個人ユーザーの crontab ファイルが保存されているとします。無効化またはバックアップした crontab ファイルのコピーを crontabs ディレクトリに格納すると、cron サービスではエラーになります。それは、無効化またはバックアップしたファイルの名前と一致するユーザー名がないためです。

この問題に対処するには、この関数で .JASS 接尾辞が付いたミラーディレクトリを作成し、この中に無効になったファイルを格納します。たとえば、無効にするファイルが /var/spool/cron/crontabs ディレクトリ内にある場合には、/var/spool/cron/crontabs.JASS ディレクトリを作成し、ここに無効になったファイルを移動します。

他の無効化関数と同様に、無効にするファイルには .JASS.<timestamp> という接尾辞が付きます。この関数の違いは、無効になったファイルが元のファイルと同じディレクトリには格納されない点です。

使用例 :

disable_file /var/spool/cron/crontabs/uucp

この例では、ファイル /var/spool/cron/crontabs/uucp/var/spool/cron/crontabs.JASS ディレクトリに移動して、uucp.JASS.<timestamp> という名前に変更しています。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

disable_rc_file

この関数は、実行コントロールファイルの実行を無効にするときに使用します。この関数は、スクリプトが格納されているディレクトリ名と、実行コントロールスクリプト名を示す 2 つの文字列値を引数として受け取ります。「_」(下線) の接頭辞をファイル名の先頭に付加することで、スクリプトを無効にして、実行コントロールフレームワークでこのファイルが実行されないようにします。ファイルを実行するときは、開始実行コントロールスクリプトの名前を S で始め、終了実行コントロールスクリプトの名前を Kで始めるようにします。また、無効にしたファイルには接尾辞 .JASS.<timestamp> を付加します。

使用例 :

disable_rc_file /etc/rc2.d S71rpc

この例では、ファイル名を /etc/rc2.d/S71rpc から /etc/rc2.d/_S71rpc.JASS.<timestamp> という名前に変更しています。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

is_patch_appliedis_patch_not_applied

この 2 つの関数は、パッチがシステムに適用されているかどうかを判定するときに使用します。これらの関数は、チェックするパッチ番号を示す単一文字列値を引数として受け取ります。

この値は、次のいずれかの方法で指定できます。

使用例 :

is_patch_applied 123456

使用例 :

is_patch_applied 123456-02

mkdir_dashp

この関数は、対象システム上にディレクトリを新規作成するときに使用します。この関数は、作成するディレクトリ名を示す単一文字列値を引数として受け取ります。mkdir-p オプションを付けると、対象のディレクトリが存在している場合にエラーが報告されなくなります。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

使用例 :

mkdir_dashp /usr/local

move_a_file

この関数は、ファイル名を別のファイル名に移動するときに使用します。元のファイル名と移動先のファイル名の 2 つのエントリが必要です。元のファイル名を、移動先パラメータで指定したファイル名に移動、つまり変更します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

使用例 :

move_a_file /tmp/test-file-a /tmp/test-file-b

rm_pkg

この関数は、Solaris OS パッケージをシステムから削除するときに使用します。この関数で実行した操作は確定されるので、元に戻す処理で復元することはできません。表 1-6 に、この関数のオプションを示します。

表 1-6 rm_pkg 関数のオプション

オプション

説明

-a ask_file

pkgrm ask ファイル名。デフォルトでは、他のファイルを指定しない場合、pkgrm ask ファイル (noask_pkgrm) が使用されます。

-o options

pkgrm コマンドオプション

package

削除するパッケージ


使用例 :

rm_pkg SUNWadmr


監査関数の使用

このソフトウェアの監査関数には、プライベートとパブリックの 2 種類があります。audit_private.funcs ファイルで定義されている関数はプライベートであるため、パブリックには使用できません。このファイルで定義されているプライベートスクリプトは使用しないでください。audit_public.funcs ファイルで定義されているパブリックスクリプトだけを使用してください。

パブリック関数は、監査スクリプトで使用される監査関数を定義する関数で、JASS_AUDIT_DIR ファイルに格納されています。このファイルで定義されている関数はパブリックなので、標準およびカスタムの監査スクリプトのどちらででも自由に使用できます。多くの場合、このファイルで定義されている関数は、audit_private.funcs ファイルで定義されている関数を呼び出すスタブです。今後のリリースでの元のコードの変更や拡張について心配することなく、ユーザーがこれらのスクリプトをパブリックインタフェースにコーディングできるように、これらのスタブが実装されています。

監査関数は、システムに格納されている構成と実行時構成の構成要素を評価する、監査スクリプトの一部として使用します。次の関数は、Solaris Security Toolkit ソフトウェアの監査フレームワークに対するパブリックインタフェースです。

監査スクリプトをカスタマイズまたは作成する場合は、次の関数を使用して標準の操作を実行してください。

check_fileContentsExistcheck_fileContentsNotExist

この 2 つの関数は、指定ファイルに、指定した検索文字列と一致する内容が含まれているかどうかを判定するときに使用します。これらの関数は、指定されたファイルを検索し、その内容を検索文字列と照合します。検索文字列は、正規表現の形式で指定します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_fileContentsExist /etc/default/inetinit "TCP_STRONG_ISS=2" 1 LOG

check_fileExistscheck_fileNotExists

この 2 つの関数は、対象システム上にファイルが存在しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_fileExists /etc/inet/inetd.conf 1 LOG

check_fileGroupMatchcheck_fileGroupNoMatch

この 2 つの関数は、ファイルが対象システム上のグループに属しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_fileGroupMatch /etc/passwd sys 1 LOG
check_fileGroupMatch /etc/passwd 3 1 LOG

check_fileModeMatchcheck_fileModeNoMatch

この 2 つの関数は、対象システム上でファイルにアクセス権が指定されているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_fileModeMatch /etc/passwd "0444" 1 LOG
check_fileModeMatch /etc/passwd "ugo=r" 1 LOG

check_fileOwnerMatchcheck_fileOwnerNoMatch

この 2 つの関数は、ファイルが対象システム上の特定のユーザーに属しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_fileOwnerMatch /etc/passwd root 1 LOG
check_fileOwnerMatch /etc/passwd 0 1 LOG

check_fileTemplate

この関数は、Solaris Security Toolkit ソフトウェアで定義されているファイルテンプレートが、対象システムにインストールされているファイルテンプレートと一致しているかどうかを判定するときに使用します。たとえば、この関数を使用してファイルテンプレート /etc/motd をチェックする場合、JASS_FILES_DIR/etc/motd/etc/motd の内容を比較し、内容が同一であるかどうかを判定します。同じ内容である場合には、成功は 0、失敗は 1、エラー状態は 255 と表示されます。複数のファイルを指定する場合には、すべてのファイルが表示コード 0 を取得する必要があります。

次の引数を指定できます。

使用例 :

check_fileTemplate /etc/motd 1 LOG

check_fileTypeMatchcheck_fileTypeNoMatch

この 2 つの関数は、ファイルシステムオブジェクトが、対象システム上の特定のオブジェクトであるかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

検出されるファイルタイプを、表 1-7 に示します。

表 1-7 check_fileTemplate 関数で検出されるファイルタイプ

ファイルタイプ

説明

b

ブロック型特殊ファイル

c

文字型特殊ファイル

d

ディレクトリ

D

door

f

通常ファイル

l

シンボリックリンク

p

名前付きパイプ (先入れ先出し)

s

ソケット


使用例 :

check_fileTypeMatch /etc/passwd f 1 LOG
check_fileTypeMatch /etc d 1 LOG

check_minimized

この関数は、最小化プラットフォームでのみパッケージチェックを実行する必要があるときに使用します。この関数は、JASS_CHECK_MINIMIZED 環境変数により動作が制御されることを除けば、check_packagesNotExist 関数と同じです。対象システムが最小化されていない場合には、JASS_CHECK_MINIMIZED 環境変数を 0 に設定する必要があります。この場合、いずれのチェックも行われず、チェックが実行されなかったという通知とともに、値 0 が表示されます。対象システムが最小化されている場合には、check_packageNotExists 関数と同様に動作し、成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_minimized SUNWatfsu 1 LOG

check_packageExistscheck_packageNotExists

この 2 つの関数は、対象システムにソフトウェアパッケージがインストールされているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_packageExists SUNWsshdu 1 LOG

check_patchExistscheck_patchNotExists

この 2 つの関数は、対象システムにソフトウェアのパッチがインストールされているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_patchExists 123456 1 LOG
check_patchExists 123456-01 1 LOG



注 - パッチのバージョンを指定することができます。指定する場合は、インストールされているバージョンが、指定するバージョン以上でなければなりません。バージョンを指定しない場合は、いずれかのバージョンのパッチがインストールされていれば、成功と表示されます。



check_processArgsMatchcheck_processArgsNoMatch

この 2 つの関数は、特定の実行時引数を使用するプロセスが、システム上で実行されているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_processArgsMatch /usr/sbin/syslogd "-t" 1 LOG

check_processExistscheck_processNotExists

この 2 つの関数は、対象システムでプロセスが実行されているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_processExists sshd 1 LOG

check_serviceConfigExistscheck_serviceConfigNotExists

この 2 つの関数は、対象システムにサービス構成ファイルが存在しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_serviceConfigExists /etc/ssh/sshd_config 1 LOG

check_startScriptExistscheck_startScriptNotExists

この 2 つの関数は、対象システムに実行コントロール開始スクリプトが存在しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_startScriptExists /etc/rc3.d/S89sshd 1 LOG

check_stopScriptExistscheck_stopScriptNotExists

この 2 つの関数は、対象システムに実行コントロール停止スクリプトが存在しているかどうかを判定するときに使用します。成功は 0、失敗は 1、エラー状態は 255 と表示されます。

次の引数を指定できます。

使用例 :

check_stopScriptExists /etc/rc2.d/K03sshd 1 LOG

finish_audit

この関数は、チェックスクリプトのすべてのプロセスが完了したことと、そのスクリプトのスコアを計算する必要があることを通知するときに使用します。通常、この関数はチェックスクリプトの最後のエントリになります。スクリプトの終了を示すメッセージを表示する場合は、この関数に単一文字列を引数として渡します。

使用例 :

finish_audit

finish_audit "End of script"

 

start_audit

この関数は、監査スクリプトを呼び出すときに使用します。通常、この関数は監査スクリプトの最初の命令であり、コメントや変数宣言は含まれません。この関数は、スクリプト名を定義し、バナーを表示して、スコアを 0 にリセットします。

次の引数を指定できます。

使用例 :

start_audit disable-apache.aud "Apache" "Description of Check"

出力例 :

#--------------------------------------------------------------
# Apache
#
# Description of Check
#--------------------------------------------------------------