2


フレームワーク関数

この章では、フレームワーク関数の使用、追加、変更、および削除について説明します。フレームワーク関数を使用すると、ソースコードを変更せずに 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 の機能を拡張する方法を、コード例 2-1 に示します。この例では、JumpStart インストール時に開発者が追加ファイルシステムをマウントできるように mount_filesystems 関数を変更しています。mount_filesystems 関数は、driver_private.funcs スクリプトから user.run ファイルに直接コピーします。関数の変更は、行 8 と 9 で行なっています。


コード例 2-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 (完全モード) 以上の場合にのみ表示されます。詳細レベルについての詳細は、第 7 章を参照してください。

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


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

================================================================
Solaris Security Toolkit Version: 4.2
Node name:                        imbulu
Zone name:                        global
Host ID:                          8085816e
Host address:                     192.168.0.1
MAC address:                      0:0:80:85:81:6e
OS version:                       5.10
Date:                             Fri Jul 1 22:27:15 EST 2005
================================================================

 

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

logDebug

この関数は、デバッグメッセージを表示します。デバッグメッセージには、[FAIL][PASS] などの型接頭辞がありません。詳細レベルが 4 (デバッグモード) 以上の場合にのみデバッグメッセージが表示されます。デフォルトでは、デバッグメッセージを出力しません。詳細レベルについての詳細は、第 7 章を参照してください。

引数: $1 - 出力する文字列

戻り値: なし

使用例 :


logDebug "Print first message for debugging."

 

logError

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

引数: $1 - エラーメッセージとして表示する文字列

戻り値: なし

使用例 :


logError "getScore: Score value is not defined."

 

出力例 :


[ERR ] getScore: Score value is not defined.

 

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

logFailure

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

引数: $1 - 失敗メッセージとして表示する文字列

戻り値: なし

使用例 :


logFailure "Package SUNWatfsr is installed."

 

出力例 :


[FAIL] Package SUNWatfsr is installed.

 

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

logFileContentsExistlogFileContentsNotExist

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

引数: $1 - テストするファイル (文字列値)
$2 - 検索パターン (文字列値)
$3 - 脆弱性値 (0 以上の整数)
$4 - PASS または FAIL メッセージの次にユーザーに
表示する関連情報 (オプション)

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

使用例 :


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

 

出力例 :


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

 

logFileExistslogFileNotExists

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

引数: $1 - テストするファイル (文字列値)
$2 - 脆弱性値 (0 以上の整数)。この引数に NULL
文字列値が渡された場合、この関数はlogNotice 関数を
使用して、通知形式で結果を報告します。引数が
0 である場合、logSuccess 関数を使用して結果を成功と報告し、
それ以外の場合は logFailure 関数を使用して失敗と報告します。
$3 - PASSFAIL、または NOTE メッセージの次に
ユーザーに表示する関連情報 (オプション)。

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

使用例 :


logFileExists /etc/issue

 

出力例 :


[NOTE] File /etc/issue was found.

 

logFileGroupMatchlogFileGroupNoMatch

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

引数: $1 - テストするファイル (文字列値)
$2 - チェックするグループ
$3 - 脆弱性値 (0 以上の整数)
$4 - PASS または FAIL メッセージの次にユーザーに
表示する関連情報 (オプション)

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

使用例 :


logFileGroupMatch /etc/motd sys 0

 

出力例 :


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

 

logFileModeMatchlogFileModeNoMatch

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

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

引数: $1 - テストするファイル (文字列値)
$2 - チェックするアクセス権
$3 - 脆弱性値 (0 以上の整数)
$4 - PASS または FAIL メッセージの
次にユーザーに表示する関連情報 (オプション)

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

使用例 :


logFileModeMatch /etc/motd 0644 0

 

出力例 :


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

 

logFileNotFound

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

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

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

使用例 :


logFileNotFound /etc/motd

 

出力例 :


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

 

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

logFileOwnerMatchlogFileOwnerNoMatch

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

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

使用例 :


logFileOwnerMatch /etc/motd root 0

 

出力例 :


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

 

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

logFileTypeMatchlogFileTypeNoMatch

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

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

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


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

ファイルタイプ

説明

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 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 7 章を参照してください。

logFinding

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



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



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

使用例 :


logFinding "/etc/motd"

 

出力例 :


test-script /etc/motd

 

logFormattedMessage

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

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

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

使用例 :


logFormattedMessage "Check system controller secure shell configuration."

 

出力例 :


# Check system controller secure shell configuration.

 

logInvalidDisableMode

この関数は、JASS_DISABLE_MODE 環境変数が無効な値に設定されているときに、エラーメッセージを表示します。このユーティリティー関数は、JASS_DISABLE_MODE 環境変数の状態を報告します。この環境変数についての詳細は、第 7 章を参照してください。

この関数は引数をとらず、以下のような出力を行います。


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

 

logInvalidOSRevision

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

使用例 :


logInvalidOSRevision "5.10"

 

出力例 :


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

 

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

この関数は、通知メッセージを表示します。これらのメッセージの表示は、JASS_LOG_NOTICE 環境変数を使用して制御できます。



注 - JASS_LOG_NOTICE 環境変数は、Solaris 10 OS を実行しているシステムには使用しません。



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

logMessage

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

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

使用例 :


logMessage "Verify system controller static ARP configuration."

 

出力例 :


Verify system controller static ARP configuration.

 

logNotGlobalZone

この関数は、大域ゾーンで実行する必要があるためにスクリプトが実行されない logNotice を使用してメッセージを記録します。つまり、スクリプトは非大域ゾーンでは実行できません。

引数: なし

戻り値: なし

使用例 :


logNotGlobalZone

 

logNotice

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

使用例 :


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

 

出力例 :


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

 

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

logPackageExistslogPackageNotExists

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

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

使用例 :


