Oracle Solaris Trusted Extensions 管理の手順

ゾーンの管理 (作業マップ)

次の作業マップでは、Trusted Extensions に固有のゾーン管理タスクについて説明します。このマップでは、Solaris システムの場合と同様に、Trusted Extensions で実行される一般的な手順も説明しています。

作業 

説明 

参照先 

すべてのゾーンの表示 

任意のラベルで、現在のゾーンのほうが優位であるゾーンを表示します。 

「作成済みまたは実行中のゾーンを表示する」

マウントされたディレクトリの表示 

任意のラベルで、現在のラベルのほうが優位であるディレクトリを表示します。 

「マウントされたファイルのラベルを表示する」

一般ユーザーが /etc ファイルを表示できるようにする

ラベル付きゾーンでデフォルトでは表示されない大域ゾーンから、ディレクトリまたはファイルをループバックマウントします。 

「通常はラベル付きゾーンから表示されないファイルをループバックマウントする」

一般ユーザーが上位レベルのラベルから下位レベルのホームディレクトリを表示できないようにします。 

デフォルトでは、上位レベルのゾーンから下位レベルのディレクトリを表示できます。下位ゾーンの 1 つのマウントを無効にすると、下位ゾーンのマウントはすべて無効になります。 

「下位ファイルのマウントを無効にする」

ファイルのラベルを変更できるようにゾーンを構成します。 

ラベル付きゾーンには制限付きの特権があります。デフォルトでは、ラベル付きゾーンには、承認ユーザーがファイルに再ラベル付けする特権がありません。ゾーン構成を修正して特権を追加します。 

「ラベル付きゾーンからファイルに再ラベル付けできるようにする」

ラベル付きゾーンとの間でファイルまたはディレクトリを移動します。 

ラベルを変更して、ファイルまたはディレクトリのセキュリティーレベルを変更します。 

『Oracle Solaris Trusted Extensions ユーザーズガイド』「Trusted CDE でラベル間でファイルを移動する」

ZFS データセットをラベル付きゾーンに接続して共有します。 

ZFS データセットを読み取り/書き込み権でラベル付きゾーンにマウントし、そのデータセットを読み取り専用で上位のゾーンと共有します。 

「ラベル付きゾーンの ZFS データセットを共有する」.

新しいゾーンを構成します。 

このシステムでゾーンのラベル付けに現在使用されていないラベルに、ゾーンを作成します。 

『Oracle Solaris Trusted Extensions 構成ガイド』「ゾーンに名前およびラベルを付ける」を参照してください。

次に、初期設定チームがほかのゾーンを作成した手順に従います。手順については、『Oracle Solaris Trusted Extensions 構成ガイド』「ラベル付きゾーンの作成」を参照してください。

アプリケーション用のマルチレベルポートを作成します。 

マルチレベルポートは、ラベル付きゾーンへのマルチレベルフィードを必要とするプログラムに役立ちます。 

udp で NFSv3 のマルチレベルポートを構成する」

「ゾーンにマルチレベルポートを作成する」

NFS マウントとアクセスの問題をトラブルシューティングします。 

マウントと、場合によってはゾーンに関する一般的なアクセス上の問題をデバッグします。 

「Trusted Extensions でマウントの失敗をトラブルシューティングする」

ラベル付きゾーンを削除します。 

ラベル付きゾーンをシステムから完全に削除します。 

『System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones』「How to Remove a Non-Global Zone」

Procedure作成済みまたは実行中のゾーンを表示する

この手順では、現在のゾーンと、現在のゾーンのほうが優位であるすべてのゾーンのラベルを表示するシェルスクリプトを作成します。

始める前に

