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(Local System Queue Area)、ジョブ制御などに使うSWA(Scheduler Work Area)などがありますが、異なるサブプールで管理されていて、誤って破壊されることがないようになっています。

    システムが利用する区域としては、OSのカーネル部が格納されるNUC(Nucleus)、各種のシステムルーチンや頻繁に使われる使用頻度の高いサービスルーチンなどが格納されるLPA(Link Pack Area)、OS全体の制御に使用するデータが入るSQA(System Queue Area)、複数空間で共用されるデータを入れるCSA(Common Service Area)などがあります。

    MVSアドレス空間構成表(MSPとVOS3では若干レイアウトが変わります)
    位置 タイプ 区域と主なサブプール番号 アクセス可能度
    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(Authorized Program Facility)で、許可されたプログラムを、APF許可プログラム(MSPでは認定プログラム、VOS3では認可プログラム)と呼びます。