Go to main content
Oracle® Solaris 11.3 でのユーザーとプロセスのセキュリティー保護

印刷ビューの終了

更新: 2016 年 11 月
 
 

ユーザーによる自身が実行しているアプリケーションのロックダウン

ユーザーは、拡張特権ポリシーを使用してアプリケーションから基本特権を削除できます。このポリシーは、アプリケーションがアクセスすべきではないディレクトリへのアクセスを防ぎます。


注 -  順序は重要です。ほとんどの$HOME/.* ディレクトリに対して限定的な特権を割り当てたあとで、$HOME/Download* などのディレクトリに対してより広範な特権を割り当てる必要があります。
使用例 38  保護されている環境でのブラウザの実行

この例では、保護されている環境でユーザーが Firefox ブラウザを実行できる方法を示します。この構成では、ユーザーの Documents ディレクトリが Firefox では非表示になります。

ユーザーは次のコマンドを使用して、/usr/bin/firefox コマンドから基本特権を削除します。ppriv -r コマンドの拡張特権引数は、ブラウザによる読み取りと書き込みを、ユーザーが指定したディレクトリに制限します。–e オプションとその引数により、拡張特権ポリシーを使用してブラウザが開かれます。

$ ppriv -r "\
{file_read}:/dev/*,\
{file_read}:/etc/*,\
{file_read}:/lib/*,\
{file_read}:/usr/*,\
{file_read}:/var/*,\
{file_read}:/proc,\
{file_read}:/proc/*,\
{file_read}:/system/volatile/*,\
{file_write}:$HOME,\
{file_read}:$HOME/.*,\
{file_read,file_write}:$HOME/.mozill*,\
{file_read,file_write}:$HOME/.gnome*,\
{file_read,file_write}:$HOME/Downloa*,\
{file_read,file_write}:/tmp,\
{file_read,file_write}:/tmp/*,\
{file_read,file_write}:/var/tmp,\
{file_read,file_write}:/var/tmp/*,\
{proc_exec}:/usr/*\
" -e /usr/bin/firefox file:///$HOME/Desktop

拡張ポリシーで file_read および file_write 特権が使用されている場合は、読み取りまたは書き込みが必要なすべてのファイルに対する明示的なアクセス権を付与する必要があります。このようなポリシーではワイルドカード文字 * を使用する必要があります。

自動マウントされたホームディレクトリを操作するため、ユーザーが次の例のように自動マウントパスの明示的なエントリを追加することがあります。

{file_read,file_write}:/export/home/$USER

サイトで automount 機能が使用されていない場合は、保護ディレクトリの最初のリストで十分です。

ユーザーはシェルスクリプトを作成して、このコマンド行保護ブラウザを自動化できます。その後ブラウザを起動するには、ユーザーは /usr/bin/firefox コマンドではなくスクリプトを呼び出します。

使用例 39  アプリケーションプロセスからのシステム上のディレクトリの保護

この例では、通常のユーザーがシェルスクリプトラッパーを使用してアプリケーションのサンドボックスを作成します。このスクリプトの前半では、アプリケーションが特定のディレクトリに制限されます。Firefox などの例外の処理は、このスクリプトの後半で行われます。スクリプトの後に、スクリプトの各部分に関するコメントを示します。

1 #!/bin/bash
2 
3 # Using bash because ksh misinterprets extended policy syntax
4 
5 PATH=/usr/bin:/usr/sbin:/usr/gnu/bin
6 
7 DENY=file_read,file_write,proc_exec,proc_info
8 
9 SANDBOX="\
10 {file_read}:/dev/*,\
11 {file_read}:/etc/*,\
12 {file_read}:/lib/*,\
13 {file_read,file_write}:/usr/*,\
14 {file_read}:/proc,\
15 {file_read,file_write}:/proc/*,\
16 {file_read}:/system/volatile/*,\
17 {file_read,file_write}:/tmp,\
18 {file_read,file_write}:/tmp/*,\
19 {file_read,file_write}:/var/*,\
20 {file_write}:$HOME,\
21 {file_read}:$HOME/.*,\
22 {file_read,file_write}:$PWD,\
23 {file_read,file_write}:$PWD/*,\
24 {proc_exec}:/usr/*\
25 "
26 
27 # Default program is restricted bash shell
28 
29 if [[ ! -n $1 ]]; then
30     program="/usr/bin/bash --login --noprofile
        --restricted"
31 else
32     program="$@"
33 fi
34 
35 
36 # Firefox needs more file and network access
37 if [[ "$program" =~ firefox ]]; then
38     SANDBOX+=",\
39 {file_read,file_write}:$HOME/.gnome*,\
40 {file_read,file_write}:$HOME/.mozill*,\
41 {file_read,file_write}:$HOME/.dbu*,\
42 {file_read,file_write}:$HOME/.puls*\
43 "
44 
45 else
46     DENY+=",net_access"
47 fi
48 
49 echo Starting $program in sandbox
50 ppriv -s I-$DENY -r $SANDBOX -De $program

ポリシーを調整して、特定のアプリケーションに対して許可するアクセス権を増やすかまたは減らすことができます。行 38 から 42 での調整では、Firefox に対し、ユーザーのホームディレクトリ内のセッション情報を保持するドットファイルへの書き込みアクセスが付与されています。また Firefox は、ネットワークアクセスを削除する行 46 の対象ではありません。ただし Firefox は、ユーザーのホームディレクトリ内の任意のファイルの読み取りが制限されており、現行ディレクトリにのみファイルを保存できます。

保護を強化するため、行 30 でデフォルトプログラムが制限付き Bash シェルになっています。制限付きシェルは、その現行ディレクトリを変更したり、ユーザーのドットファイルを実行したりすることはできません。したがって、このシェルから開始するすべてのコマンドは同様にサンドボックスにロックされます。

スクリプトの最後の行で、ppriv コマンドに 2 つの特権セット $DENY および $SANDBOX がシェル変数として渡されます。

最初のセットである $DENY は、プロセスに対し、ファイルの読み取りと書き込み、サブプロセスの実行、ほかのユーザーのプロセスの監視、および (条件付きでの) ネットワークへのアクセスを禁止します。これらの制限は非常に厳しいため、2 番目のセットである $SANDBOX で、読み取り、書き込み、および実行が可能なディレクトリを列挙することでこのポリシーが調整されています。

また行 50 ではデバッグオプション –D が指定されています。アクセス失敗は端末ウィンドウにリアルタイムで表示され、これには名前付きオブジェクトと、正常な実行に必要な該当する特権が含まれています。このデバッグ情報は、ユーザーがほかのアプリケーション向けにポリシーをカスタマイズする際に役立ちます。