大域ゾーンで、システム管理者役割になっている必要があります。

  1. トラステッドエディタを使用して、getzonelabels スクリプトを作成します。

    詳細は、「Trusted Extensions の管理ファイルを編集する」を参照してください。

    /usr/local/scripts/getzonelabels など、スクリプトへのパス名を入力します。

  2. 次の内容を入力して、ファイルを保存します。


    #!/bin/sh
    #
    echo "NAME\t\tSTATUS\t\tLABEL"
    echo "====\t\t======\t\t====="
    myzone=`zonename`
    for i in `/usr/sbin/zoneadm list -p` ; do
            zone=`echo $i | cut -d ":" -f2`
            status=`echo $i | cut -d ":" -f3`
            path=`echo $i | cut -d ":" -f4`
            if [ $zone != global ]; then
                    if [ $myzone = global ]; then
                            path=$path/root/tmp
                    else
                            path=$path/export/home
                    fi
            fi
            label=`/usr/bin/getlabel -s $path |cut -d ":" -f2-9`
            if [ `echo $zone|wc -m` -lt 8 ]; then
                    echo "$zone\t\t$status\t$label"
            else
                    echo "$zone\t$status\t$label"
            fi
    done
  3. 大域ゾーンでスクリプトをテストします。


    # getzonelabels
    NAME            STATUS          LABEL
    ====            ======          =====
    global          running         ADMIN_HIGH
    needtoknow      running         CONFIDENTIAL : NEED TO KNOW
    restricted      ready           CONFIDENTIAL : RESTRICTED
    internal        running         CONFIDENTIAL : INTERNAL
    public          running         PUBLIC

    大域ゾーンからこのスクリプトを実行すると、作成済みまたは実行中のすべてのゾーンのラベルが表示されます。デフォルトの label_encodings ファイルから作成されたゾーンの大域ゾーン出力は、次のとおりです。


例 10–1 作成済みまたは実行中のゾーンすべてのラベルの表示

次の例では、internal ゾーンでユーザーが getzonelabels スクリプトを実行します。


# getzonelabels
NAME            STATUS          LABEL
====            ======          =====
internal        running         CONFIDENTIAL : INTERNAL
public          running         PUBLIC

Procedureマウントされたファイルのラベルを表示する

この手順では、現在のゾーンでマウントされたファイルシステムを表示するシェルスクリプトを作成します。大域ゾーンからこのスクリプトを実行すると、各ゾーンでマウントされたすべてのファイルシステムのラベルが表示されます。

始める前に

大域ゾーンで、システム管理者役割になっている必要があります。

  1. トラステッドエディタを使用して、getmounts スクリプトを作成します。

    詳細は、「Trusted Extensions の管理ファイルを編集する」を参照してください。

    /usr/local/scripts/getmounts など、スクリプトへのパス名を入力します。

  2. 次の内容を追加して、ファイルを保存します。


    #!/bin/sh
    #
    for i in `/usr/sbin/mount -p | cut -d " " -f3` ; do
            /usr/bin/getlabel $i
    done
  3. 大域ゾーンでスクリプトをテストします。


    # /usr/local/scripts/getmounts
    /:      ADMIN_LOW
    /dev:   ADMIN_LOW
    /kernel:        ADMIN_LOW
    /lib:   ADMIN_LOW
    /opt:   ADMIN_LOW
    /platform:      ADMIN_LOW
    /sbin:  ADMIN_LOW
    /usr:   ADMIN_LOW
    /var/tsol/doors:        ADMIN_LOW
    /zone/needtoknow/export/home:   CONFIDENTIAL : NEED TO KNOW
    /zone/internal/export/home:     CONFIDENTIAL : INTERNAL USE ONLY
    /zone/restricted/export/home:   CONFIDENTIAL : RESTRICTED
    /proc:  ADMIN_LOW
    /system/contract:       ADMIN_LOW
    /etc/svc/volatile:      ADMIN_LOW
    /etc/mnttab:    ADMIN_LOW
    /dev/fd:        ADMIN_LOW
    /tmp:           ADMIN_LOW
    /var/run:       ADMIN_LOW
    /zone/public/export/home:  PUBLIC
    /root:          ADMIN_LOW

例 10–2 restricted ゾーンでのファイルシステムのラベルの表示

一般ユーザーがラベル付きゾーンから getmounts スクリプトを実行すると、そのゾーンでマウントされたすべてのファイルシステムのラベルが表示されます。デフォルトの label_encodings ファイル内の各ラベルに対してゾーンが作成されたシステムでは、restricted ゾーンの出力は次のとおりです。


