次の作業マップでは、Trusted Extensions に固有のゾーン管理タスクについて説明します。このマップでは、Solaris システムの場合と同様に、Trusted Extensions で実行される一般的な手順も説明しています。
作業 |
説明 |
参照先 |
---|---|---|
すべてのゾーンの表示 |
任意のラベルで、現在のゾーンのほうが優位であるゾーンを表示します。 | |
マウントされたディレクトリの表示 |
任意のラベルで、現在のラベルのほうが優位であるディレクトリを表示します。 | |
一般ユーザーが /etc ファイルを表示できるようにする |
ラベル付きゾーンでデフォルトでは表示されない大域ゾーンから、ディレクトリまたはファイルをループバックマウントします。 | |
一般ユーザーが上位レベルのラベルから下位レベルのホームディレクトリを表示できないようにします。 |
デフォルトでは、上位レベルのゾーンから下位レベルのディレクトリを表示できます。下位ゾーンの 1 つのマウントを無効にすると、下位ゾーンのマウントはすべて無効になります。 | |
ファイルのラベルを変更できるようにゾーンを構成します。 |
ラベル付きゾーンには制限付きの特権があります。デフォルトでは、ラベル付きゾーンには、承認ユーザーがファイルに再ラベル付けする特権がありません。ゾーン構成を修正して特権を追加します。 | |
ラベル付きゾーンとの間でファイルまたはディレクトリを移動します。 |
ラベルを変更して、ファイルまたはディレクトリのセキュリティーレベルを変更します。 |
『Oracle Solaris Trusted Extensions ユーザーズガイド』の「Trusted CDE でラベル間でファイルを移動する」 |
ZFS データセットをラベル付きゾーンに接続して共有します。 |
ZFS データセットを読み取り/書き込み権でラベル付きゾーンにマウントし、そのデータセットを読み取り専用で上位のゾーンと共有します。 | |
新しいゾーンを構成します。 |
このシステムでゾーンのラベル付けに現在使用されていないラベルに、ゾーンを作成します。 |
『Oracle Solaris Trusted Extensions 構成ガイド』の「ゾーンに名前およびラベルを付ける」を参照してください。 次に、初期設定チームがほかのゾーンを作成した手順に従います。手順については、『Oracle Solaris Trusted Extensions 構成ガイド』の「ラベル付きゾーンの作成」を参照してください。 |
アプリケーション用のマルチレベルポートを作成します。 |
マルチレベルポートは、ラベル付きゾーンへのマルチレベルフィードを必要とするプログラムに役立ちます。 | |
NFS マウントとアクセスの問題をトラブルシューティングします。 |
マウントと、場合によってはゾーンに関する一般的なアクセス上の問題をデバッグします。 | |
ラベル付きゾーンを削除します。 |
ラベル付きゾーンをシステムから完全に削除します。 |
この手順では、現在のゾーンと、現在のゾーンのほうが優位であるすべてのゾーンのラベルを表示するシェルスクリプトを作成します。
大域ゾーンで、システム管理者役割になっている必要があります。
トラステッドエディタを使用して、getzonelabels スクリプトを作成します。
詳細は、「Trusted Extensions の管理ファイルを編集する」を参照してください。
/usr/local/scripts/getzonelabels など、スクリプトへのパス名を入力します。
#!/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 |
大域ゾーンでスクリプトをテストします。
# 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 ファイルから作成されたゾーンの大域ゾーン出力は、次のとおりです。
次の例では、internal ゾーンでユーザーが getzonelabels スクリプトを実行します。
# getzonelabels NAME STATUS LABEL ==== ====== ===== internal running CONFIDENTIAL : INTERNAL public running PUBLIC |
この手順では、現在のゾーンでマウントされたファイルシステムを表示するシェルスクリプトを作成します。大域ゾーンからこのスクリプトを実行すると、各ゾーンでマウントされたすべてのファイルシステムのラベルが表示されます。
大域ゾーンで、システム管理者役割になっている必要があります。
トラステッドエディタを使用して、getmounts スクリプトを作成します。
詳細は、「Trusted Extensions の管理ファイルを編集する」を参照してください。
/usr/local/scripts/getmounts など、スクリプトへのパス名を入力します。
#!/bin/sh # for i in `/usr/sbin/mount -p | cut -d " " -f3` ; do /usr/bin/getlabel $i done |
大域ゾーンでスクリプトをテストします。
# /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 |
一般ユーザーがラベル付きゾーンから 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 |
この手順では、指定されたラベル付きゾーンのユーザーが、デフォルトでは大域ゾーンからエクスポートされないファイルを表示できるようにします。
大域ゾーンで、システム管理者役割になっている必要があります。
構成を変更するゾーンを停止します。
# zoneadm -z zone-name halt |
ファイルまたはディレクトリをループバックマウントします。
たとえば、一般ユーザーが /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 ソフトウェアでは検査されません。詳細は、「ラベル付きゾーンのファイルの共有」を参照してください。
ゾーンを起動します。
# zoneadm -z zone-name boot |
この例でセキュリティー管理者は、テスターおよびプログラマのローカルパスワードが設定されていることをそのテスターやプログラマ自身が確認できるようにします。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 |
デフォルトでは、ユーザーは下位レベルのファイルを表示できます。特定ゾーンから下位レベルのすべてのファイルを表示することを禁止するには、net_mac_aware 特権を削除します。net_mac_aware 特権については、privileges(5) のマニュアルページを参照してください。
大域ゾーンで、システム管理者役割になっている必要があります。
構成を変更するゾーンを停止します。
# zoneadm -z zone-name halt |
下位レベルのファイルの表示を禁止するようにゾーンを構成します。
ゾーンから net_mac_aware 特権を削除します。
# zonecfg -z zone-name set limitpriv=default,!net_mac_aware exit |
ゾーンを再起動します。
# zoneadm -z zone-name boot |
この例でセキュリティー管理者は、このシステム上のユーザーが混乱しないように構成しようとします。そのため、ユーザーは自身が作業中のラベルでしかファイルを表示できなくなります。セキュリティー管理者は、下位レベルのすべてのファイルの表示を禁止します。このシステムで、ユーザーは 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 ゾーンに対するコマンドは実行しません。
この手順では、ZFS データセットを読み取り/書き込み権でラベル付きゾーンにマウントします。すべてのコマンドが大域ゾーンで実行されるため、大域ゾーン管理者がラベル付きゾーンへの ZFS データセットの追加を制御します。
データセットを共有するには、最低でもラベル付きゾーンが ready 状態である必要があります。ラベル付きゾーンが running 状態であっても構いません。
データセットを持つゾーンを構成するには、最初にそのゾーンを停止します。
ZFS データセットを作成します。
# zfs create datasetdir/subdir |
データセットの名前には、zone/data などのディレクトリを含めることができます。
大域ゾーンで、ラベル付きゾーンを停止します。
# zoneadm -z labeled-zone-name halt |
データセットのマウントポイントを設定します。
# zfs set mountpoint=legacy datasetdir/subdir |
ZFS mountpoint プロパティーで、マウントポイントがラベル付きゾーンに対応付けられたときのマウントポイントのラベルを設定します。
ラベル付きゾーンにデータセットをファイルシステムとして追加します。
# 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 ファイルが解釈されます。
データセットを共有します。
データセットファイルシステムのエントリを /zone/labeled-zone-name/etc/dfs/dfstab ファイルに追加します。このエントリには、/subdir パス名も使用されます。
share -F nfs -d "dataset-comment" /subdir |
ラベル付きゾーンを起動します。
# zoneadm -z labeled-zone-name boot |
ゾーンが起動すると、データセットが、labeled-zone-name ゾーンのラベルを持つ labeled-zone-name ゾーンの読み取り/書き込みマウントポイントとして自動的にマウントされます。
この例では、管理者は 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 コマンドを実行して、オートマウンタサービスを再起動する必要があります。
ユーザーがファイルに再ラベル付けできるようにする場合、この手順が前提条件となります。
大域ゾーンでセキュリティー管理者役割になります。
構成を変更するゾーンを停止します。
# zoneadm -z zone-name halt |
再ラベル付けできるようにゾーンを構成します。
ゾーンに適切な特権を追加します。ウィンドウ特権により、ユーザーはドラッグ&ドロップ操作と、カット&ペースト操作を使うことができます。
ダウングレードを可能にするには、ゾーンに 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 |
ゾーンを再起動します。
# zoneadm -z zone-name boot |
再ラベル付けを許可するユーザーおよびプロセスの要件については、setflabel(3TSOL) のマニュアルページを参照してください。ユーザーによるファイルの再ラベル付けを承認する方法については、「ユーザーによるデータのセキュリティーレベルの変更を有効にする」を参照してください。
この例でセキュリティー管理者は、このシステム上の承認ユーザーがファイルをアップグレードできるようにします。ユーザーによる情報のアップグレードを可能にすることで、管理者はさらに高いセキュリティーレベルでユーザーが情報を保護できるようにします。大域ゾーンで、管理者は次のゾーン管理コマンドを実行します。
# zoneadm -z internal halt # zonecfg -z internal set limitpriv=default,sys_trans_label,file_upgrade_sl exit # zoneadm -z internal boot |
これで、承認ユーザーは internal 情報を internal ゾーンから 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 にダウングレードできます。
この手順は、udp で NFSv3 の下位読み取りマウントを有効にする場合に使用されます。MLP の追加には Solaris 管理コンソールを使用します。
大域ゾーンでセキュリティー管理者役割になります。
Solaris 管理コンソールを起動します。
詳細は、「Solaris 管理コンソールでローカルシステムを管理する」を参照してください。
「ファイル」ツールボックスを選択します。
ツールボックスのタイトルには、Scope=Files, Policy=TSOL が含まれています。
ゾーンと MLP を構成します。
Solaris 管理コンソールを閉じます。
カーネルを更新します。
# tnctl -fz /etc/security/tsol/tnzonecfg |
この手順は、ラベル付きゾーンで実行されるアプリケーションがマルチレベルポート (MLP) とゾーンとの通信を必要としている場合に使用されます。この手順では、Web プロキシがゾーンと通信します。MLP の追加には Solaris 管理コンソールを使用します。
大域ゾーンでセキュリティー管理者役割になります。ラベル付きゾーンが存在する必要があります。詳細は、『Oracle Solaris Trusted Extensions 構成ガイド』の「ラベル付きゾーンの作成」を参照してください。
Solaris 管理コンソールを起動します。
詳細は、「Solaris 管理コンソールでローカルシステムを管理する」を参照してください。
「ファイル」ツールボックスを選択します。
ツールボックスのタイトルには、Scope=Files, Policy=TSOL が含まれています。
コンピュータのリストに、プロキシホストと Web サービスホストを追加します。
ゾーンと MLP を構成します。
次の手順に従って、ゾーンのテンプレートをカスタマイズします。
Solaris 管理コンソールを閉じます。
ゾーンを起動します。
# zoneadm -z zone-name boot |
大域ゾーンで、新しいアドレスの経路を追加します。
たとえば、ゾーンに共有 IP アドレスがある場合は、次のようにします。
# route add proxy labeled-zones-IP-address # route add webservice labeled-zones-IP-address |