Trusted Solaris 管理の手順

cron、at、batch を使ったジョブの自動実行の管理

cron(1M) は、指定の時刻にコマンドを実行するクロックデーモンです。この節では、cron の動作の概要を説明し、Trusted Solaris における cron の管理と、cron に関連するコマンド群の特徴を説明します。cron に関する基本的な事項については『Solaris のシステム管理 (第 2 巻)』を参照してください。Trusted Solaris における変更点については、at(1)atq(1)atrm(1)cron(1M)crontab(1) の各マニュアルページを参照してください。

バッチジョブの概念の説明

cron は、すべてのスケジュール化されたジョブを実行するために、各イベントを時間順に並べたリストを保持しています。各イベントは、特定のジョブとそれを実行するのに必要な情報を表しています。cron は次の 2 種類のジョブ (cron_job および at_job) を実行します。

crontab ファイル

crontab ファイルは、ユーザーアカウントまたは役割アカウントが crontab(1) コマンドを使うことにより生成されます (Trusted Solaris システムでは、crontab コマンドがアカウントの実行プロファイルにの 1 つに含まれていなければなりません)。crontab ファイルは、1 行ごとに書かれたコマンドから構成されており、これらのコマンドは各コマンド行の先頭部分に指定された時刻に自動的に実行されます。crontab ファイル内の各コマンド行を「cron_job」と呼びます。crontab ファイルは複数の cron_job を含むことができます。crontab ファイルのスプール空間は、/var/spool/cron/crontabs です。

atjob ファイル

atjob ファイルは、ユーザーアカウントまたは役割アカウントが at(1) または batch コマンドを使うことにより生成されます (これらのコマンドがアカウントの実行プロファイルの 1 つに含まれていなければなりません)。 コマンドが実行された時のユーザーの現在のプロセス環境もファイルに保存されます。これらの各ファイルは「at_job」として参照されます。atjob ファイルのスプール空間は /var/spool/cron/atjobs です。

スプールディレクトリにおける異なるラベルを持つジョブのサポート

Trusted Solaris システムでは、crontab および atjob ファイルのスプールディレクトリは MLD として実装されているため、これらのスプールディレクトリには異なる機密ラベルを持つジョブファイルが保持されることになります。スプールディレクトリが MLD であるため、1 人のユーザーは、crontab ディレクトリ内に異なる機密ラベルを持つ複数の crontab ファイルを持つことができます。同様に、1 人のユーザーは、atjobs ディレクトリ内に異なる機密ラベルを持つ複数の atjob ファイルを持つことができます。

ジョブの実行にプロファイルシェルを使うには


注意 - 注意 -

ジョブの実行にプロファイルシェルを指定する場合、セキュリティ管理者役割は、そのジョブの実行に必要なすべてのコマンドが、それを呼び出すユーザーに割り当てられている実行プロファイル内に存在することを確認しておかなければなりません。


cron_job は次の条件のどちらかが満たされている場合、pfsh を使って実行されます。

at または cron ジョブで特権付きのコマンドを実行するには

at または cron ジョブ内のコマンドを実行するのに特権が必要となる場合、強制された特権または継承可能な特権のどちらかが使用されます。

しかし、コマンドを実行するのが誰であるかにかかわらず強制された特権を使ってそのコマンドを実行することは、通常、サイトのセキュリティポリシーには適合しません。このため、通常、セキュリティ管理者役割は、継承可能な特権を使用できるようにするために、次の操作を行う必要があります。

UNIX ドメインソケットを使った通信

Trusted Solaris システムでは、crontab(1)at(1)atrm(1)cron(1M) の間の通信機構として、UNIX ドメインソケットが使用されます。UNIX ドメインソケットを使うことで、トラステッドセキュリティ情報交換ライブラリ (TSIX) の提供するトラステッドネットワーキングインタフェースにより、cron のクライアントから cron へのメッセージやセキュリティ属性の通信を信頼できる方法で実施することが可能となっています。詳細は libt6(3N) のマニュアルページを参照してください。

cron(1M) は、UNIX ドメインソケットの作成とバインド (割り当て) に /etc/cron.d/CRON を使うように変更されています。/etc/cron.d/CRON ファイルは、クロックデーモンによる複数の実行を防ぐためのロックファイルとしても使われます。

クロックデーモンは、有効セット内の net_mac_read 特権を有効にすることでマルチレベルポートを作成します。これにより、クロックデーモンは異なる機密ラベルを持つメッセージを受信できます。