# /usr/local/scripts/getmounts
/:      CONFIDENTIAL : RESTRICTED
/dev:   CONFIDENTIAL : RESTRICTED
/kernel:        ADMIN_LOW
/lib:   ADMIN_LOW
/opt:   ADMIN_LOW
/platform:      ADMIN_LOW
/sbin:  ADMIN_LOW
/usr:   ADMIN_LOW
/var/tsol/doors:        ADMIN_LOW
/zone/needtoknow/export/home:   CONFIDENTIAL : NEED TO KNOW
/zone/internal/export/home:     CONFIDENTIAL : INTERNAL USE ONLY
/proc:  CONFIDENTIAL : RESTRICTED
/system/contract:       CONFIDENTIAL : RESTRICTED
/etc/svc/volatile:      CONFIDENTIAL : RESTRICTED
/etc/mnttab:    CONFIDENTIAL : RESTRICTED
/dev/fd:        CONFIDENTIAL : RESTRICTED
/tmp:   CONFIDENTIAL : RESTRICTED
/var/run:       CONFIDENTIAL : RESTRICTED
/zone/public/export/home:       PUBLIC
/home/gfaden:   CONFIDENTIAL : RESTRICTED

Procedure通常はラベル付きゾーンから表示されないファイルをループバックマウントする

この手順では、指定されたラベル付きゾーンのユーザーが、デフォルトでは大域ゾーンからエクスポートされないファイルを表示できるようにします。

始める前に

大域ゾーンで、システム管理者役割になっている必要があります。

  1. 構成を変更するゾーンを停止します。


    # zoneadm -z zone-name halt
  2. ファイルまたはディレクトリをループバックマウントします。

    たとえば、一般ユーザーが /etc ディレクトリにあるファイルを表示できるようにします。


    # zonecfg -z zone-name
     add filesystem
     set special=/etc/filename
     set directory=/etc/filename
     set type=lofs
     add options [ro,nodevices,nosetuid]
     end
     exit

    注 –

    特定のファイルはループバックマウントしても影響しないようにシステムで使用されません。たとえば、ラベル付きゾーンの /etc/dfs/dfstab ファイルは Trusted Extensions ソフトウェアでは検査されません。詳細は、「ラベル付きゾーンのファイルの共有」を参照してください。


  3. ゾーンを起動します。


    # zoneadm -z zone-name boot

例 10–3 /etc/passwd ファイルのループバックマウント

この例でセキュリティー管理者は、テスターおよびプログラマのローカルパスワードが設定されていることをそのテスターやプログラマ自身が確認できるようにします。sandbox ゾーンが停止されたあと、passwd ファイルをループバックマウントするように構成されます。次に、ゾーンが再起動されます。


# zoneadm -z sandbox halt
# zonecfg -z sandbox
 add filesystem
    set special=/etc/passwd
    set directory=/etc/passwd
    set type=lofs
    add options [ro,nodevices,nosetuid]
 end
 exit
# zoneadm -z sandbox boot

Procedure下位ファイルのマウントを無効にする

デフォルトでは、ユーザーは下位レベルのファイルを表示できます。特定ゾーンから下位レベルのすべてのファイルを表示することを禁止するには、net_mac_aware 特権を削除します。net_mac_aware 特権については、privileges(5) のマニュアルページを参照してください。

始める前に

大域ゾーンで、システム管理者役割になっている必要があります。

  1. 構成を変更するゾーンを停止します。


    # zoneadm -z zone-name halt
  2. 下位レベルのファイルの表示を禁止するようにゾーンを構成します。

    ゾーンから net_mac_aware 特権を削除します。


    # zonecfg -z zone-name
     set limitpriv=default,!net_mac_aware
     exit
  3. ゾーンを再起動します。


    # zoneadm -z zone-name boot

例 10–4 ユーザーによる下位ファイルの表示を禁止する

この例でセキュリティー管理者は、このシステム上のユーザーが混乱しないように構成しようとします。そのため、ユーザーは自身が作業中のラベルでしかファイルを表示できなくなります。セキュリティー管理者は、下位レベルのすべてのファイルの表示を禁止します。このシステムで、ユーザーは PUBLIC ラベルで作業しない限り、共通で利用可能なファイルを表示することができません。また、ユーザーはゾーンのラベルでファイルを NFS マウントできるだけです。


# zoneadm -z restricted halt
# zonecfg -z restricted
 set limitpriv=default,!net_mac_aware
 exit
