次の例では、プログラムの実行時にプロセスが特権を獲得する方法を標準の UNIX シェルの場合とプロファイルシェルの場合で比較しています。標準の UNIX シェルで実行される場合、プログラムのプロセスが使用できるのは、プログラムの「強制セット」と「許容セット」両方に (共通に) 含まれる特権だけです。プロファイルシェルで実行される場合、プログラムのプロセスは、シェルの「継承可能セット」から特権を獲得し、このうちプログラム自身の「許容セット」と共通の特権を使用することができます。説明を簡潔にするため、例の中では、特権には、名前ではなく番号が割り当てられています。
図 16-1 の左側の円は標準の UNIX シェルのプロセスを表しています。ここで、ユーザーは programX というコマンドを入力します。シェルのプロセスのものとして示される継承可能セットは、空 (null) になっています。これは、標準シェルのプロセスが特権を持っていないためです。
図 16-1 では、中央の四角形は programX を表し、このプログラムには、「強制された特権」と「許容された特権」があります。強制された特権は、1、3、5、許容された特権は、1、3、5、11、12、19 です。右側の円は、programX を実行するプロセスを表しています。ここでは、「許容セット」と「有効セット」に、プログラムファイルに割り当てられた「強制された特権」が与えられています。図 16-1 では、親プロセスが標準のシェルで、「継承可能な特権」はありません。そのため、新しいプロセスに割り当てられる特権セットには、プログラムファイルから獲得した「強制された特権」のみが含まれ、新しいプロセスの「継承可能セット」は空のままになっています。
図 16-2 は、ユーザーや役割アカウントが、プロファイルシェルで programY を実行する場合を表しています。
上の図 1-2 では、プロファイルシェルは、どのユーザーまたは役割がコマンドを実行しているのかを確認し、そのコマンドがアカウントのプロファイルに含まれていることを確かめます。また、アカウントのプロファイルにそのコマンドに対する特権が指定されているかどうかを確認して、指定された特権だけを自分の「継承可能セット」に追加します。図に示すように、実行可能な programY 自体は「強制された特権」を持たず、「許容セット」には、10、12、19 が含まれています。programY の「許容セット」には 10、12、19 の 3 つの特権が含まれているため、programY を実行するプロセスは、親プロセスから特権 10、12、19 を継承し、プロセスの「有効セット」と「許可セット」には特権 10、12、19 が設定されます。
プログラムファイルの「許容セット」に特権がない場合、そのプログラムを実行するプロセスの「許可セット」と「有効セット」は、常に空になります。