ユーザーが crontab または atjob ファイルを作成、変更、削除すると、 crontabatatrm の各コマンドは、適切なデータを含むメッセージと、そのコマンドのプロセスが持つ機密ラベル情報をクロックデーモンに送信します。クロックデーモンは、このメッセージと機密ラベル情報を受け取ると、そのメッセージを解釈して必要な処理を行います。送信された機密ラベル情報は、対応する SLD 内での crontab または atjob ファイルの作成や削除を行うのに使用されます。

補助ファイル

crontabs ファイル用の crontabs MLD、および各 atjob ファイル用の atjobs MLD には、補助ファイルが作成されます。crontab ファイルや atjob ファイルを変更すると、対応する補助ファイルのデータも変更されます。補助ファイルの名前は、crontab ファイルの場合は username (ユーザー名).ad になり、atjob ファイルの場合は jobname (ジョブ名).ad になります。補助ファイルには、cron がジョブの設定に使用する情報が格納されます。

at および cron の使用を制限するには

管理者は、/etc/cron.d ディレクトリ内の *.allow および *.deny ファイルを使うことで、at および cron の使用を制限できます。

at の場合、使用を許可または禁止するユーザー名を次のファイルに定義します。


daemon
bin
smtp
nuucp
listen
nobody
noaccess

他のユーザーが所有するジョブの使用

デフォルトの Trusted Solaris のセキュリティポリシーでは、ユーザーが他のユーザーの所有するジョブを使用することは禁じられています。ただし、セキュリティ管理者役割は、ユーザー設定を変更することにより、この制限を無効にすることができます。特定のユーザーが他のユーザーの所有するジョブを使用できるようにするには、セキュリティ管理者役割は次の操作を実行する必要があります。

at.admin および cron.admin ファイル

出荷時の状態では、/etc/cron.d にある at.admin および cron.admin ファイルには、システムプロセスが使用する特殊なシステムアカウント名のみが記述されています。このデフォルトの内容を以下に示します。2 つのファイルの内容は同じです


bin
adm
lp
smtp
uucp
nuucp
listen

出荷時の状態では、デフォルトの crontabs SLD (ADMIN_LOW ラベル付き) には、adm、sys、uucp 用の crontab ファイルが含まれています。crontabs MLD にはこれ以外のデフォルトの crontab ファイルは存在せず、また atjobs MLD にはデフォルトの at_job は存在しません。各サイトでは、必要に応じて、特殊なシステムアカウント用に実行する別の crontab や at_job を作成できます。これらのシステムアカウントにはパスワードが割り当てられていないため、これらのアカウントには誰もログインできません。したがって、この機能がなければ、これらのアカウント用の cron_job や at_job に対するいかなる変更も行えないことになります。

他のユーザーの所有するジョブを使用するための条件

atatqatrmcrontab を呼び出すアカウントは、以下の条件を満たす場合にのみ、他のユーザーの所有するジョブの表示、編集、削除が行えます。

at 関連のコマンドの場合の条件

特定のアカウントが、atatqatrm を使って、他のユーザーの所有する at_job を作成 (またはそれを使用) するためには、次の条件を満たすことが必要です。

  1. 指定されたユーザー名、または指定された at_job の所有者のユーザー名が、at.admin ファイルに登録されている特殊なシステムアカウント名の 1 つであること。かつ条件 3 が満たされていること。

  2. 指定された at_job の所有者のユーザー名が、役割アカウント名であること。かつ条件 3 が満たされていること。

  3. アカウントの、実行プロファイル内に「at admin を変更」承認があること。

  4. 条件 1 および 2 のどちらも満たされない場合、呼び出しを行うアカウントの実行プロファイル内に「at user を変更」承認がなければならない。

crontab コマンドの場合の条件

特定のアカウントが、crontab を使って、他のユーザーの所有する crontab ファイルを作成 (またはそれを使用) するためには、次の条件を満たすことが必要です。

  1. 指定されたユーザー名が、cron.admin ファイルに登録されている特殊なシステムアカウント名の 1 つであること。かつ条件 3 が満たされていること。

  2. 指定されたユーザー名が、役割アカウント名であること。かつ条件 3 が満たされていること。

  3. 呼び出しを行うアカウントが「 cron admin を変更」承認を持っていること。

  4. 条件 1 および 2 のどちらも満たされない場合、呼び出しを行うアカウントの実行プロファイル内に「cron users を変更」承認がなければならない。

