Trusted Solaris 管理の手順

ソフトウェアを追加する手順

パッケージを追加するために CD-ROM をマウントするには

  1. システム管理者役割になり、ADMIN_LOW ワークスペースに移動します。

    必要に応じて 「ログイン後、特定の管理役割になるには」を参照してください。

  2. CD-ROM デバイスを割り当てます。

    「トラステッドパス (Trusted Path)」メニューの「デバイスを割り当てる (Allocate Device)」オプションを使うか、フロントパネルの「トラステッドデスクトップ (Trusted Desktop)」サブパネルからデバイス割り当てマネージャを起動します。「デバイス割り当てマネージャ (Device Allocation Manager)」ダイアログボックスが表示されます。

  3. 「利用可能なデバイス (Available Devices)」一覧から CD-ROM デバイスの名前をダブルクリックして、「割り当てられたデバイス (AllocatedDevices)」一覧に移動します。

    「デバイス割り当て: ラベルを選択 (Device Allocation: Select Label)」ダイアログボックスが表示されます。

  4. 「ラベルを選択 (Select Label)」ダイアログボックスにおいて、機密ラベルとして ADMIN_LOW が指定されていることを確認し、「了解 (OK)」をクリックします。

    次のようなプロンプトが現れて、指定したラベルが表示されます。


    Insert disk into /dev/dsk/c0t6d0s0.
     Make sure disk is labeled:
         ADMIN_LOW
     Press RETURN when cdrom_0 is ready or ^C to cancel...
  5. CD-ROM をドライブに挿入し、Return キーを押します。

    次のようなプロンプトが表示されます。


    Do you want cdrom_0 mounted: (y/n)?
  6. y と答えます。

    /cdrom ディレクトリが存在しない場合は作成されます。そして、/cdrom ディレクトリに CD-ROM がマウントされます。

  7. プロンプトが表示されたら、Return キーを押して、ウィンドウを閉じます。

アプリケーションの設定: スーパーユーザーの実 UID を使用して実行する

  1. セキュリティ管理者役割になり、ユーザーマネージャを使用して、インストール作業を担当する信頼できるユーザーのアカウントにスーパーユーザー役割を割り当てます。

    詳細は、第 5 章「ユーザーマネージャを使ったアカウントの設定」を参照してください。

  2. プロファイルマネージャを使用して、スーパーユーザーに割り当てられているプロファイルの 1 つにアプリケーションプログラムの名前を割り当てます。

    詳細は、第 8 章「ユーザーおよび役割のための実行プロファイルの管理」を参照してください。

  3. (推奨) ユーザーマネージャを使用し、作業が終了した時点でアカウントからスーパーユーザーの役割を削除します。

アプリケーションの設定: スーパーユーザーの実効 UID を使用して実行する

  1. プロファイルマネージャを使用して、適切なプロファイルにアプリケーションプログラムのコマンド名を割り当て、コマンドにスーパーユーザーの UID を付与します。

    詳細は、第 8 章「ユーザーおよび役割のための実行プロファイルの管理」を参照してください。

  2. ユーザーマネージャを使用して、プロファイルシェルを持つ任意のアカウントに、追加されたコマンドが登録されているプロファイルを割り当てます。

    第 5 章「ユーザーマネージャを使ったアカウントの設定」を参照してください。