# zoneadm -z restricted boot

# zoneadm -z needtoknow halt
# zonecfg -z needtoknow
 set limitpriv=default,!net_mac_aware
 exit
# zoneadm -z needtoknow boot

# zoneadm -z internal halt
# zonecfg -z internal
 set limitpriv=default,!net_mac_aware
 exit
# zoneadm -z internal boot

PUBLIC は最小のラベルなので、セキュリティー管理者は PUBLIC ゾーンに対するコマンドは実行しません。


Procedureラベル付きゾーンの ZFS データセットを共有する

この手順では、ZFS データセットを読み取り/書き込み権でラベル付きゾーンにマウントします。すべてのコマンドが大域ゾーンで実行されるため、大域ゾーン管理者がラベル付きゾーンへの ZFS データセットの追加を制御します。

データセットを共有するには、最低でもラベル付きゾーンが ready 状態である必要があります。ラベル付きゾーンが running 状態であっても構いません。

始める前に

データセットを持つゾーンを構成するには、最初にそのゾーンを停止します。

  1. ZFS データセットを作成します。


    # zfs create datasetdir/subdir
    

    データセットの名前には、zone/data などのディレクトリを含めることができます。

  2. 大域ゾーンで、ラベル付きゾーンを停止します。


    # zoneadm -z labeled-zone-name halt
  3. データセットのマウントポイントを設定します。


    # zfs set mountpoint=legacy datasetdir/subdir
    

    ZFS mountpoint プロパティーで、マウントポイントがラベル付きゾーンに対応付けられたときのマウントポイントのラベルを設定します。

  4. ラベル付きゾーンにデータセットをファイルシステムとして追加します。


    # zonecfg -z labeled-zone-name
    # zonecfg:labeled-zone-name> add fs
    # zonecfg:labeled-zone-name:dataset> set dir=/subdir
    # zonecfg:labeled-zone-name:dataset> set special=datasetdir/subdir
    # zonecfg:labeled-zone-name:dataset> set type=zfs
    # zonecfg:labeled-zone-name:dataset> end
    # zonecfg:labeled-zone-name> exit

    データセットをファイルシステムとして追加することにより、dfstab ファイルが解釈される前に、データセットがゾーンの /data にマウントされます。この手順により、ゾーンが起動する前にデータセットがマウントされないようになります。具体的に言うと、ゾーンが起動し、データセットがマウントされてから、dfstab ファイルが解釈されます。

  5. データセットを共有します。

    データセットファイルシステムのエントリを /zone/labeled-zone-name/etc/dfs/dfstab ファイルに追加します。このエントリには、/subdir パス名も使用されます。


    share  -F nfs  -d "dataset-comment"  /subdir
    
  6. ラベル付きゾーンを起動します。


    # zoneadm -z labeled-zone-name boot
    

    ゾーンが起動すると、データセットが、labeled-zone-name ゾーンのラベルを持つ labeled-zone-name ゾーンの読み取り/書き込みマウントポイントとして自動的にマウントされます。


例 10–5 ラベル付きゾーンの ZFS データセットを共有してマウントする

この例では、管理者は ZFS データセットを needtoknow ゾーンに追加し、そのデータセットを共有します。データセット zone/data は現在、/mnt マウントポイントに割り当てられています。restricted ゾーンのユーザーはそのデータセットを表示できます。

最初に、管理者はゾーンを停止します。


# zoneadm -z needtoknow halt

データセットは現在別のマウントポイントに割り当てられているため、管理者は以前の割り当てを削除してから、新しいマウントポイントを設定します。


# zfs set zoned=off zone/data
# zfs set mountpoint=legacy zone/data

次に、zonecfg 対話型インタフェースで、管理者はデータセットを needtoknow ゾーンに明示的に追加します。


# zonecfg -z needtoknow
# zonecfg:needtoknow> add fs
# zonecfg:needtoknow:dataset> set dir=/data
# zonecfg:needtoknow:dataset> set special=zone/data
# zonecfg:needtoknow:dataset> set type=zfs
# zonecfg:needtoknow:dataset> end
# zonecfg:needtoknow> exit