crontab(1) に対する変更点

crontab(1) コマンドのオプションのうち、Trusted Solaris 環境で変更されているものを表 3-7 に示します。

表 3-7 crontab(1) のオプション
 オプション コメント
-e

呼び出し元のプロセスのラベルと同じラベルで crontab ファイルの作成または変更を行う。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルを編集できる。 ユーザーの passwd エントリに /bin/pfsh が指定されていない場合、crontab -e コマンドは VISUAL 環境変数に定義されているエディタを呼び出す。VISUAL 環境変数がヌルの場合、EDITOR 環境変数に定義されているエディタを呼び出す。どちらの環境変数も定義されていない場合、cron はデフォルトのエディタである ed(1) を使用する。

ユーザーの passwd エントリに /bin/pfsh が指定されている場合、環境変数が vi に設定されているならば adminvi が使用される。環境変数が dtpad に設定されているならば TSOLdtpad が使用される。どちらの環境変数も定義されていない場合、cron はデフォルトのエディタである adminvi を使用する。

-l

呼び出し元のプロセスの機密ラベルで、現在のユーザーが持つ crontab ファイルの内容を表示する。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルの内容を表示できる。

-r

呼び出し元のプロセスの機密ラベルで、ユーザーの crontab ファイルを crontabs ディレクトリから削除する。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルを削除できる。

アクセス制御は変更されていません。ただし、例外として、cron.allow および cron.deny の両方が存在しない場合、すべてのユーザーがジョブ実行を依頼できなくなります。

at コマンドに対する変更点

at(1) コマンドのオプションのうち、Trusted Solaris 環境で変更されているものを次の表に示します。-p オプションは新しく追加されたものです。

表 3-8 Trusted Solaris 版 at(1) のオプション
 オプション コメント
-lat_job 番号がオペランドに指定されていない場合、現在のユーザーが所有しているすべての at_job に関する情報を、呼び出し元プロセスのラベルで表示する。at_job 番号がオペランドに指定されている場合、そのジョブに関する情報だけが表示される。その at_job が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。
-rオペランドに指定された at_job 番号(それ以前にスケジュール化されていたもの)を持つ at_jobs を削除する。その at_job が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブが削除される。
-p ジョブの実行にプロファイルシェルを使用する。

アクセス制御は変更されていません。ただし、例外として、at.allow および at.deny の両方が存在しない場合、すべてのユーザーがジョブ実行を依頼できなくなります。

atq コマンドに対する変更点

atq(1) コマンドに対する変更点を下の表に示します。

表 3-9 Trusted Solaris における atq(1) の変更点
 引数 説明
 なし呼び出したユーザーが所有している atjob を、呼び出し元プロセスの機密ラベルで表示する。その atjob が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。
user引数に指定したユーザーが、このコマンドを呼び出したユーザーである場合、指定のユーザーが所有しているすべての atjob を表示する。引数に指定したユーザーが、このコマンドを呼び出したユーザーでない場合、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。

atrm コマンドに対する変更点

atrm(1) コマンドに対する変更点を下の表に示します。

表 3-10 Trusted Solaris における atrm(1) の変更点
 引数 説明
user引数に指定したユーザー (user) が、このコマンドを呼び出したユーザーである場合、指定のユーザーが所有しているすべての atjob を削除する。引数に指定したユーザーが、このコマンドを呼び出したユーザーでない場合、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブが削除される。
 at_job # オペランドに指定された at_job 番号を持つジョブで、呼び出し元プロセスの機密ラベルを持つものを削除する。
option -a このコマンドを呼び出したユーザーが所有するすべての atjob で、呼び出し元プロセスの機密ラベルを持つものを削除する。

その他の注意点

cron(1M) はブートプロファイルによって、ADMIN_LOW 機密ラベルで起動されます。その後、cron(1M) が UNIX ドメインソケットを ADMIN_LOW で作成してから以降は、ADMIN_HIGH 機密ラベルで動作するよう変更されます。

Trusted Solaris は、次の crontab ファイルが添付された状態で出荷されます。

/var/cron/log ファイルは、クロックデーモンにより ADMIN_HIGH 機密ラベルで作成されます。このログファイルには、クロックデーモンの内部メッセージが記録されます。