アプリケーションに必要な特権を調べるには

  1. セキュリティ管理者役割になり、ADMIN_LOW ワークスペースに移動します。

    詳細は、「ログイン後、特定の管理役割になるには」を参照してください。

  2. (省略可能) 新しいプロファイルを作成し、そのプロファイルを管理役割に割り当てます。


    注 -

    デフォルトの構成において、セキュリティ管理者役割は runpd コマンドが割り当てられている唯一の役割です。この手順では、特権デバッグ専用の管理役割も作成できます。この役割を使うと、通常のユーザーがユーザー認可範囲内のラベルでコマンドを実行したとき、あるいは管理役割が管理ラベルのいずれかでコマンドを実行したとき、そのコマンドに必要な特権を見つけることができます。


    1. プロファイルマネージャを使って、/usr/sbin/runpd/bin/getfpriv、および /bin/setfpriv 特権、「システムをシャットダウン」「ログインを有効化」、および 「ファイルの特権を設定」 承認、さらに、必要であれば、「管理用エディタ (Admin Editor)」アクションを持つ新しいプロファイルを作成します。そして、/usr/sbin/runpd を実行する前に、役割が以下の手順に従って特権デバッグを実行できるように設定します。

    2. ユーザーマネージャを使って、管理役割 (たとえば prvdbg) を作成し、その役割に上記プロファイルを割り当てます。必要であれば、All プロファイルも割り当てます。

    3. 特権デバッグ役割をアカウントに割り当てます。

  3. 「管理用エディタ (Admin Editor)」アクションを使って、/etc/system ファイル内の tsol_privs_debug 設定を 1 に変更します。


    set tsol_privs_debug=1
    
  4. 「管理用エディタ (Admin Editor)」アクションを使って、/etc/syslog.conf ファイル内の kern.debug から始まる行の前にあるコメントマーク (#) を削除します。

    次の行は、システムコールやデーモンに必要な特権を /var/log/privdebug.log ファイルに記録します。


    kern.debug;daemon.debug;local0.debug  /var/log/privdebug.log
  5. 「トラステッドパス (TP)」メニューの「シャットダウン」オプションを使ってコンピュータをシャットダウンし、リブートします。


    ok  boot
    
  6. ログインし、セキュリティ管理者役割になります。あるいは、特権デバッグ専用の役割を作成した場合 (手順 2 を参照)、特権デバッグ専用の役割になります。

  7. 適切な機密ラベルを持つ端末エミュレータで、runpd コマンド、検査対象のコマンド、およびそのコマンドがどのように特権を使うのかを調べるためのオプションを (この順番で) 入力します。


    注 -

    ワークスペースの機密ラベルは、コマンドが通常実行される機密ラベルである必要があります。管理役割が管理ラベルでアプリケーションを実行することもあれば、一般ユーザーがユーザー認可範囲内のラベルで同じアプリケーションを実行することもあります。


    次の例に示すように、runpd は、プログラムが正常に実行されるために必要な特権の名前、試行されたアクセスの種類 (たとえば create)、資源の名前 (たとえば RAW_SOCKET) を並べて表示します。


    $ runpd pathname_of_command_and_any_options
    
    runpd: child terminated with a status of 0
    
    process pathname_of_command pid process_ID lacking privilege privilege_name
    to perform type_of_access upon resource resource_name (MM DD HH:MM) 

    次の例は、ping(1M)runpd(1M) を実行した結果を示しています。この例の目的は、ping の強制された特権が削除されていることを確認することです。


    $ runpd /usr/sbin/ping sif 
    sif is alive runpd: child terminated with a status of 0 
    process /usr/sbin/ping pid 5138 lacking privilege net_rawaccessto create raw
    socket (Oct 25 18:33) process /usr/sbin/ping pid 5138 lacking privilege sys_
    net_config to manage transport opts (Oct 25 18:33)
  8. ADMIN_HIGH ワークスペースに移動し、ログファイルに特権デバッグのメッセージがあるかどうかを調べます。

    次に、典型的な特権デバッグのログエントリを示します。


    $ cat /var/log/privdebug.log
    Mar 29 12:18:43 hostname unix: DEBUG: pathname_of_command pid 
    process_ID lacking privilege number to 
    number_of_type_of_access number_resource
    

    次の例は、pingrunpd を実行したときの privdebug.log エントリを示しています。


    Oct 25 18:33:35 tribble unix: DEBUG: /usr/sbin/ping pid 5138 lacking privilege
    36 to create raw socket
    Oct 25 18:33:35 tribble unix: DEBUG: /usr/sbin/ping pid 5138 lacking privilege
    68 to manage transport opts

    「privilege」の後に特権番号が表示されます。この特権番号を /usr/include/sys/tsol/priv_names.h ファイルで検索すると、特権の名前がわかります。たとえば、特権番号 36 は、net_rawaccess という名前の特権に割り当てられています。特権番号とその後の 「to」 に続く番号は、試行されたアクセスの種類で、その後に資源の番号が表示されます。

  9. 必要な特権を割り当てる方法については、「コマンドに強制された特権を付与するには」を参照してください。また、プロファイルマネージャを使用して継承可能な特権を割り当てる方法については、第 8 章「ユーザーおよび役割のための実行プロファイルの管理」を参照してください。


    注 -

    コマンドが強制された特権または継承可能な特権を使用するためには、その特権がコマンドの許容された特権セットで使用可能になっている必要があります。


  10. 特権デバッグを無効にするには、手順 3 から手順 4 までで変更した /etc/system ファイルと /etc/syslog.conf ファイルの内容をすべて元に戻し、コンピュータを再起動します。

コマンドに強制された特権を付与するには

  1. ファイルの所有者、ファイル所有者承認の役割を持つユーザー、またはセキュリティ管理者として、プログラムファイルが格納されているディレクトリに移動します。

    指定のディレクトリに移動するにはファイルマネージャを使うか、コマンド行から cd(1) コマンドを使います。詳しくは、『OpenWindows ユーザーズガイド』および『Solaris 共通デスクトップ環境 ユーザーズ・ガイド』を参照してください。

  2. ファイルが実行可能であることを確認します。

    ファイルマネージャの「アクセス権 (Permissions)」ダイアログボックスで所有者、グループ、その他の「実行 (Execute)」チェックボックスにチェックマークが付いていることを確認します。ファイルマネージャの「アクセス権 (Permissions)」オプションについての詳細は、『Trusted Solaris ユーザーズガイド』を参照してください。プロファイルに setfpriv(1) コマンドが設定されていて、コマンドのプログラムファイルの所有者でもある場合、デフォルトのセキュリティ管理者役割である場合、あるいは「ファイルの所有者を変更」承認を持っている場合は、コマンド行から setfpriv(1) を実行して、他のユーザーがそのコマンドを実行できるようにすることもできます。

  3. コマンドに割り当てられている「許容された特権」が、これから割り当てる予定の「強制された特権」と同じであることを確認します。

    1. ファイルマネージャの「アクセス権 (Permissions)」ダイアログボックスで、「許容された特権 (Allowed)」を選択して許容された特権を割り当て、次に「強制された特権 (Forced)」を選択して強制された特権を割り当てます。

    2. 自分に割り当てられているプロファイルの 1 つに、必要な特権と一緒に setfpriv(1) が設定されている場合 (デフォルトでは、セキュリティ管理者役割) は、setfpriv を使用して許容セットと強制セットに同じ特権を割り当てます。

      次の例では、file_dac_readfile_dac_write を許容された特権と強制された特権に設定しています。


      $ setfpriv -s -f file_dac_read,file_dac_write -a file_dac_read,file_dac_write test.priv.file
      

トラステッドプログラムをトラステッドライブラリにリンクするには

  1. セキュリティ管理者役割になり、ADMIN_LOW ワークスペースに移動します。

    詳細は、「ログイン後、特定の管理役割になるには」を参照してください。

  2. 可能な場合は、特権アプリケーションが使用する共用ライブラリを表 1-4 に示したデフォルトのトラステッドライブラリディレクトリに移動します。

    表 16-4 共用ライブラリのデフォルトディレクトリ
     トラステッド C 関数ライブラリ X サーバー用トラステッド拡張
    /usr/lib /usr/openwin/lib
    /etc/lib/usr/dt/lib

  3. 特権を必要とするアプリケーションの共用ライブラリをトラステッドディレクトリに移動できない場合は、rtld ファイルにそのライブラリ用のディレクトリ名を追加します。

    1. 「管理用エディタ」アクションを使用して、/etc/security/tsol/rtld ファイルを新規に作成するか、既存のファイルを開いて編集します。

      詳細は、「管理用エディタアクションを使用してファイルを編集するには」を参照してください。

    2. ライブラリディレクトリのパス名を指定します。

      複数のパス名を指定するときは、それぞれをコロンで区切らなければなりません。


      /usr/lib/libname1:/usr/lib/libname2
      
    3. rtld ファイルを保存し、処理を終了します。


      :wq
      

特権コマンドを実行するプロファイルシェルスクリプトを作成するには


注 -

継承された特権を使ってコマンドを実行するプロファイルシェルスクリプトを追加する場合、プロファイルマネージャを使って適切なプロファイルを更新する必要があります。この手続きによってシェルスクリプト内で動作するコマンドが登録され、コマンドに適切な特権が割り当てられます。ある役割が、新しいプロファイルシェルスクリプトを使う必要がある場合、特権を必要とするすべてのコマンドを、そのスクリプト名とともに、役割に適用される Custom role_name またはその他のプロファイルに追加します。これは、セキュリティ管理者役割の仕事です。


プロファイルシェルスクリプトを作成するための条件は、テキストエディタを使用できることです。

  1. スクリプトの 1 行目は /bin/pfsh (この他のシェルは使用しません) で開始します。


    #!/bin/pfsh
  2. 特権が必要なコマンドと、このコマンドに必要な特権を判断します。

    次の例では、/usr/lib/fs/nfs/nfsfindcron ジョブで、スーパーユーザーが所有しています。これを ADMIN_HIGH で正常に実行するには、特権が必要です。tfind コマンドには file_dac_search 特権と file_dac_read 特権が必要で、rm コマンドには file_dac_searchfile_mac_writefile_dac_read、file_mac_write の各特権が必要です。詳細は、「アプリケーションに必要な特権を調べるには」を参照してください。


    #!/bin/pfsh
    # Copyright (c) 1993, 1997, 1998, 1999 by Sun Microsystems, Inc.
    #ident  "@(#)nfsfind.sh 1.5     97/05/21 SMI; TSOL 2.x"
    #
    # Check shared NFS filesystems for .nfs* files that
    # are more than a week old.
    # 
    # These files are created by NFS clients when an open file
    # is removed. To preserve some semblance of Unix semantics
    # the client renames the file to a unique name so that the
    # file appears to have been removed from the directory, but
    # is still usable by the process that has the file open.
    if [ ! -s /etc/dfs/sharetab ]; then exit ; fi
     for dir in `awk '$3 == "nfs" {print $1}' /etc/dfs/sharetab`
    do 
        tfind $dir -M -name .nfs¥* -mtime +7 -mount -exec rm -f {} ¥;
    done
  3. セキュリティ管理者役割になり、ADMIN_LOW シェルに移動します。

    詳細は、「ログイン後、特定の管理役割になるには」を参照してください。

  4. プロファイルマネージャを使用して適切なプロファイルを更新します。シェルスクリプト内で実行するコマンドを記述し、そのコマンドに必要な特権を割り当ててください。

    詳細は、「管理アプリケーションを起動するには」を参照してください。

    この例の場合、スーパーユーザーが必要な特権を使用して cron スクリプトを実行するためには、セキュリティ管理者がプロファイルマネージャで Custom Root プロファイル (デフォルトでスーパーユーザーに割り当てられています) を更新します。プロファイルは、file_dac_search 特権と file_dac_read 特権を持つ tfind コマンドと file_dac_searchfile_dac_writefile_dac_readfile_mac_write の各特権を持つ rm コマンドを含むように変更されます。


    注意 - 注意 -

    プロファイルにコマンドを追加し、そのコマンドに特権やその他のセキュリティ属性を付与すると、そのコマンドは、プロファイルシェルスクリプト内だけでなく、プロファイルシェルのコマンド行から呼び出された場合でも、付与された特権を使用して実行されます (呼び出し元のユーザーにコマンドが追加されたプロファイルが割り当てられている場合)。プロファイルが複数割り当てられている場合は、その順番も重要です。これは、プロファイルシェルでコマンドやアクションを実行する際、最初のプロファイルに指定されているセキュリティ属性が使用されるためです。たとえば、tfind が特権付きで Custom Root プロファイルに登録されており、このプロファイルが tfind を含む最初のプロファイルである場合、スーパーユーザー役割がプロファイルシェルのコマンド行から tfind を実行すると、tfind は Custom Rootプロファイルに指定された特権を継承します。


プロファイルシェルで特権コマンドを実行する標準シェルスクリプトを作成するには


注 -

ユーザーは、特権付きのコマンドを実行する標準シェルスクリプトを作成できます。作成したスクリプトをプロファイルに追加し、スクリプトに含まれるコマンドに必要なすべての特権を使って実行されるように指定してください。すると、このスクリプトを含むプロファイルを持つユーザーによってプロファイルシェルから呼び出されるとき、スクリプトは特権を継承します。


  1. スクリプトの 1 行目は、(/bin/pfsh ではなく) 任意の標準シェルで開始します。


    #!/bin/csh

    シェルスクリプトを記述するための条件は、テキストエディタを使用できることです。

  2. 特権が必要なコマンドと、このコマンドに必要な特権を判断します。

    詳細は、「アプリケーションに必要な特権を調べるには」を参照してください。autosetpriv という例では、セキュリティ管理者は、強制された特権と許容された特権の定義済みセットを executable と呼ばれるファイルに割り当てます。このスクリプトの setfpriv コマンドには、 file_setpriv 特権が必要です。


    注 -

    このシェルスクリプトは、例として作成されています。通常のシェルスクリプトは特権とファイル名を引数として受け取り、エラー検査を行います。ここで紹介するシェルスクリプトは、例の中で指定した特権を executable という実行可能ファイルに割り当てる目的以外では、使用できません。これを実行したユーザーは全員は、「強制された特権」と「許容された特権」を使用できるようになります。



    #!/bin/csh
     setfpriv -s -f ipc_mac_write,ipc_upgrade_il,proc_setsl,sys_trans_label
    -a ipc_mac_write,ipc_upgrade_il,proc_setsl,sys_trans_label executable
  3. セキュリティ管理者役割になり、ADMIN_LOW シェルに移動します。

    詳細は、「ログイン後、特定の管理役割になるには」を参照してください。

  4. プロファイルマネージャを使って適切なプロファイルを更新します。シェルスクリプト内で実行されるコマンドを記述し、そのコマンドに適切な特権を割り当ててください。

    詳細は、「プロファイルマネージャを起動するには」を参照してください。

    setfpriv コマンドに必要な file_setpriv 特権を使用して autosetpriv と呼ばれるスクリプトを実行するためには、セキュリティ管理者がプロファイルマネージャで Object Privileges プロファイル (デフォルトで セキュリティ管理者役割に割り当てられています) を更新し、autosetpriv スクリプトを追加し、autosetprivfile_setpriv 特権を割り当てます。

  5. 必要に応じて、プロファイルシェル内でシェルスクリプトのテストやデバッグを行なったり実行したりします。


    $ autosetpriv
    

ブート時に実行するコマンドに拡張セキュリティ属性を使用するかどうかを指定するには


注 -

デフォルトの boot プロファイルに、ブート時に Trusted Solaris の拡張セキュリティ属性を使って呼び出されるコマンドを追加することは避けてください。デフォルトのプロファイルを変更するのではなく、新しいプロファイルを作成し、新しい sysh(1M) スクリプト内で setprof コマンドを使うようにしてください。次に、この手順を説明します。


  1. 希望のコマンドを呼び出したり停止させたりする新しい sysh スクリプトを作成します。

    詳細は、『Solaris のシステム管理 (第 1 巻)』の実行制御スクリプトに関する記述、sysh(1M)マニュアルページ、「ブート時にコマンドを実行するには」を参照してください。このスクリプトの先頭行は次のようになります。


    #!/bin/sysh
    

    注 -

    シェルスクリプトを作成するための条件は、テキストエディタを使用できることです。


  2. setprof オプションを使って実行プロファイルの名前を指定します。

    このスクリプトの 2 行目は次のようになります。new_profile_name は特定のプロファイル名で置き換えます。


    setprof new_profile_name
    
  3. セキュリティ管理者役割になり、ADMIN_LOWワークスペースに移動します。

    詳細は、「ログイン後、特定の管理役割になるには」を参照してください。

  4. このスクリプトを /etc/init.d ディレクトリにインストールし、このスクリプトに対するハードリンクを適切な /etc/rcn.d 内に作成します。

    以下の例では、/etc/init.d 内の新しいスクリプトの名前を new_script とします。new_script/etc/rc2.d/S89new_script/etc/rc2.d/K8new_script にリンクするには次のように入力します。


    $ pwd
    /etc/init.d
    $ ln new_script /etc/rc2.d/S89new_script
    $ ln new_script /etc/rc2.d/K89new_script
    
    1. コマンドを呼び出したり停止させたりする各実行レベルに対応する /etc/rcn.d ディレクトリに移動し、適切な名前を持つ対象ファイルから /etc/init.d ディレクトリへのリンクを作成します。

    2. 対象ファイルの名前には、コマンドの呼び出しならば S 、停止ならば K という接頭辞を付けます。

    3. 各実行レベルへの移行時にスクリプトが実行される順番が判るように、対象ファイルの名前には適切な番号を含めます。


      $ cd /etc/rc2.d
      $ ln /etc/init.d/scriptname [S|K]nnscriptname
      
  5. 新しいプロファイルを作成し、新しいスクリプト内のコマンドに対して Trusted Solaris セキュリティ属性を割り当てます。

    1. プロファイルマネージャを起動し、ネームサービスを選択します。

      詳細は、「実行プロファイル中内にコマンドを指定するには」を参照してください。

    2. ネットワークサービスが開始される前にコマンドを呼び出す場合は、プロファイルマネージャの「ネームサービス(Naming Service)」メニューで「なし (None)」を選択し、プロファイルが /etc/security/tsol/tsolprof 内にローカルに作成されるようにします。

    3. ネットワークサービスが開始されてからコマンドを呼び出す場合は、プロファイルマネージャの「ネームサービス(Naming Service)」メニューで「NIS+」を選択し、プロファイルが NIS+ マスター上の tsolprof NIS+ マップ内に作成されるようにします。

    4. プロファイルマネージャを使用して、コマンドを設定し、GID、機密ラベル、認可上限を割り当てる、新しいプロファイルを作成します (任意)。

  6. 「トラステッドパス (TP)」メニューの「シャットダウン」オプションを使ってコンピュータをシャットダウンし、起動監視プロンプトからリブートします。


    ok boot
    

ファイルを編集したときに特権を保存および復元するには

  1. セキュリティ管理者役割になり、getfpriv(1) を使って、実行可能ファイルの特権の一覧を表示し、その出力を保存します。

    次の例では、一覧の出力を一時ファイルに保存しています。


    $ getfpriv executable_file > tempfile
    
  2. 実行可能ファイルを編集してから、ファイルマネージャを使用して、必要に応じてファイルを実行可能にし、一時ファイル内に保存されている特権を復元します。