ユーザーは、拡張特権ポリシーを使用してアプリケーションから基本特権を削除できます。このポリシーは、アプリケーションがアクセスすべきではないディレクトリへのアクセスを防ぎます。
この例では、保護されている環境でユーザーが 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 コマンドではなくスクリプトを呼び出します。
使用例 4-5 アプリケーションプロセスからのシステム上のディレクトリの保護この例では、通常のユーザーがシェルスクリプトラッパーを使用してアプリケーションのサンドボックスを作成します。このスクリプトの前半では、アプリケーションが特定のディレクトリに制限されます。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 が指定されています。アクセス失敗は端末ウィンドウにリアルタイムで表示され、これには名前付きオブジェクトと、正常な実行に必要な該当する特権が含まれています。このデバッグ情報は、ユーザーがほかのアプリケーション向けにポリシーをカスタマイズする際に役立ちます。