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) を実行します。
at によってスケジュール化される、将来の指定された時間に1度だけ実行される単一の実行ジョブ (at_job)
batch によってスケジュール化される単一の実行ジョブ (at_job)。batch は at(1) のフロントエンドスクリプトであり、システム負荷レベルが許すと即座にジョブ実行を依頼する。
crontab によってスケジュール化される、指定された時間間隔で繰り返し実行される周期的実行ジョブ (cron_jobs)。
cron_job および at_job は、それぞれ対応するスプールディレクトリに格納されている crontab または atjob ファイルを cron が読み込むことによりスケジュール化されます。これらのファイルを cron が読み込むタイミングは次のどちらかです。
cron 自身のプロセスの初期化時
crontab または atjob ファイルに変更が行われた後
crontab ファイルは、ユーザーアカウントまたは役割アカウントが crontab(1) コマンドを使うことにより生成されます (Trusted Solaris システムでは、crontab コマンドがアカウントの実行プロファイルにの 1 つに含まれていなければなりません)。crontab ファイルは、1 行ごとに書かれたコマンドから構成されており、これらのコマンドは各コマンド行の先頭部分に指定された時刻に自動的に実行されます。crontab ファイル内の各コマンド行を「cron_job」と呼びます。crontab ファイルは複数の cron_job を含むことができます。crontab ファイルのスプール空間は、/var/spool/cron/crontabs です。
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 を使って実行されます。
アカウントの passwd(1) エントリに登録されているログインシェルが pfsh である
$SHELL
環境変数の値が /bin/pfsh である
上記のどちらの条件も満たされない場合、cron は cron_job の実行にデフォルトの Bourne シェルである sh(1) を使います。
at コマンドの場合、ユーザーは -c(csh)、-k(ksh)、-s(sh)、-p(pfsh) の各オプションを使って、ジョブの実行に使うシェルを指定できます。このため、at_job の場合、その実行にプロファイルシェルが使われる条件として、3 つ目の場合があります。
アカウントの passwd エントリに登録されているログインシェルが pfsh である
$SHELL
環境変数の値が pfsh である
at コマンドが -p オプション付きで指定された場合
上記のどの条件も満たされない場合、at は次のどちらかのシェルを使います。
-c、-k、-s オプションのいずれかで指定されたシェル
デフォルトのシェル (sh)
at または cron ジョブ内のコマンドを実行するのに特権が必要となる場合、強制された特権または継承可能な特権のどちらかが使用されます。
しかし、コマンドを実行するのが誰であるかにかかわらず強制された特権を使ってそのコマンドを実行することは、通常、サイトのセキュリティポリシーには適合しません。このため、通常、セキュリティ管理者役割は、継承可能な特権を使用できるようにするために、次の操作を行う必要があります。
プロファイルマネージャを使って、コマンドとその実行に必要となる特権を、それを呼び出すユーザーの実行プロファイル内に指定すること。
そのジョブの実行にプロファイルシェルを使用するよう指定すること (「ジョブの実行にプロファイルシェルを使うには」を参照のこと)。
詳細は、「特権がコマンドとアクションに割り当てられる方法」、「コマンドに強制された特権を付与するには」、「コマンドやアクションに「継承可能な特権」を付与する」などを参照してください。また、cron ジョブ の使用例については、「特権コマンドを実行するプロファイルシェルスクリプトを作成するには」を参照してください。
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 ファイルを作成、変更、削除すると、 crontab、at、atrm の各コマンドは、適切なデータを含むメッセージと、そのコマンドのプロセスが持つ機密ラベル情報をクロックデーモンに送信します。クロックデーモンは、このメッセージと機密ラベル情報を受け取ると、そのメッセージを解釈して必要な処理を行います。送信された機密ラベル情報は、対応する SLD 内での crontab または atjob ファイルの作成や削除を行うのに使用されます。
各 crontabs ファイル用の crontabs MLD、および各 atjob ファイル用の atjobs MLD には、補助ファイルが作成されます。crontab ファイルや atjob ファイルを変更すると、対応する補助ファイルのデータも変更されます。補助ファイルの名前は、crontab ファイルの場合は username (ユーザー名).ad になり、atjob ファイルの場合は jobname (ジョブ名).ad になります。補助ファイルには、cron がジョブの設定に使用する情報が格納されます。
管理者は、/etc/cron.d ディレクトリ内の *.allow および *.deny ファイルを使うことで、at および cron の使用を制限できます。
at の場合、使用を許可または禁止するユーザー名を次のファイルに定義します。
at.allow
at.deny
cron の場合、使用を許可または禁止するユーザー名を次のファイルに定義します。
cron.allow
cron.deny
*.allow ファイルが存在する場合、対応する *.deny ファイルは検査されません。*.allow ファイルが存在しない場合、*.deny ファイルが検査されますが、この場合、*.deny ファイルが空であると、どのユーザーでもジョブの実行を依頼できるようになります。Trusted Solaris 環境では、*.allow ファイルと *.deny ファイルの両方が存在しない場合、どのユーザーもジョブの実行を依頼できなくなります。Trusted Solaris システムは cron.allow および at.allow ファイルなしで出荷されます。デフォルトの cron.deny および at.deny には、次のアカウント名が含まれています。
daemon bin smtp nuucp listen nobody noaccess |
デフォルトの Trusted Solaris のセキュリティポリシーでは、ユーザーが他のユーザーの所有するジョブを使用することは禁じられています。ただし、セキュリティ管理者役割は、ユーザー設定を変更することにより、この制限を無効にすることができます。特定のユーザーが他のユーザーの所有するジョブを使用できるようにするには、セキュリティ管理者役割は次の操作を実行する必要があります。
/etc/cron.d ディレクトリにある at.admin および cron.admin を編集する
at および cron 関連の特権を割り当てる
出荷時の状態では、/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 に対するいかなる変更も行えないことになります。
at、atq、atrm、crontab を呼び出すアカウントは、以下の条件を満たす場合にのみ、他のユーザーの所有するジョブの表示、編集、削除が行えます。
特定のアカウントが、at、atq、atrm を使って、他のユーザーの所有する at_job を作成 (またはそれを使用) するためには、次の条件を満たすことが必要です。
指定されたユーザー名、または指定された at_job の所有者のユーザー名が、at.admin ファイルに登録されている特殊なシステムアカウント名の 1 つであること。かつ条件 3 が満たされていること。
指定された at_job の所有者のユーザー名が、役割アカウント名であること。かつ条件 3 が満たされていること。
条件 1 および 2 のどちらも満たされない場合、呼び出しを行うアカウントの実行プロファイル内に「at user を変更」承認がなければならない。
特定のアカウントが、crontab を使って、他のユーザーの所有する crontab ファイルを作成 (またはそれを使用) するためには、次の条件を満たすことが必要です。
指定されたユーザー名が、cron.admin ファイルに登録されている特殊なシステムアカウント名の 1 つであること。かつ条件 3 が満たされていること。
指定されたユーザー名が、役割アカウント名であること。かつ条件 3 が満たされていること。
条件 1 および 2 のどちらも満たされない場合、呼び出しを行うアカウントの実行プロファイル内に「cron users を変更」承認がなければならない。
crontab(1) コマンドのオプションのうち、Trusted Solaris 環境で変更されているものを表 3-7 に示します。
表 3-7 crontab(1) のオプションオプション | コメント |
---|---|
-e |
呼び出し元のプロセスのラベルと同じラベルで crontab ファイルの作成または変更を行う。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルを編集できる。 ユーザーの passwd エントリに /bin/pfsh が指定されていない場合、crontab -e コマンドは ユーザーの passwd エントリに /bin/pfsh が指定されている場合、環境変数が vi に設定されているならば adminvi が使用される。環境変数が dtpad に設定されているならば TSOLdtpad が使用される。どちらの環境変数も定義されていない場合、cron はデフォルトのエディタである adminvi を使用する。 |
-l |
呼び出し元のプロセスの機密ラベルで、現在のユーザーが持つ crontab ファイルの内容を表示する。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルの内容を表示できる。 |
-r |
呼び出し元のプロセスの機密ラベルで、ユーザーの crontab ファイルを crontabs ディレクトリから削除する。「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、ユーザーは、他のユーザーの所有する crontab ファイルを削除できる。 |
アクセス制御は変更されていません。ただし、例外として、cron.allow および cron.deny の両方が存在しない場合、すべてのユーザーがジョブ実行を依頼できなくなります。
at(1) コマンドのオプションのうち、Trusted Solaris 環境で変更されているものを次の表に示します。-p オプションは新しく追加されたものです。
表 3-8 Trusted Solaris 版 at(1) のオプションオプション | コメント |
---|---|
-l | at_job 番号がオペランドに指定されていない場合、現在のユーザーが所有しているすべての at_job に関する情報を、呼び出し元プロセスのラベルで表示する。at_job 番号がオペランドに指定されている場合、そのジョブに関する情報だけが表示される。その at_job が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。 |
-r | オペランドに指定された at_job 番号(それ以前にスケジュール化されていたもの)を持つ at_jobs を削除する。その at_job が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブが削除される。 |
-p | ジョブの実行にプロファイルシェルを使用する。 |
アクセス制御は変更されていません。ただし、例外として、at.allow および at.deny の両方が存在しない場合、すべてのユーザーがジョブ実行を依頼できなくなります。
atq(1) コマンドに対する変更点を下の表に示します。
表 3-9 Trusted Solaris における atq(1) の変更点引数 | 説明 |
---|---|
なし | 呼び出したユーザーが所有している atjob を、呼び出し元プロセスの機密ラベルで表示する。その atjob が現在のユーザーの所有するものでないならば、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。 |
user | 引数に指定したユーザーが、このコマンドを呼び出したユーザーである場合、指定のユーザーが所有しているすべての atjob を表示する。引数に指定したユーザーが、このコマンドを呼び出したユーザーでない場合、「他のユーザーが所有するジョブの使用」に述べた条件を満たす場合にのみ、そのジョブに関する情報が表示される。 |
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 ファイルが添付された状態で出荷されます。
ADMIN_HIGH
機能ラベルを持つ、root、uucp、adm、sys 用の crontab ファイルと補助ファイルの組み合わせ
ADMIN_HIGH
機密ラベルを持つ、root および lp 用の crontab ファイルと補助ファイルの組み合わせ
/var/cron/log ファイルは、クロックデーモンにより ADMIN_HIGH
機密ラベルで作成されます。このログファイルには、クロックデーモンの内部メッセージが記録されます。