10.セキュリティ
昨今は非常に重要視されるセキュリティ機能はMVSにも備わっています。MVSではソフトウェアだけで行うもの、ハードウェアの機能も利用して行うものに分かれます。前者はデータの機密保持や情報漏洩およびデータ破壊などの防止、後者はシステム運用の保全性を高める目的で使われます。
ソフトウェアによるセキュリティ
データセットのパスワード保護機能(旧セキュリティ機能)
セキュリティには情報漏洩の防止とデータの破壊保護の2つのアプローチがあります。データセットのパスワード保護はMVSが持っていた古典的なセキュリティで、データセットにアクセス用のパスワードを設定して、書き込み保護・読み書き保護を行うものです。非VSAMデータセットのパスワードはそのものずばり「PASSWORD」と言う名前のシステム・データセットに登録され、パスワード保護が指定されたデータセットにアクセスする際にはOSのPASSWORDデータセットが参照されました。データセットのパスワードはIEHPROGMユーティリティなどによって設定されました。VSAMデータセットの場合はカタログが使用されAMSユーティリティによって設定されていました。
またパスワード保護以外にもデータセットには保存期限や満了日付と言ったものが設定でき、期限前だとデータセットの追加書き込みや削除を行うとするとオペレーターに応答を求めることができる機能を持っています。こちらの方はデータの破壊を防ぐ目的でも使用されました。MSPではSYS1で始まる名前のOSライブラリーは満了日付で保護され不用意な内容変更ができないようになっているのがデフォルトの設定になっていたりします。
現在ではRACFによる保護が基本で、特にMVSではパスワードによる方法は推奨されません。非VSAMデータセットに関しては他のOSやプログラムの互換のため機能自体は残っていますがほとんど使われません。またSMS管理データセットにはパスワードは利用できません。VSAMではSMSかどうかに関わらずパスワードはサポートされなくなりました。ですからMVSユーザーであればパスワードによるデータセット保護については新たに知る必要はありません。MSPやVOS3では引き続きサポートされていますが、同様の理由で新たに使われることは少ないでしょう。
RACF(Resource Access Control Facility:リソース・アクセス管理機能)
RACFはパスワードだけによる単純なプロテクトではありません。データセットだけでなく、DASDボリューム、実行プログラム、オンライン・トランザクション、通信機能などコンピューター内のあらゆるリソースに関するアクセスを統合して管理・制御します。MVSではTSOユーザーの管理も従来のSYS1.UADSからRACFに統合することができます。システムの利用者はすべてユーザーとして登録されグループにまとめられます。データセットや実行プログラムなど、どのリソースにどのようにアクセスできるかはグループ単位に設定されます。RACFを運用するとセキュリティは個人のモラルに依存することなくシステム管理者によって統括して管理されるようになります。誰が何をアクセスしたかもロギングされるようになりますし、権限外のリソースにアクセスすれば警告されます。
RACFではいかにして適切なセキュリティ・ルールを作るかが重要です。場合によってはデータセット名の体系から見直すような必要も出るかも知れません。単なるパスワード保護の代わりとして使うならともかく、IT統制のようなレベルで使いこなすにはコンピューターやMVSに詳しいだけでは足りず、経営論や組織論と言ったものに通ずる考え方を応用することになります。効果的に運用するにはDCMS/DBMSによるトランザクション処理システムのように比較的ハイレベルなスキルが必要になるでしょう。何よりその企業のコンピューターシステムを全体から捉えることができななければなりません。
以降はOS自身やメモリー、デバイス資源などをプログラムの誤った動きから破壊されることを防ぐ保全性に関するMVSの機能です。これも一種のセキュリティです。
ハードウェアまたはハードウェア機能を使用したOSによるセキュリティ
サブプールと記憶保護キー
MVSは仮想アドレス空間をいくつかの区域に分けて構成します。システムのプログラム・モジュールが格納される区域以外には制御用のさまざまなデータも置かれます。データの性質によって割り当て領域の管理が変えられるよう、サブプールと言う属性を与えます。例えば使用済み領域を解放するタイミングをタスク終了時にするか空間終了時にするか、どのキーを割り当てるのか、読み出し保護も掛けるか、と言った具合です。用途によって適切なサブプールを選択し、記憶保護キーによってプログラムの異常動作からシステム領域が破壊されないようにしています。
一般のユーザープログラムは記憶保護キー8が割り当てられ、リージョン内のPVTと呼ばれる区域を利用できます。プログラムもデータも同じ区域に置かれますが通常プログラムには251番、動的に獲得したデータ域には0番のサブプールが割り当てられます。同じリージョン内にはMVSがユーザープログラムのタスク制御などに使うLSQA、ジョブ制御などに使うSWAなどがありますが、異なるサブプールで管理されていて誤って破壊されることがないようになっています。
システムが利用する区域としては、OSのカーネル部が格納されるNUC(Nucleus)、各種のシステムルーチンや頻繁に使われる使用頻度の高いサービスルーチンなどが格納されるLPA(Link Pack Area)、OS全体の制御に使用するデータが入るSQA(System Queue Area)、複数空間で共用されるデータを入れるCSA(Common Service Area)などがあります。
位置 | タイプ | 区域と主なサブプール番号 | アクセス可能度 |
---|---|---|---|
2GB | 私用域 (上のリージョン) | 拡張LSQA(SP=253,254,255) SWA(SP=236,237) | 空間単位に独立している |
拡張PVT(SP=0,251,252) | |||
共通域 | 拡張CSA(SP=228,241) | 全空間共通でアクセスできる | |
拡張LPA | |||
拡張SQA(SP=239,245) | |||
拡張NUC | |||
16MB | 共通域 | NUCLEUS | 全空間共通でアクセスできる |
SQA(SP=239,245) | |||
LPA | |||
CSA(SP=228,241) | |||
私用域 (下のリージョン) | LSQA(SP=253,254,255) SWA(SP=236,237) | 空間単位に独立している | |
PVT(SP=0,251,252) | |||
0 | 共通域 | PSA | 全空間共通でアクセスできる |
キー | プログラムや用途 |
---|---|
0 | OS自身やシステム制御用の重要なエリア |
1 | マスタースケジューラーやJES2 |
5 | データ管理 |
6 | VTAM,TCAS |
7 | IMS |
8 | 一般プログラム |
スーパーバイザーモードと許可プログラム
メモリーは記憶保護キーによってガードされ、MVSで動くプログラムは仮想記憶上でしか動作できません。しかしアセンブラー言語でOSが使っている制御用のCPU命令を直接使われてしまうと、MVS側でさまざまな工夫を施しても抜け道ばかりできてしまいます。そこでS/370アーキテクチャーではCPUを命令を一般命令と特権命令に2つに分けて、特権命令はスーパーバイザーモード(監視プログラム状態)と言う特殊なモードでなければ実行できないようにしています。
一般命令は加減乗除算、メモリーとレジスター間のデータ移動など普通のプログラムを作るのに使う命令です。CPUの状態やシステムの制御情報を変更するものなどは特権命令となります。プログラムが特権命令を実行できるかどうかはPSW内のフラグビットで決まります。例えば先に述べた記憶保護キーなどはメモリーのキーに合わせて自分のPSWをプログラムで自由に変更できてしまったら記憶保護の意味などなくなってしまいます。他にもI/O関連命令も特権命令です。MVSではデバイスのI/OはすべてOSが一元管理しますから、プログラムが勝手にI/O命令などを出してチャネルに直接アクセスされないようにする必要があります。
しかしそうは言ってもシステム系のソフトウェアではどうしてもスーパーバイザーモードでなければ処理できないことがあります。そこでそのような必要があるプログラムはあらかじめMVSに登録することで、スーパーバイザーモードに変更するためのAPIを使う許可を得ることができます。これがMVSのAPFで、許可されたプログラムをAPF許可プログラム(MSPでは認定プログラム、VOS3では認可プログラム)と呼びます。
6 Responses to “10.セキュリティ”
Comment from shok
Time 2013年7月11日 at 08:03
VOS3では、 私空間という漢字表記では呼ばず、PRIVATE AREA(プライベート領域若しくはプライベートエリア)と表現しています
「私空間」という表現に、少々驚いています。
共通域は、COMMON AREA(コモン領域、コモンエリア)です
Comment from kamii
Time 2013年7月11日 at 11:12
2点ほど、再確認願います。
1.記事中には「私空間」という表現はしていません。「私用域」は使っていますが、これはprivate Areaの和訳でMVSでもMSPでもVOS3でも共通に通じる言い方と思います。
原語のままのプライベート域とか、あるいは専用域や固有領域とかでもいいのですが、共通域の対語として私用域と記したものです。
また、private Area の訳語としての「私用域」は、IBMの講習「システムプログラマーのためのMVSの基礎」のテキストブックや、書籍「MVSの機能と構造」(千田正彦著)でも使用されています。
2.特権命令はPSWが監視プログラムモードになっていれば実行でき、特認プログラムであるか否かは必須条件ではありません。
事実、私は過去にVOS3において特認プログラム登録しないプログラムで数多くの特権命令を使用したシステム系ソフトウェアを開発してきました。
PSWを監視プログラムモードにするには、認可ライブラリに登録した認可プログラム(AC=1属性でLKEDされたロードモジュール)であればMODESETマクロが利用できます。
MVSのAPF許可プログラムに相当する、認可ライブラリにAC(1)属性でリンクして登録するものは「認可プログラム」とマニュアルには記載されています。
VOS3の特認プログラムはPPT登録(JDJPPTxx)するプログラムを指すものと理解しています。
特認プログラムは認可プログラムの中でも、特に仮想領域の保護キーを8以外のシステムキーにしたり、CANCEL不可やスワップ不可などの特別な属性をデフォルトで与えるようなものを指すと思っています。
そのためMVSでいうAPF許可プログラム機能とVOS3の特認プログラム機能では性質が異なる、というのが私の理解です。
なおMVSとMSPにもPPT機能はありますが、○○プログラムといった区分けした呼び方はないようです。
MODESETなどで動的に制御せずに、プログラムの実行開始時から監視プログラムモードにするにはMVSではPPT登録してPRIV属性を与える方法もありますが、この属性だけを単独で設定するためにPPT登録するのは面倒です。
それよりはただのAPF許可プログラムで作りMODESETなどを使う方が簡単です。ただしVOS3にはPPTにPRIV属性に相当するものがないようなので、もしかしたらVOS3では特認プログラムとしてPPTに登録すればデフォルトで監視プログラムモードになるのかも知れません(VOS3ではPPT登録機能を使った経験がないので実際のところはわかりません)。
仮にそうであれば、特認プログラムであれば特権命令を発行できる、となります。ただし他にも方法はあります。
技術的な正誤というよりは用語の使い方かも知れませんが、技術的な誤解を招きかねないのでできれば再確認いただけるとありがたいです。
Comment from shok
Time 2013年7月11日 at 23:46
ご指摘ありがとうございます。
2点目については、再度確認を致します。若干のお時間を下さい。
確かに、特認プログラムではページ固定にしたりなど特殊な権限を与える事に使うのですが、これと監視プログラムモードの妥当性については確認ができていませんでした
Comment from shok
Time 2013年7月13日 at 17:00
調査致しました。
「認可プログラム」と「特認クログラム」ですが、kamiiさんのご説明通り、
掲載の内容は認可プログラムで正しいことが判りました。
申し訳ございません
私の方で認可プログラムと特認プログラムを混同していました。
認可プログラムは特認プログラムの一部です。
プログラムから特権命令を発行する「認可プロラム」以外に、プログラム自体に特別な権限を与える事ができます。(スワップアウト禁止属性など、、)
これらの権限を与えるには、以下の条件にする必要があります
1)APFパラメタに認可ライブラリを定義
2)PPTに認可プログラム、特認を与える特認プログラムを定義
3)2)で登録したプログラムを1)で定義した認可ライブラリに格納する
認可プログラム、特認プログラムおよびそれらを格納しておく認可ライブラリがVOS3には存在します。特認ライブラリはございません
また、2)にはプログラムの他に特認を与えたいジョブ名を登録する事も可能です。ただし、このジョブ内で実行するプログラムは上記認可ライブラリに登録されている必要があります。
認可ライブラリ以外からロードされたプログラムから特権命令がコールされた場合、ABENDします
Comment from shok
Time 2013年7月13日 at 17:02
「私空間」は「私用域」の間違いです。
PRIVATE AREAという言葉でしか私は学んでこなかったので、私用域という日本語に少し違和感を感じておりました。
Comment from shok
Time 2013年7月11日 at 07:34
特権命令を発行できるプログラムは、「特認プログラム」で、この特認プログラムは、「認可ライブラリ」に格納されている必要があります
認可ライブラリは、IPL前にあらかじめSYS1.PARMLIBに登録しておく事で有効になります。