さらに、管理者はそのデータセットを共有するように /zone/needtoknow/etc/dfs/dfstab ファイルを変更してから、needtoknow ゾーンを起動します。


## Global zone dfstab file for needtoknow zone
share  -F nfs  -d "App Data on ZFS"  /data

# zoneadm -z needtoknow boot

これで、データセットはアクセス可能になります。

restricted ゾーンのユーザーは、needtoknow ゾーンを独占しており、/data ディレクトリに変更することでマウントされたデータセットを表示できます。ユーザーは、大域ゾーンを基準にして、マウントされたデータセットへのフルパスを使用します。この例では、machine1 はラベル付きゾーンを含むシステムのホスト名です。管理者は、このホスト名を共有していない IP アドレスに割り当てています。


# cd /net/machine1/zone/needtoknow/root/data

注意事項

上位ラベルからデータセットにアクセスしようとして、エラー not found または No such file or directory が返された場合、管理者は svcadm restart autofs コマンドを実行して、オートマウンタサービスを再起動する必要があります。

Procedureラベル付きゾーンからファイルに再ラベル付けできるようにする

ユーザーがファイルに再ラベル付けできるようにする場合、この手順が前提条件となります。

始める前に

大域ゾーンでセキュリティー管理者役割になります。

  1. 構成を変更するゾーンを停止します。


    # zoneadm -z zone-name halt
  2. 再ラベル付けできるようにゾーンを構成します。

    ゾーンに適切な特権を追加します。ウィンドウ特権により、ユーザーはドラッグ&ドロップ操作と、カット&ペースト操作を使うことができます。

    • ダウングレードを可能にするには、ゾーンに file_downgrade_sl 特権を追加します。


      # zonecfg -z zone-name
       set limitpriv=default,win_dac_read,win_mac_read,win_dac_write,
       win_mac_write,win_selection,file_downgrade_sl
       exit
    • アップグレードを可能にするには、ゾーンに sys_trans_label および file_upgrade_sl 特権を追加します。


      # zonecfg -z zone-name
       set limitpriv=default,win_dac_read,win_mac_read,win_dac_write,
       win_mac_write,win_selection,sys_trans_label,file_upgrade_sl
       exit
    • アップグレードとダウングレードの両方を可能にするには、ゾーンに 3 つの特権をすべて追加します。


      # zonecfg -z zone-name
       set limitpriv=default,win_dac_read,win_mac_read,win_dac_write,
       win_mac_write,win_selection,sys_trans_label,file_downgrade_sl,
       file_upgrade_sl
       exit
  3. ゾーンを再起動します。


    # zoneadm -z zone-name boot

    再ラベル付けを許可するユーザーおよびプロセスの要件については、setflabel(3TSOL) のマニュアルページを参照してください。ユーザーによるファイルの再ラベル付けを承認する方法については、「ユーザーによるデータのセキュリティーレベルの変更を有効にする」を参照してください。


例 10–6 internal ゾーンからのアップグレードを可能にする

この例でセキュリティー管理者は、このシステム上の承認ユーザーがファイルをアップグレードできるようにします。ユーザーによる情報のアップグレードを可能にすることで、管理者はさらに高いセキュリティーレベルでユーザーが情報を保護できるようにします。大域ゾーンで、管理者は次のゾーン管理コマンドを実行します。


# zoneadm -z internal halt
# zonecfg -z internal
 set limitpriv=default,sys_trans_label,file_upgrade_sl
 exit
# zoneadm -z internal boot

これで、承認ユーザーは internal 情報を internal ゾーンから restricted にアップグレードできます。



例 10–7 restricted ゾーンからのダウングレードを可能にする

この例でセキュリティー管理者は、このシステム上の承認ユーザーがファイルをダウングレードできるようにします。管理者がゾーンにウィンドウ特権を追加しないため、承認ユーザーはファイルマネージャーを使用してファイルに再ラベル付けはできません。ファイルを再ラベル付けする場合、ユーザーは setlabel コマンドを使用します。

ユーザーによる情報のダウングレードを可能にすることにより、管理者はセキュリティーの下位のユーザーがファイルにアクセスできるようにします。大域ゾーンで、管理者は次のゾーン管理コマンドを実行します。


# zoneadm -z restricted halt
# zonecfg -z restricted
 set limitpriv=default,file_downgrade_sl
 exit