logPackageExists SUNWcsr 0

 

出力例 :


[PASS] Package SUNWcsr is installed.

 

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

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 環境変数を使用して制御できます。これらの環境変数についての詳細は、第 7 章を参照してください。

logProcessArgsMatchlogProcessArgsNoMatch

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

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

使用例 :


logProcessArgsMatch inetd "-t" 0

 

出力例 :


[PASS] Process inetd found with argument -t.

 

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

logProcessExistslogProcessNotExists

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

引数: $1 - プロセス名 (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logProcessExists nfsd 0

 

出力例 :


[PASS] Process nfsd was found.

 

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

logProcessNotFound

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

引数: $1 - プロセス名 (文字列)
$2 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logProcessNotFound inetd

 

出力例 :


[FAIL] Process inetd was not found.

 

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

logScore

この関数は、監査実行時に検出されたエラー数を報告するときに使用します。

引数: $1 - レポートと関連付ける文字列
$2 - エラーの数 (文字列)

戻り値: 監査実行時に検出されたエラー数。

使用例 :


logScore "Script Total:" "0"

 

出力例 :


[PASS] Script Total: 0 Errors

 

logScriptFailure

この関数は、スクリプトの失敗を、対応するスクリプトの失敗ログに記録するときに使用します。

引数: $1 - 失敗のタイプ:
"エラー"
"警告"
"注意"
"失敗"

$2 - 記録された失敗のタイプのカウント (文字列)。

使用例 :


logScriptFailure "failure" 1

 

この例は、${JASS_REPOSITORY}/${JASS_TIMESTAMP}/jass-script-failures.txt ファイルに対して 1 つの失敗を記録します。

logServiceConfigExistslogServiceConfigNotExists

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

引数: $1 - サービス名 (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServiceConfigExists /etc/apache/httpd.conf 0

 

出力例 :


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

 

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

logServiceDisabledlogServiceEnabled

この 2 つの関数は、指定したサービスが同じように有効または無効になっていることを記録するときに使用します。

引数: $1 - サービス名 (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServiceDisabled "svc:/network/telnet:default" 0 ""

 

出力例 :


[PASS] Service svc:/network/telnet:default was not enabled.

 

logServiceInstalledlogServiceNotInstalled

この 2 つの関数は、指定したサービスが同じようにインストールされている、またはインストールされていないことを記録するときに使用します。どちらの関数も必要に応じて単独で使用することができますが、主に check_serviceEnabled 関数および check_serviceDisabled 関数で使用します。

引数: $1 - サービス名 (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServiceInstalled "svc:/network/telnet:default" 1 ""

 

出力例 :


[FAIL] Service svc:/network/telnet:default was installed.

 

logServiceOptionDisabledlogServiceOptionEnabled

この関数は、あるサービスで、指定したオプションが特定の値に設定されているかどうかを記録するときに使用します。この関数は check_serviceOptionDisabled 関数および check_serviceOptionEnabled 関数と一緒に使用します。

引数: $1 - プロセス名 (文字列)
$2 - サービスプロパティー名 (文字列)
$3 - サービス名 (文字列)
$4 - サービスプロパティー値 (文字列)
$5 - 脆弱性値 (数値)
$6 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServiceOptionEnabled "in.ftpd" "inetd_start/exec" "svc:/network/ftp" "-1" 0 ""

 

出力例 :


[PASS] Service in.ftpd of svc:/network/ftp property inetd_start/exec has option -1.

 

logServiceProcessList

この関数は、SMF サービスと関連付けられたプロセスのリストを出力するときに使用します。プロセスごとに、プロセス ID、プロセスユーザー ID、プロセスコマンドの 3 つの項目が出力されます。

引数: $1 - SMF サービス
$2 - PASS または FAIL
$3 - プロセス ID (pid)、プロセスユーザー ID (user)、
およびプロセスコマンド (command) と関連付けられたプロセスの
リスト。

使用例 :


logServiceProcessList svc:/network/telnet 0 "245 root in.telnetd"

 

出力例 :


[PASS] Service svc:/network/telnet was found running (pid 245, user root, command in.telnetd).

 

logServicePropDisabledlogServicePropEnabled

この関数は、あるサービスで、指定したオプションが有効/無効のどちらに設定されているかを記録するときに使用します。どちらの関数も必要に応じて単独で使用することができますが、主に check_serviceOptionEnabled 関数および check_serviceOptionDisabled 関数と一緒に使用します。

引数: $1 - サービス名 (文字列)
$2 - プロパティー名 (文字列)
$3 - プロパティー値 (文字列)
$4 - 脆弱性値 (数値)
$5 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServicePropDisabled svc:/network/ftp enable_tcpwrappers enabled 1 ""

 

出力例 :


[FAIL] Service svc:/network/ftp property enable_tcpwrappers was enabled.

 

logServiceRunninglogServiceNotRunning

この関数は、特定のサービスが実行中であるかどうかを記録するときに使用します。どちらの関数も必要に応じて単独で使用することができますが、主に check_serviceRunning 関数および check_serviceNotRunning 関数と一緒に使用します。

引数: $1 - サービス名 (文字列)
$2 - 脆弱性値 (数値)
$3 - プロセスリスト (オプション)
$4 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logServiceRunning svc:/network/ftp 1

 

出力例 :


[FAIL] Service svc:/network/ftp was not running.

 

logStartScriptExistslogStartScriptNotExists

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

引数: $1 - テストする開始スクリプト (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logStartScriptExists /etc/rc3.d/S89sshd 0

 

出力例 :


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

 

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

logStopScriptExistslogStopScriptNotExists

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

引数: $1 - テストする停止スクリプト (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logStopScriptExists /etc/rc2.d/K03sshd 0

 

出力例 :


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

 

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

logSuccess

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

使用例 :


logSuccess "Package SUNWsshdr is installed."

 

出力例 :


[PASS] Package SUNWsshdr is installed.

 

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

logSummary

この関数は、Solaris Security Toolkit の実行からの概要情報を表示するときに使用します。この関数の引数は、実行と比較するドライバ、およびスクリプトの実行回数です。

使用例 :


logSummary undo.driver 61

 

出力例:


==============================================================================
[SUMMARY] Results Summary for UNDO run of jass-execute
[SUMMARY] The run completed with a total of 91 scripts run.
[SUMMARY] There were  Failures in   0 Scripts
[SUMMARY] There were  Errors   in   0 Scripts
[SUMMARY] There was a Warning  in   1 Script
[SUMMARY] There were  Notes    in  61 Scripts
 
[SUMMARY] Warning Scripts listed in:
         /var/opt/SUNWjass/run/20050616052247/jass-undo-script-warnings.txt
[SUMMARY] Notes Scripts listed in:
         /var/opt/SUNWjass/run/20050616052247/jass-undo-script-notes.txt
==============================================================================

 

logUserLockedlogUserNotLocked

この関数は、特定のユーザーアカウントがロックされていたかどうかを記録するときに使用します。どちらの関数も必要に応じて単独で使用することができますが、主に check_userLocked 関数および check_userNotLocked 関数で使用します。

引数: $1 - ユーザー名 (文字列)
$2 - 脆弱性値 (数値)
$3 - PASS または FAIL メッセージの次に
ユーザーに表示する関連情報 (オプション)

使用例 :


logUserLocked "uucp" 1

 

出力例 :


[FAIL] User uucp was not locked.

 

logUndoBackupWarning

この関数は、元に戻す処理の結果に関する一般的な警告を記録するときに使用します。

使用例 :


logUndoBackupWarning

 

出力例 :


[WARN] Creating backup copies of some files may cause unintended effects.
[WARN] This is particularly true of /etc/hostname.[interface] files as well as crontab files in /var/spool/cron/crontabs.

 

logWarning

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

使用例 :


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

 

出力例 :


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

 

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


その他の共通関数の使用

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

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

adjustScore



注 - この関数は、監査の実行に対してのみ適用されます。



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

引数: $1 - 監査スクリプトの現在のスコアに追加する値 (正の整数)

戻り値: なし

使用例 :


adjustScore 1

 

checkLogStatus



注 - この関数は、監査操作に対してのみ適用されます。



この関数は、呼び出し元関数がその結果を記録するよう要求しているかどうかを判断するときに使用します。

引数: $1 - ログパラメータの値

戻り値: 0 - 呼び出し元関数により記録するよう要求された出力はなし
1 - 値は LOG で、呼び出し元関数がその結果を記録するよう
要求している

使用例 :


checkLogStatus "${_logParameter}"

 

clean_path

この関数は、余分なスラッシュ文字 (/) をファイル名から削除するときに使用します。パス名をユーザーに表示したり、記録したりする前に、この関数を使用してパス名の整理を行います。

引数: $1 - クリーンするパス

戻り値: すべての重複するスラッシュ文字 (/)が削除された後の
$1 にある値を返す。

使用例 :


newPath=`clean_path "${oldPath}"`

 

extractComments

この関数は、ファイルやスクリプトからコメントを削除するときに使用します。この関数では、コメントを数字 (#) で始まり、行の最後まで続くテキストの部分文字列として定義します。

引数: $1 - スクリプト名やファイル名などのトークンのリスト

戻り値: コメントアウトされているすべてのテキストを削除。

使用例 :


FinishScripts=`extractComments "${JASS_FILES}"`

 

get_driver_report

この関数は、ログファイルを読み込み、エラーまたは警告を報告したスクリプトの数を返すときに使用します。

引数: $1 - チェックするログファイル

戻り値: 255 - 指定されていない失敗
0 - 成功
1 - ログファイルは読み取り不可能

使用例 :


failures=`get_driver_report "{JASS_SCRIPT_FAIL_LOG}"`

 

get_lists_conjunction

この関数は、リスト A と B を取得し、A と B 両方にある要素から構成されるリスト C を戻すときに使用します。

引数: $1 - listA (空白で区切られたトークンから構成)
$2 - listB (空白で区切られたトークンから構成)

戻り値: リスト A とリスト B の両方にあるすべての要素を含むリスト C。

使用例 :


SvcsToLog=`get_lists_conjunction "${JASS_SVCS_DISABLE}" "${JASS_SVCS_ENABLE}"`

 

get_lists_disjunction

この関数は、リスト A と B を取得し、リスト A 内には存在するがリスト B には存在しない要素から構成されるリスト C を戻すときに使用します。

引数: $1 - listA (空白で区切られたトークンから構成)
$2 - listB (空白で区切られたトークンから構成)

戻り値: リスト A にはあるがリスト B には存在しない要素を含むリスト C。

使用例 :


SvcsToDisable=`get_lists_disjunction "${JASS_SVCS_DISABLE}" "${JASS_SVCS_ENABLE}"`

 

invalidVulnVal



注 - この関数は、監査操作に対してのみ適用されます。



この関数は、脆弱性値の引数が正の数であるかどうかを判定するときに使用します。この関数は、失敗ごとにエラーメッセージを記録します。脆弱性値として無効な引数が関数に指定されていないかどうかを判定する際に、この関数が必要となります。その他のすべての点では、isNumeric 関数と同様に動作します。

引数: $1 - チェックする脆弱性

戻り値: 0 - 脆弱性は正の数
1 - 脆弱性は正の数ではない

使用例 :


invalidVulnVal "${testVulnerability}"

 

isNumeric

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

引数: $1 - チェックする文字列

戻り値: 0 - 文字列は正の数
1 - 文字列は正の数ではない

使用例 :


isNumeric "${testString}"

 

printPretty

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

引数: $1 - 印刷する文字列

戻り値: なし

使用例 :


printPretty "${CommentHeader}"

 

printPrettyPath

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

引数: $1 - 印刷する文字列

戻り値: なし

使用例 :


printPrettyPath "${PathToLogFile}"

 

strip_path

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

引数: $1 - クリーンするファイルパス

戻り値: なし

使用例 :


StrippedString=`strip_path "${JASS_ROOT_DIR}/etc/motd"`

 


ドライバ関数の使用

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

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

add_crontab_entry_if_missing



注 - この関数は、Solaris 10 OS の SMF でのみ使用します。



この関数は、プログラム $2 がユーザーの $1 crontab ではない場合に、crontab$3crontab に追加するときに使用します。$4 が 0 である場合、変更前に crontab ファイルをバックアップします (使用例を参照)。この関数は crontab コメント行を無視します。

引数: $1 - 変更する crontab のユーザー ID
$2 - crontab に追加するプログラム (フルパス名)
$3 - $2 が crontab ファイルに存在しない場合に追加する crontab
$4 - 0 の場合、変更前に backup_file を呼び出す
(そうでない場合ファイルは作成されているか、
すでにバックアップされている。)

戻り値: 1 - crontab ファイルがバックアップされていた場合。
それ以外の場合は、引数 $4 を変更せずに戻す。

使用例 :


add_crontab_entry_if_missing 'root' '/usr/lib/acct/dodisk' '0 2 * * 4 
/usr/lib/acct/dodisk' 0

 

add_option_to_ftpd_property



注 - この関数は Solaris 10 の SMF にのみ使用し、ftp デーモンにのみ適用されます (オプション -1 または -a)。





caution icon

注意 - 関数 add_option_to_gl_propertyまたは add_option_to_smf_propertyがある場合は、その関数の名前を add_option_to_ftpd_propertyに変更してください。



この関数は、Solaris 10 OS で、SMF が有効な in.ftpd サービスプロパティー値にオプションを追加するときに使用します。強化操作用にのみこの関数を使用します。この関数は、元に戻す処理のための Solaris Security Toolkit マニフェストファイルに書き込みを行います。

引数: $1 - 開始コマンドに追加するオプション a または 1 (それぞれ
ftpaccess(4) および log ftp セッションと使用)

戻り値: なし

使用例 :


add_option_to_ftpd_property "a"

 

add_patch

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


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


表 2-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 のリポジトリが保護されるように注意して使用してください。

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


add_to_manifest operation src dst args

 

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



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



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



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




add_to_manifest 関数で実行できるファイル操作の表。


add_to_manifest 関数で実行できるファイル操作の表。


表 2-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

 

backup_file_in_safe_directory

この関数は、元のディレクトリに格納できないファイルを無効にするとき (詳細は disable_fileを参照)、および元ファイルを移動するだけでなくさらに編集するためにファイルのコピーを残すときに使用します。これには、ディレクトリ /etc/skel//var/spool/cron/crontabs//etc/init.d/、および /etc/rcx.d/ のすべてのファイルが含まれます。

引数: $1 - コピー元ファイルへの完全指定パス
$2 - ファイルを元に戻す「-u」に設定されている場合、以前の
時刻表示はファイル名から削除されます。

戻り値: なし

使用例 :


backup_file_in_safe_directory ${JASS_ROOT_DIR}etc/rcS.d/S42coreadm

 

change_group

この関数は、ファイルグループの所有権を変更するときに使用します。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - ファイル所有者のグループ ID
$2 - グループ所有権を変更する 1 つまたは複数のファイル
通常または特別なファイルまたはディレクトリでなければならず、
ソフトリンクであってはなりません。

戻り値: 0 - ファイルが現在正しいグループ所有権を持っている場合
0 以外 - ファイルまたはファイルアクセス権が指定されていないか、
chown が失敗した場合

使用例 :


change_group root ${JASS_ROOT_DIR}var/core

 

change_mode

この関数は、ファイルのアクセス権モードを変更するときに使用します。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - 8 進数 chmod(1) 形式のファイルアクセス権 (0700 など)
$2 - chmod の対象である 1 つまたは複数のファイル
通常または特別なファイルまたはディレクトリでなければならず、
ソフトリンクは対象となりません。

戻り値: 0 - ファイルが現在正しい所有権を持っている場合
0 以外 - ファイルまたはファイルアクセス権が指定されていないか、
chown が失敗した場合

使用例 :


change_mode 0700 ${JASS_ROOT_DIR}var/core

 

change_owner

この関数は、ファイルの所有権 (およびオプションでグループ) を変更するときに使用します。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - ファイル所有者のユーザー ID
$2 - 所有権を変更する 1 つまたは複数のファイル (通常または
特別なファイル/ディレクトリでなければならず、
ソフトリンクであってはなりません。)

戻り値: 0 - ファイルが現在正しい所有権を持っている場合
0 以外 - ファイルまたはファイルアクセス権が指定されていないか、
chown が失敗した場合

使用例 :


change_owner root:root ${JASS_ROOT_DIR}var/core
change_owner root ${JASS_ROOT_DIR}var/core

 

check_and_log_change_needed

この関数は、共通の操作を移動し、ファイル内の現在の値をチェックし、1 つのファイルにまとめてフレームワーク関数に格納することにより、終了スクリプトをクリーンに保つときに使用します。この関数は、終了スクリプトの作成者が単一ファイル内の変数を繰り返しチェックする場合に便利です。

この関数は、ファイル内で等号 (=) により区切られているパラメータをチェックし、記録します。新しい値が設定されると、グローバル変数 new_var が新しい値に設定されます。それ以外の場合、new_var はファイル内の既存の値に設定されます。最新の値が以前の値と異なる場合、ログメッセージが出力され、グローバル変数 change_needed が増分されます。

この関数は write_val_to_file 関数と一緒に使用してください (write_val_to_fileを参照)。

引数: $1 - ファイル名
$2 - ファイル内のキーワード
$3 - 新しい値

戻り値: 空である場合を除き、グローバル環境変数 new_var
を新しい値に設定。空の場合はファイル内の値に設定され、
設定されていない場合は "" になる。

使用例 :


change_needed="0"
check_and_log_change_needed "/etc/default/passwd" "MINALPHA" "${JASS_PASS_MINALPHA}"
minalpha="${new_var}"
check_and_log_change_needed "/etc/default/passwd" "MINLOWER" "${JASS_PASS_MINLOWER}"
minlower="${new_var}"
 
if [ "${change_needed}" != "0" ]; then
   ...

 

check_os_min_version

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

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


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

if check_os_min_revision 5.10 ; then
    disable_service svc:/network/dns/server:default
elif check_os_min_revision 5.7 ; then
    disable_conf_file ${JASS_ROOT_DIR}etc named.conf
else
    disable_conf_file ${JASS_ROOT_DIR}etc named.boot
fi

 

この例では、まず Solaris 10 OS で使用可能であった SMF FMRI を使用して、ドメインネームシステム (DNS) サービスが無効になっています。それ例外の場合、Solaris 7 OS で DNS を無効にするには /etc/named.conf の名前を変更し、Solaris 2.6 OS またはそれ以前では /etc/named.boot の名前を変更します。

check_os_revision

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

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

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


コード例 2-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 (SunOS 5.1) から 8 (SunOS 5.8) までの範囲内に含まれている場合に、JASS_DISABLE_MODE の値に基づいて、スクリプトと構成ファイルのみを無効にしています。

check_readOnlyMounted

この関数は、指定したファイルが読み取り専用ファイルシステムでマウントされているかどうかを判断するときに使用します。

引数: $1 - チェックするファイル

戻り値: 255 - エラー発生
0 - ファイル $1 が存在するファイルシステムが読み取り専用で
マウントされている。
1 - ファイル $1 が存在するファイルシステムが読み取り専用で
マウントされていいない。

使用例 :


check_readOnlyMounted /usr/bin/ls

 

checksum

この関数は、ファイルのチェックサムの計算に使用します。この関数は、チェックサムが計算されるファイルを示す単一文字列値を引数としてとります。

 

convert_inetd_service_to_frmi

この関数は、/etc/inet/inetd.conf ファイルの inetd サービス名を、inetconv(1M) コマンドで使用する SMF FMRI に変換します。この関数は、SMF FMRI に対してではなく、/etc/inet/inetd.conf でレガシー inetd サービス名のみを使用します。変換された FMRI は標準出力に出力されます。

引数: $1 - 変換する inetd サービス名

戻り値: 0 - 成功
1 - 失敗

使用例 :


tooltalk_fmri=`convert_inetd_service_to_fmri 100083`

 

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"

  

環境変数により指定される値を含むファイル名に付加されているタグに基づいてファイルを選択的にコピーできることで、この関数は機能を拡張しています。(すべての環境変数の詳細は、第 7 章を参照してください。)

コピーするファイルは、次の条件で選択され、照合に使用される優先度順にリストされています。たとえば、ホスト固有ファイルと汎用ファイルの両方が存在し、対象システムの名前がホスト固有ファイルで定義されているホスト名と一致する場合には、ホスト固有ファイルが使用されます。次の例では、JASS_HOME_DIR 環境変数で指定された /opt/SUNWjass をホームディレクトリとして使用しますが、ユーザーによっては別のホームディレクトリを指定している場合があります。この例では、検索対象のディレクトリツリーは /opt/SUNWjass/Files/ です。



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



1. ホスト固有のバージョン - /opt/SUNWjass/Files/file.JASS_HOSTNAME

このオプションでは、ホスト対象プラットフォームの名前と JASS_HOSTNAME 環境変数で指定した値が一致する場合にのみ、ファイルがコピーされます。たとえば、ファイル名が etc/issueJASS_HOSTNAMEeng1 である場合、この条件の下でコピーされるファイルは次のとおりです。

/opt/SUNWjass/Files/etc/issue.eng1

2. キーワード + OS 固有のバージョン - /opt/SUNWjass/Files/file-JASS_FILE_COPY_KEYWORD+JASS_OS_VERSION

このオプションでは、キーワードと OS バージョンの名前が、JASS_FILE_COPY_KEYWORD 環境変数および JASS_OS_VERSION 環境変数で指定した値と一致する場合にのみ、ファイルがコピーされます。

たとえば、検索されるファイルが /etc/hosts.allow であり、JASS_FILE_COPY_KEYWORD が「secure」(secure.driver の場合) であり、かつ JASS_OS_VERSION5.10 である場合、この条件の下でコピーされるファイルは次のとおりです。

/opt/SUNWjass/Files/etc/hosts.allow-secure+5.10

3. キーワード固有のバージョン - /opt/SUNWjass/Files/file-JASS_FILE_COPY_KEYWORD

このオプションでは、JASS_FILE_COPY_KEYWORD 環境変数で指定された値にキーワードが一致する場合にのみ、ファイルがコピーされます。たとえば、JASS_FILE_COPY_KEYWORD が「server」である場合、この条件の下でコピーされるファイルは次のとおりです。

/opt/SUNWjass/Files/etc/hosts.allow-server

4. OS 固有のバージョン - /opt/SUNWjass/Files/file+JASS_OS_REVISION

このオプションでは、対象プラットフォームの OS リビジョンと、JASS_HOSTNAME 環境変数で指定した値が一致する場合にのみ、ファイルがコピーされます。たとえば、検索されるファイルが /etc/hosts.allow であり、JASS_OS_REVISION が「5.10」である場合、この条件の下でコピーされるファイルは次のとおりです。

/opt/SUNWjass/Files/etc/hosts.allow+5.10

5. 汎用バージョン - /opt/SUNWjass/Files/file

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

たとえば、ファイル名が etc/hosts.allow である場合、この条件の下でコピーされるファイルは次のとおりです。

/opt/SUNWjass/Files/etc/hosts.allow

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

create_a_file

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



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



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

使用例 :


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

 

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


表 2-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 環境変数に格納されます。詳細については、第 7 章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 という名前に変更しています。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

disable_service



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、特定の FMRI リスト上のすべての SMF サービスを無効にするときに使用します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - 無効にする 1 つ以上の SMF サービスの FMRI

戻り値: なし

使用例 :


disable_service "svc:/application/x11/xfs:default"

 

enable_service



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、特定の FMRI リスト上のすべての SMF サービスを有効にするときに使用します。この関数では、元に戻す処理を行ったときにこの操作を元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - 有効にする 1 つ以上の SMF サービスの FMRI

戻り値: なし

使用例 :


enable_service "svc:/network/ipfilter:default"

 

find_sst_run_with

この関数は、指定されたキーワード値ペアで、まだアクティブな最新の Solaris Security Toolkit 処理を検索するときに使用します。キーワード値ペアの格納と取得の詳細については、set_stored_keyword_val (set_stored_keyword_val) および get_stored_keyword_val (get_stored_keyword_val) を参照してください。

この関数は、システム上の取り消されていないすべての Solaris Security Toolkit の実行を検索します。実行のいずれかで set_stored_keyword_val コマンドを使用して、検索対象のキーワード値ペアを格納している場合、関数は最新のタイムスタンプを返します。このコマンドを使用している実行が存在しない場合、何も返されません。

引数: $1 - チェックするキーワード
$2 - 検索対象の値

戻り値: そのスクリプトとキーワード値ペアを使用している
最新のアクティブな実行のタイムスタンプを出力し、
そのような実行が見つからなかった場合は "" を出力する。

使用例 :


last_date=`find_sst_run_with MY_STORED_VALUE 17`

 

get_expanded_file_name

この関数は、copy_filesで説明されているタグ拡張ファイル名を返すときに使用します。

引数: $1 - ファイル名

戻り値: 拡張ファイル名、または空 (ファイル名が一致しなかった場合)

使用例 :


get_expanded_file_name /etc/motd

 

この例では、システム jordan 上で関数が実行されたときにファイル JASS_HOME/Files/etc/motd.jordan が存在していた場合、/etc/motd.jordan が返されます。

get_stored_keyword_val

この関数は、保存ファイルから、格納されているキーワード値ペアを取得するときに使用します。使用する保存ファイルのデフォルトは JASS_RUN_VALUES ファイルですが、独自のファイル名を指定できます。

引数: $1 - チェックするキーワード
$2 - リポジトリ名、デフォルトは空白

戻り値: 0 - キーワードを検出。RETURN_VALUE はファイル内で
その値に設定済み
1 - ファイルが見つからない。
2 - キーワードはファイル内で設定されていない。

使用例 :


if get_stored_keyword_val MY_STORED_VALUE; then
...

 

get_users_with_retries_set

この関数は、lock_after_retries が設定されている user_attr エントリを持つパスワード付きのユーザーアカウントを取得するときに使用します。この関数は、監査スクリプトと終了スクリプトの両方で便利です。enable-account-lockout.finまたは enable-account-lockout.audを参照してください。

引数: $1 - 除去するユーザーのリスト

戻り値: パスワードと lock_after_retries が設定されている
ユーザーのリスト。

使用例 :


user_list=`get_users_with_retries_set "root"`

 

is_patch_appliedis_patch_not_applied

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

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

使用例 :


is_patch_applied 123456

 

使用例 :


is_patch_applied 123456-02

 

is_service_enabled



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、SMF サービスが有効であるかどうかを判断するときに使用します。

引数: $1 - チェックする SMF サービスの FMRI

戻り値: 0 - サービスは有効であるか、再起動後有効になる。
1 - サービスは無効でアップグレードマニフェストには
有効化スクリプトが存在しない、または FMRI が
認識されていない。

使用例 :


is_service_enabled "svc:/network/ipfilter:default"

 

is_service_installed



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、SMF サービスがインストールされているかどうかを判断するときに使用します。スタンドアロンモードでは、SMF コマンドが検証を実行します。JumpStart モードでは、サービスマニフェストの .xml ファイルを検索することで検証が実行されます。

引数: $1 - チェックする SMF サービスの FMRI

戻り値: 0 - サービスはインストールされている (スタンドアロンモード)、
またはサービスマニフェストが存在する (JumpStart モード)。
1 - サービスはインストールされていない (スタンダードモード)、
サービスマニフェストが存在しない (JumpStart モード)、
または FMRI が認識されていない。

使用例 :


is_service_installed "svc:/network/ipfilter:default"

 

is_service_running



注 - この関数は、Solaris 10 の SMF でのみ使用し、JumpStart モードでは使用できません。



この関数は、SMF サービスが実行中であるかどうかを判断するときに使用します。

引数: $1 - チェックするサービスの FMRI

戻り値: 0 - サービスは実行中
1 - サービスは実行中ではない

使用例 :


is_service_running "svc:/network/ipfilter:default"

 

is_user_account_extant



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、あるユーザーアカウントが存在するかどうかを判断するときに使用します。

引数: $1 - チェックするユーザーアカウント名

戻り値: 0 - ユーザーアカウントは存在する
1 - ユーザーアカウントは存在しない

使用例 :


is_user_account_extant "nuucp"

 

is_user_account_locked



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、ユーザーアカウントがパスワードファイル内でロックされているかどうかをチェックするときに使用します。

引数: $1 - チェックするユーザーアカウント名

戻り値: 0 - ユーザーアカウントはロックされている
1 - ユーザーアカウントはロックされていない

使用例 :


is_user_account_locked "nuucp"

 

is_user_account_login_not_set



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、あるユーザーアカウントにパスワードが設定されているかどうかをチェックするときに使用します。

引数: $1 - チェックするユーザーアカウント名

戻り値: 0 - ユーザーパスワードは「NP」ではない
1 - ユーザーパスワードは「NP」である

この関数から「NP」(パスワードなし) が返された場合、そのユーザーにはパスワードは定義されておらず、パスワードなしでログインできます。実際にユーザーがパスワードなしでログインできるかどうかは、ユーザーのログイン方法と、そのログインメカニズムのセキュリティー制限によって決まります。たとえば、Secure Shell のデフォルト構成では、パスワードを持っていないユーザーのログインを許可しません。

使用例 :


is_user_account_login_not_set "root"

 

is_user_account_passworded



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、あるユーザーアカウントが /etc/shadow ファイルにパスワードエントリを持っているかどうかを確認するときに使用します。

引数: $1 - チェックするユーザーアカウント名

戻り値: 0 - ユーザーアカウントはパスワードファイル内にある
1 - ユーザーアカウントはパスワードファイル内にない

使用例 :


is_user_account_passworded "root"

 

lock_user_account



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、あるユーザーアカウントをロックするときに使用します。

引数: $1 - ロックするユーザーアカウント名

戻り値: なし

使用例 :


lock_user_account "nuucp"

 

make_link

この関数は、シンボリックファイルリンクを作成するときに使用します。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - ソースリンクファイル名
$2 - 宛先リンクファイル名

戻り値: なし

使用例 :


make_link ../lib/sendmail ${JASS_ROOT_DIR}usr/bin/newaliases

 

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


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

オプション

説明

-a ask_file

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

-o options

pkgrm コマンドオプション

package

削除するパッケージ


 

使用例 :


rm_pkg SUNWadmr

 

set_service_property_value



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、SMF サービスのプロパティー値を設定するときに使用します。

引数: $1 - サービスの FMRI
$2 - 設定するプロパティー名
$3 - 設定するプロパティー値

戻り値: なし

使用例 :


set_service_property_value "svc:/network/inetd" "defaults/tcp_wrappers" "true"

 

set_stored_keyword_val

この関数は、格納されているキーワード値ペアを保存ファイルに設定するときに使用します。使用されるデフォルトのファイルは JASS_RUN_VALUES ファイルです。

引数: $1 - 設定するキーワード
$2 - 設定する値

戻り値: 0 - キーワードは設定されている。ファイル内にすでに存在してい
るキーワードが設定されている場合、古い値は上書きされます
1 - ファイル書き込み時に問題発生。

使用例 :


get_stored_keyword_val MY_STORED_VALUE 23

 

unlock_user_account



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、あるユーザーアカウントのロックを解除するときに使用します。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: $1 - ロックを解除するユーザーアカウント名

戻り値: なし

使用例 :


unlock_user_account "adm"

 

update_inetconv_in_upgrade

この関数は、再起動後に実行されるアップグレードファイルに inetconv(1M) コマンドを実行する指示を書き込むときに使用します。inetconv コマンドは inetd.conf エントリを SMF リポジトリにインポートします。この関数では、元に戻す処理を行ったときに元に戻せるように、必要なマニフェスト項目を自動的に追加します。

引数: なし

戻り値: 0 - 成功
1 - 失敗

使用例 :


update_inetconv_in_upgrade

 

warn_on_default_files

この関数は、ユーザーによって変更されていない Solaris Security Toolkit ソフトウェア内の任意のファイルに関する logWarning コマンドを発行するときに使用します。これらのファイルは Solaris Security Toolkit によりインストール可能ですが、構成が不完全な場合、予期せぬ結果を招くため、これらのファイルをチェックしてファイルが想定どおりであることを確認する必要があります。ファイルを変更したり、ソフトウェアに付属していないカスタムバージョンを使用したりすると、警告は出されません。

引数: ${1} - チェックする 1 つ以上のファイル

接頭辞なしのフロントスラッシュルート (/) を起点とした完全指定の
インストール済みターゲットパスを指定します。
たとえば、/etc/motd のように指定します。

戻り値: なし

使用例 :


warn_on_default_files /etc/opt/ipc/ipf.conf

 

write_val_to_file

この関数は、等号 (=) で区切られている名前値ペアをファイルに書き込むときに使用します。値が NULL である場合、何も書き込まれません。この関数は check_and_log_change_needed 関数と一緒に使用してください (check_and_log_change_neededを参照)。

引数: $1 - ファイル名
$2 - ファイル内のキーワード
$3 - 新しい値

戻り値: なし

使用例 :


write_val_to_file /etc/default/passwd MINALPHA 7

 


監査関数の使用

このソフトウェアの監査関数には、プライベートとパブリックの 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 と表示されます。

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

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


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

ファイルタイプ

説明

b

ブロック型特殊ファイル

c

文字型特殊ファイル

d

ディレクトリ

D

door

f

通常ファイル

l

シンボリックリンク

p

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

s

ソケット


 

使用例 :


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

 

check_if_crontab_entry_present

この関数は、crontab エントリ $2 がユーザー $1crontab ファイル内に存在するかどうかをチェックするときに使用します。

引数: $1 - crontab ファイルの所有者のユーザー名
$2 - crontab テーブル内でチェックするプログラム名

戻り値: 0 - $2 は存在する
0 以外 - crontab エントリ $2 が見つからないか
crontab ファイルが見つからない

使用例 :


check_if_crontab_entry_present adm /usr/lib/acct/ckpacct

 

check_keyword_value_pair

この関数を使用すれば、共通の監査作業である、ファイル内のキーワード値ペアのチェックがより便利になります。キーワードは、等号 (=) によって値から分離された、行の最初の空白文字以外の文字である必要があります。チェック対象のファイルが存在する必要があります。存在しないと、関数の動作が未定義になります。

引数: $1 - チェックするファイル
$2 - $3 内の値と照合してチェックするキーワード
$3 - $2 内のキーワードと照合してチェックする値

戻り値: なし

使用例 :


check_keyword_value_pair {JASS_ROOT_DIR}etc/security/policy.conf CRYPT_DEFAULT 1

 

check_minimized

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

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

使用例 :


check_minimized SUNWatfsu 1 LOG

 

check_minimized_service



注 - この関数は、Solaris 10 OS を実行しているシステム上の SMF でのみ使用します。



この関数は、インストールされていないサービスをチェックするときに使用します。この関数を使用するのは、パッケージの存在が必ずしもエラーではない場合、たとえばシステムが最小化されていない場合などの特別なケースです。この関数は、環境変数 JASS_CHECK_MINIMIZED = 1 (詳細は第 7 章を参照) により制御されます。

引数: $1 - services - チェックするサービスのリスト
$2 - vulnValue - 脆弱性値 (整数)
$3 - logStatus - ログ状態 (オプション)

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - パッケージがまったく存在しない場合
1 - 1 つ以上のパッケージが存在する場合

使用例 :


check_minimized_service "svc:/network/finger:default" 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_serviceDisabledcheck_serviceEnabled



注 - この 2 つの関数は、Solaris 10 の SMF でのみ使用します。



この 2 つの関数は、サービスのリストをチェックして、各サービスが無効と有効のどちらであるかを確認するときに使用します。

引数: $1 - services - チェックするサービスのリスト
$2 - vulnValue - 脆弱性値
$3 - logStatus - ログ状態 (失敗時にログが必要である場合は LOG
に設定)
$4 - relatedInfo - 関連情報の文字列

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - すべてのサービスが無効/有効である場合
1 - 1 つ以上のサービスが無効/有効である場合

check_serviceInstalledcheck_serviceNotInstalled



注 - この 2 つの関数は、Solaris 10 の SMF でのみ使用します。



この関数は、サービスのリストをチェックして、各サービスがインストールされているかどうかを確認するときに使用します。

引数: $1 - services - チェックするサービスのリスト
$2 - vulnValue - 脆弱性値
$3 - logStatus - ログ状態 (失敗時にログが必要である場合は LOG
に設定)
$4 - relatedInfo - 関連情報の文字列

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - サービスがまったく存在しないまたはすべて存在する場合
1 - 1 つ以上のパッケージが存在する、または存在しない場合

使用例 :


check_serviceInstalled svc:/network/ssh:default 1 LOG

 

check_serviceOptionEnabledcheck_serviceOptionDisabled



注 - この 2 つの関数は、Solaris 10 の SMF でのみ使用します。



この 2 つの関数は、SMF コマンドを使用して、あるサービスのプロパティーのオプションが有効と無効のどちらであるかをチェックするときに使用します。

引数: $1 - チェックするサービスのリスト
$2 - チェックするサービスのプロパティー
$3 - オプションの前のパターン
$4 - オプション
$5 - 整数の脆弱性値
$6 - 失敗時にログが必要である場合は LOG に設定 (オプション)
$7 - 関連情報の文字列 (オプション)

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - サービスオプションは有効 (無効)
1 - サービスオプションは無効 (有効)

check_servicePropDisabled



注 - この関数は、Solaris 10 の SMF でのみ使用します。



この関数は、SMF コマンドを使用して、あるサービスのプロパティーのオプションが無効であるかどうかをチェックするときに使用します。

引数: $1 - FMRI のリスト
$2 - property
$3
- vulnvalue
$4
- logStatus

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - プロパティーは有効 (無効)
1 - プロパティーは無効 (有効)

check_serviceRunningcheck_serviceNotRunning



注 - この 2 つの関数は、Solaris 10 の SMF でのみ使用します。



この 2 つの関数は、サービスのリストをチェックして、各サービスが実行中であるかどうかを確認するときに使用します。

引数: $1 - サービスのリスト
$2 - vulnvalue
$3
- logStatus
$4
- related Info

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - すべてのサービスが実行中である/実行中でない
1 - 1 つ以上のサービスは実行中ではない

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

 

check_userLockedcheck_userNotLocked



注 - この 2 つの関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この 2 つの関数は、ユーザーアカウントロックされているかどうかをチェックするときに使用します。

引数: $1 - ユーザー ID

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - ユーザーがロックされている場合
1 - ユーザーがロックされていない場合

finish_audit

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

使用例 :


finish_audit

finish_audit "End of script"

  

get_cmdFromService



注 - この関数は、Solaris 10 OS を実行しているシステムでのみ使用します。



この関数は、実行中のサービスのコマンドまたはプロセスのリストを取得するときに使用します。

引数: $1 - サービス名

戻り値: "" - サービスプロセステストと関連付けられている
プロセスがない場合 - プロセスは
{ pid user comm [pid user common] } の形式で特定の
サービスと関連付けられている

使用例 :


get_cmdFromService svc:/network/ssh:default

 

start_audit

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

引数: $1 - 監査スクリプト名
$2 - 監査スクリプトの説明 (複数行にすることも可能で、
logFormattedMessage 関数を使用してフォーマットされる。)
$3 - PASS または FAIL メッセージの次にユーザーに表示する
関連情報 (オプション)で、logFormattedMessage
関数を使用してフォーマットされる。

戻り値: 255 - エラーが発生した場合、または指定された引数が無効である場合
0 - ユーザーがロックされている場合
1 - ユーザーがロックされていない場合

使用例 :


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

 

出力例 :


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