Contained WithinFind More DocumentationFeatured Support Resources | Download this book in PDF (2433 KB)
第 9 章 システムアカウンティングの設定と管理 (手順)この章では、システムアカウンティングを設定して維持する方法について説明します。 この章の内容は以下のとおりです。 拡張アカウンティングの使用については、『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』の第 4 章「拡張アカウンティング (概要)」を参照してください。 システムアカウンティングの手順については、「システムアカウンティング (作業マップ)」を参照してください。 システムアカウンティングのさまざまなレポートについての参照情報は、第 10 章システムアカウンティング (リファレンス)を参照してください。 システムアカウンティングの新機能この節では、Solaris のシステムアカウンティングの新機能、または機能の変更について説明します。Solaris の新機能の一覧および Solaris リリースについての説明は、『Solaris 10 の概要』を参照してください。 Solaris プロセスアカウンティングと統計の改善点Solaris 10: 負荷平均の内部、cpu usr/sys/idle 、およびアカウンティング機能が改善されました。マイクロステートアカウンティングが従来のアカウンティング機構の代わりに使用されるようになり、デフォルトでは常に有効になっています。したがって、プロセス利用と時間の統計において、わずかな相違が見られることがあります。 マイクロステートアカウンティングの採用によって、ユーザープロセスと、さまざまな状態においてユーザープロセスにかかる時間について、より正確なデータを得られます。さらに、この情報を使用することによって、より正確な負荷平均や統計が、/proc ファイルシステムから生成されます。詳細は、proc(4) のマニュアルページを参照してください。 システムアカウンティングSolaris OS のシステムアカウンティングソフトウェアは、ユーザー接続時間、プロセスに使用された CPU 時間、およびディスク使用量についてのデータを収集および記録できるプログラム群です。一度このデータを収集すると、レポートを生成したり、システム使用に対して課金したりすることができます。 システムアカウンティングは、日次または月次ベースで使用できます。また、ユーザー単位のディスク使用量を追跡することもできます。 アカウンティングプログラムを使用すると、次の作業を行うことができます。
システムアカウンティングプログラムは、設定が済むと、ほとんどの場合自動的に実行されます。 システムアカウンティングの動作自動アカウンティングは、まずアカウンティング起動スクリプトをルートの crontab ファイルに配置することによって設定します。すると、アカウンティング起動スクリプトが、cron コマンドによって自動的に起動されます。 次の概要は、システムアカウンティングのプロセスを示したものです。
システムアカウンティングのコンポーネントシステムアカウンティングソフトウェアは、データから要約ファイルとレポートを生成する C 言語プログラムとシェルスクリプトを提供します。これらのプログラムは /usr/lib/acct ディレクトリにあります。アカウンティングレポートは、/var/adm/acct ディレクトリにあります。 日次アカウンティングによって、次の 4 種類の監査を行うことができます。
接続アカウンティング接続アカウンティングでは、次のデータを調べることができます。
この接続セッション情報を提供するために、システムは次のデータを格納します。
これらのレコードは、date、init 、login、ttymon、acctwtmp などのシステムプログラムの出力によって生成されます。これらは /var/adm/wtmpx ファイルに格納されます。 wtmpx ファイルのエントリには、次の情報を入れることができます。
プロセスアカウンティングプロセスアカウンティングでは、システムで実行される各プロセスに関する次のデータを追跡できます。
プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。 ディスクアカウンティングディスクアカウンティングでは、各ユーザーがディスク上に持っているファイルについて、次のデータを収集しフォーマットできます。
これらのデータは、/usr/lib/acct/dodisk シェルスクリプトによって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加するエントリによって決定されます。一方、dodisk スクリプトは、acctdisk コマンドと acctdusg コマンドを起動します。これらのコマンドは、ログイン名ごとのディスク使用量を収集します。 dodisk スクリプトを実行して収集された情報は /var/adm/acct/nite/disktacct ファイルに格納されます。これらの情報は、次に dodisk スクリプトを実行したときに上書きされます。したがって、dodisk スクリプトは同じ日に 2 回以上実行しないでください。 acctdusg コマンドは、ランダムに書き込まれたため穴があいたファイルに対して過剰に課金します。このような問題が起こるのは、acctdusg コマンドが、ファイルサイズを決めるときに、ファイルの間接ブロックを読み取らないからです。 acctdusg コマンドは、i ノードの現在のファイルサイズの値をチェックして、ファイルのサイズを決めます。 料金計算chargefee ユーティリティーは、ユーザーに提供した特別なサービスに対する課金を、/var/adm/fee ファイルに格納します。特別なサービスとは、たとえば、ファイルの復元です。 このファイルの各エントリは、ユーザーのログイン名、ユーザー ID、および料金から構成されています。このファイルは、runacct スクリプトによって毎日チェックされて、新しいエントリが全体のアカウンティングレコードにマージされます。chargefee スクリプトを実行してユーザーに課金する方法については、「ユーザーに課金する方法」を参照してください。 日次アカウンティング機能の動作次に、日次アカウンティング機能がどのように動作するかを要約して示します。
システムがシャットダウンしたときの動作shutdown コマンドを使用してシステムをシャットダウンした場合は、shutacct スクリプトが自動的に実行されます。shutacct スクリプトは /var/adm/wtmpx ファイルに「理由レコード」を書き込み、プロセスアカウンティングを無効にします。 システムアカウンティング (作業マップ)
システムアカウンティングの設定システムアカウンティングは、システムがマルチユーザーモード (実行レベル 2) のときに実行されるように設定できます。このタスクには通常、次の内容が含まれます。
次の表に、デフォルトのアカウンティングスクリプトを説明します。 表 9–1 デフォルトのアカウンティングスクリプト
デフォルトでどのアカウンティングスクリプトを実行するのかを選択できます。これらのエントリを crontab ファイルに追加すると、システムアカウンティングは自動的に実行されるようになります。
|
# ln /etc/init.d/acct /etc/rc2.d/S22acct |
/etc/init.d/acct を実行レベル 0 の停止スクリプトとしてインストールします。
# ln /etc/init.d/acct /etc/rc0.d/K22acct |
ckpacct、runacct、および monacct スクリプトが自動的に起動するように、adm ユーザーの crontab ファイルに次の行を追加します。
# EDITOR=vi; export EDITOR # crontab -e adm 0 * * * * /usr/lib/acct/ckpacct 30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log 30 7 1 * * /usr/lib/acct/monacct |
dodisk スクリプトが自動的に起動するように、root の crontab ファイルに次の行を追加します。
# crontab -e 30 22 * * 4 /usr/lib/acct/dodisk |
/etc/acct/holidays を編集して祭日と休日を含めます。
詳細については、holidays(4) のマニュアルページと、次の例を参照してください。
システムをリブートするか、次のように入力して、手動でシステムアカウンティングを起動します。
# /etc/init.d/acct start |
この編集された adm の crontab には、ckpacct、runacct、および monacct スクリプトのエントリが含まれています。
#ident "@(#)adm 1.5 92/07/14 SMI" /* SVr4.0 1.2 */ # # The adm crontab file should contain startup of performance # collection if the profiling and performance feature has been # installed. 0 * * * * /usr/lib/acct/ckpacct 30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log 30 7 1 * * /usr/lib/acct/monacct |
この編集された root の crontab には、dodisk プログラムのエントリが含まれています。
#ident "@(#)root 1.19 98/07/06 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data collection. # # 10 3 * * * /usr/sbin/logadm 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean 30 22 * * 4 /usr/lib/acct/dodisk |
次に、/etc/acct/holidays ファイルの例を示します。
* @(#)holidays January 1, 2004 * * Prime/Nonprime Table for UNIX Accounting System * * Curr Prime Non-Prime * Year Start Start * 2004 0800 1800 * * only the first column (month/day) is significant. * * month/day Company * Holiday * 1/1 New Years Day 7/4 Indep. Day 12/25 Christmas |
要求に応じて特別なユーザーサービスを提供する場合、chargefee ユーティリティーを実行してユーザーに課金することができます。特別なサービスには、ファイルの復元やリモート印刷などがあります。chargefee ユーティリティーは、 /var/adm/fee ファイルに料金を記録します。runacct ユーティリティーが実行されるたびに、新しいエントリが拾い出されて、全体のアカウンティングレコードにマージされます。
詳細については、acctsh(1M) のマニュアルページを参照してください。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
# /usr/lib/acct/chargefee username amount |
課金したいユーザーアカウント
ユーザーに対する課金の単位数。この値は、ファイルの印刷や復元のような作業に対してユーザーに課金するために設定する任意の単位。 chargefee ユーティリティーを実行し、特定の作業に対してユーザーに課金するスクリプトを書く必要がある
次の例では、ユーザー print_customer に 10 単位を課金します。
# /usr/lib/acct/chargefee print_customer 10 |
この節では、壊れたシステムアカウンティングファイルを修復し、runacct スクリプトを再起動する方法を説明します。
システムアカウンティングは絶対に障害が発生しないわけではありません。ファイルが壊れたり、失われることがあります。ファイルによっては、単に無視してよいものや、バックアップから復元できるものがあります。ただし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。
wtmpx ファイルは、システムアカウンティングを日常的に運用する上で発生する問題の大部分の原因になっています。日付を手動で変更したときに、システムがマルチユーザーモードになっていると、一連の日付変更レコードが /var/adm/wtmpx ファイルに書き込まれます。wtmpfix ユーティリティーは、日付変更が行われたときに、wtmp レコードのタイムスタンプを調整するように設計されています。ただし、日付変更とリブートの組み合わせによっては、wtmpfix の処理から漏れて、acctcon プログラムの処理が失敗することがあります。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
/var/adm ディレクトリに移動します。
wtmpx ファイルの形式をバイナリから ASCII 形式に変換します。
# /usr/lib/acct/fwtmp < wtmpx > wtmpx.ascii |
wtmpx.ascii ファイルを編集して、壊れたレコードを削除します。
wtmpx.ascii ファイルを再びバイナリファイルに変換します。
# /usr/lib/acct/fwtmp -ic < wtmpx.ascii > wtmpx |
詳細については、fwtmp(1M) のマニュアルページを参照してください。
/var/adm/acct/sum/tacct ファイルの完全性は、システム資源に対してユーザーに課金している場合は重要です。負の数値、重複ユーザー ID、または 65535 のユーザー ID とともに不正な tacct レコードが表示されることがあります。このような場合はまず、prtacct スクリプトを使用して、 /var/adm/acct/sum/tacctprev ファイルを表示してチェックします。内容が正しい場合は、最新の /var/adm/acct/sum/tacct MMDD ファイルに修正します。次に、/var/adm/acct/sum/tacct ファイルを作成し直します。次の手順は、簡単な修復手順の概要を説明しています。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
ディレクトリ /var/adm/acct/sum に移動します。
tacctMMDD ファイルの形式をバイナリから ASCII 形式に変換します。
# /usr/lib/acct/acctmerg -v < tacctMMDD > xtacct |
MMDD は、月と日をあらわす 2 桁の数値を組み合わせたものです。
xtacct ファイルを編集して、壊れたレコードを削除し、重複レコードを別のファイルに書き込みます。
xtacct ファイルを ASCII 形式からバイナリ形式に変換します。
# /usr/lib/acct/acctmerg -i < xtacct > tacctMMDD |
tacctprev ファイルと tacct.MMDD ファイルをマージして tacct ファイルを生成します。
# /usr/lib/acct/acctmerg < tacctprev tacctMMDD > tacct |
runacct スクリプトは、さまざまな理由で失敗することがあります。
一般的な理由には、以下のようなものがあります。
システムクラッシュ
/var ディレクトリの容量不足
wtmpx ファイルの破損
active.MMDD ファイルが存在する場合は、まずエラーメッセージをチェックします。active ファイルおよび lock ファイルが存在する場合は、異常なメッセージがないかどうか fd2log ファイルを調べます。
runacct スクリプトは、引数を指定しないで実行すると、その呼び出しがその日の最初の呼び出しであると想定します。runacct スクリプトを再起動し、runacct スクリプトがアカウントを返す月と日を指定する場合は、引数 MMDD が必要になります。処理のエントリポイントは statefile ファイルの内容に基づきます。statefile ファイルを無効にするには、処理を開始したい状態をコマンド行に指定します。利用可能な状態の説明については、runacct(1M) のマニュアルページを参照してください。
runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。
/var/adm/acct/nite ディレクトリに移動します。
$ cd /var/adm/acct/nite |
lastdate ファイルと lock* ファイル (もしあれば) を削除します。
$ rm lastdate lock* |
lastdate ファイルには、 runacct プログラムが最後に実行された日付が含まれています。次の手順で runacct スクリプトを再起動することによって、このファイルが作成し直されます。
runacct スクリプトを再起動する
$ /usr/lib/acct/runacct MMDD [state] 2> /var/adm/acct/nite/fd2log & |
システムアカウンティングは、一時的に停止することも、永続的に無効にすることもできます。
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
適切な行をコメントアウトすることによって、プログラム ckpacct、runacct、および monacct の実行が停止するように、ユーザー adm の crontab ファイルを編集します。
# EDITOR=vi; export EDITOR # crontab -e adm #0 * * * * /usr/lib/acct/ckpacct #30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log #30 7 1 * * /usr/lib/acct/monacct |
適切な行をコメントアウトすることによって、プログラム dodisk の実行が停止するように、root の crontab ファイルを編集します。
# crontab -e #30 22 * * 4 /usr/lib/acct/dodisk |
システムアカウンティングプログラムを停止します。
# /etc/init.d/acct stop |
(省略可能) 新規に追加したコメント記号を crontab ファイルから削除します。
システムアカウンティングプログラムを再起動して、システムアカウンティングを再び利用できるようにします。
# /etc/init.d/acct start |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
ユーザー adm の crontab ファイルを編集して、プログラム ckpacct、runacct、および monacct 用のエントリを削除します。
# EDITOR=vi; export EDITOR # crontab -e adm |
ユーザー root の crontab ファイルを編集して、プログラム dodisk 用のエントリを削除します。
# crontab -e |
実行レベル 2 用の起動スクリプトのリンクを取り外します。
# unlink /etc/rc2.d/S22acct |
実行レベル 0 用の停止スクリプトのリンクを取り外します。
# unlink /etc/rc0.d/K22acct |
システムアカウンティングプログラムを停止します。
# /etc/init.d/acct stop |