# zoneadm -z restricted boot

これで、承認ユーザーは setlabel コマンドを使用して、restricted 情報を restricted ゾーンから internal または public にダウングレードできます。


Procedureudp で NFSv3 のマルチレベルポートを構成する

この手順は、udp で NFSv3 の下位読み取りマウントを有効にする場合に使用されます。MLP の追加には Solaris 管理コンソールを使用します。

始める前に

大域ゾーンでセキュリティー管理者役割になります。

  1. Solaris 管理コンソールを起動します。

    詳細は、「Solaris 管理コンソールでローカルシステムを管理する」を参照してください。

  2. 「ファイル」ツールボックスを選択します。

    ツールボックスのタイトルには、Scope=Files, Policy=TSOL が含まれています。

  3. ゾーンと MLP を構成します。

    1. 「トラステッドネットワークゾーン」ツールにナビゲートします。

    2. 大域ゾーンをダブルクリックします。

    3. UDP プロトコルのマルチレベルポートを追加します。

      1. 「ゾーンの IP アドレスに対するマルチレベルポートの追加」をクリックします。

      2. ポート番号として 2049 と入力し、「了解」をクリックします。

    4. 「了解」をクリックして設定を保存します。

  4. Solaris 管理コンソールを閉じます。

  5. カーネルを更新します。


    # tnctl -fz /etc/security/tsol/tnzonecfg
    

Procedureゾーンにマルチレベルポートを作成する

この手順は、ラベル付きゾーンで実行されるアプリケーションがマルチレベルポート (MLP) とゾーンとの通信を必要としている場合に使用されます。この手順では、Web プロキシがゾーンと通信します。MLP の追加には Solaris 管理コンソールを使用します。

始める前に

大域ゾーンでセキュリティー管理者役割になります。ラベル付きゾーンが存在する必要があります。詳細は、『Oracle Solaris Trusted Extensions 構成ガイド』「ラベル付きゾーンの作成」を参照してください。

  1. Solaris 管理コンソールを起動します。

    詳細は、「Solaris 管理コンソールでローカルシステムを管理する」を参照してください。

  2. 「ファイル」ツールボックスを選択します。

    ツールボックスのタイトルには、Scope=Files, Policy=TSOL が含まれています。

  3. コンピュータのリストに、プロキシホストと Web サービスホストを追加します。

    1. 「システム構成」で「コンピュータとネットワーク」ツールにナビゲートします。

    2. 「コンピュータ」ツールで「アクション」メニューをクリックし、「コンピュータの追加」を選択します。

    3. プロキシホストのホスト名と IP アドレスを追加します。

    4. 変更を保存します。

    5. Web サービスホストのホスト名と IP アドレスを追加します。

    6. 変更を保存します。

  4. ゾーンと MLP を構成します。

    1. 「トラステッドネットワークゾーン」ツールにナビゲートします。

    2. ラベル付きゾーンを選択します。

    3. 「ローカル IP アドレスの MLP 構成」セクションで、適切なポートとプロトコルフィールドを指定します。

    4. 変更を保存します。

  5. 次の手順に従って、ゾーンのテンプレートをカスタマイズします。

    1. 「セキュリティーテンプレート」ツールにナビゲートします。

      「アクション」メニューをクリックし、「テンプレートの追加」を選択します。

    2. テンプレート名には、ホスト名を使用します。

    3. 「ホストタイプ」に「CIPSO」を指定します。

    4. 「最小ラベル」および「最大ラベル」にはゾーンのラベルを使用します。

    5. 「機密ラベルセット」にゾーンラベルを割り当てます。

    6. 「明示的に割り当てられたホスト」タブを選択します。

    7. 「エントリの追加」セクションで、ゾーンに関連付ける IP アドレスを追加します。

    8. 変更を保存します。

  6. Solaris 管理コンソールを閉じます。

  7. ゾーンを起動します。


    # zoneadm -z zone-name boot
  8. 大域ゾーンで、新しいアドレスの経路を追加します。

    たとえば、ゾーンに共有 IP アドレスがある場合は、次のようにします。


    # route add proxy labeled-zones-IP-address
    # route add webservice labeled-zones-IP-address