通常の UNIX シェル (sh, csh, csh) が割り当てられているユーザーは、特権を使用しないでシステム内の任意のコマンドを実行する、新しいシェルスクリプトを作成することができます。このスクリプトに特権を必要とするコマンドが含まれていない場合、ソフトウェアへのアクセス権を持ち、シェルスクリプトを解釈するためのシェルを実行できるユーザーは全員、シェルスクリプトを使用することができます。
シェルスクリプトで実行されるコマンドに特権を付与することができるのは、セキュリティ管理者役割だけです。シェルスクリプトの実行時に特権を使用するかどうかに影響する Trusted Solaris の制約について確認します。
特権を使用してコマンドを実行できる 2 つの方法を確認します。
コマンドの実行可能ファイルの強制セットと許容セットの両方に必要な特権が設定されている
コマンドに必要な特権が、コマンドを呼び出すユーザーまたは役割に割り当てられたプロファイルに設定されている。コマンドのプログラムファイルに必要な特権が許容セットに設定されている。コマンドが特権を継承できるプロファイルシェルで呼び出される
「強制された」特権コマンドは、どのシェルでも特権を使用して実行できます。これは、プログラムファイルに付与された「強制された特権」が、シェル自体に特権がなくても、コマンドの実行に適用されるからです。「強制された特権」を csh、sh、ksh シェルスクリプトに割り当てても、シェルスクリプトが実行するコマンドに特権を付与することにはなりません。これは、スクリプトから起動されたシェルが「強制された特権」を使用して実行された場合でも、シェルの「継承可能セット」に特権が設定されていないからです。プロセスが特権を取得する方法については、「プロセス特権セット 」で説明した規則を参照してください。
実行可能プログラムを編集する際、オブジェクトコードやシステムスクリプトが無許可で改ざんされないようにするために、そのファイルに付与されていた「強制された特権」と「許容された特権」は削除されます。プログラムファイルの「許容セット」が空の場合、継承可能な特権は「許容セット」にマスクされ、使用することができません。ただし、プロファイル機構 は、「継承可能な特権」を使用可能にするときに、シェルスクリプトの「強制された特権」と「許容された特権」を参照しません。このため、シェルスクリプトは修正されても気付かれないことがあります。セキュリティ管理者役割は、「継承可能な特権」を使用するシェルスクリプトを使用可能にする前に、改ざんに対する保護が、プログラムに有効であってもシェルスクリプトに対しては有効でないことに留意しておく必要があります。
I特権を必要とするコマンドを含まないスクリプトであれば、テキストエディタを使用できるどのユーザーでも作成することができる
ソフトウェアへのアクセス権を持ち、シェルスクリプトを解釈するためのシェルを実行できるユーザーであれば、だれでもシェルスクリプトを使うことができる
シェルスクリプトの「強制された特権」は、その中のコマンドに特権を引き渡さない
シェルスクリプトの「許容された特権」によって、シェルスクリプトによって実行されるプログラムで使用できる特権が変わることはない
スクリプトのファイルの「許容セット」ではなく、呼び出されたシェルのファイルの「許容セット」がチェックされます。
呼び出したユーザーのプロファイルに設定されているシェルスクリプトに、そのコマンドに必要な特権が指定されている場合に限り、プロファイルシェルで呼び出された標準のシェルスクリプトは実行するコマンドに特権を引き渡すことができる
コマンドがそのプログラムファイル上に「許容された特権」を持っていれば、シェルスクリプトは、そのコマンドによって継承される特権を引き渡すことができます。コマンドは標準のシェル内で実行されるため、呼び出すアカウントのプロファイルに特権を指定してコマンドを設定することは無意味です。これは、標準のシェルがプロファイルデータベースを参照しないからです。次の図を参照してください。
呼び出したユーザーのプロファイルに必要な特権と一緒にコマンドが設定されている場合、プロファイルシェルを使用するシェルスクリプトは、使用するシェルの種類に関わらずコマンドに特権を引き渡すことができる
#!/bin/pfsh という行で始まるシェルスクリプトを一般ユーザーが呼び出した場合、その動作は管理役割が呼び出した場合の動作とは異なります。
プロファイルシェルを呼び出すシェルスクリプトは、一般ユーザーによって任意のシェルのコマンド行から実行可能
ユーザーがプロファイル内に All Commands を登録している場合、特定のプロファイルシェルの名前をそのユーザーのプロファイルに明示的に追加する必要はない
プロファイルシェルスクリプト内のすべてのコマンドはユーザーのプロファイルに登録されていなければならない。あるいは、ユーザーに All Commands プロファイルが必要。特権が必要なコマンドは、その特権とともにユーザーのプロファイルに登録されている必要がある
プロファイルシェルスクリプト (#!/bin/pfsh を使う) は、常に、プロファイルシェルのコマンド行から実行する必要がある
役割は、コマンド行から、あるいはトラステッドパスを持たないシェルスクリプト (GUI を起動する) からプロファイルシェルを実行できない。通常のユーザーは、コマンド行からも、あるいはトラステッドパスを持たないプロファイルシェルからもプロファイルシェルを実行できる
役割は、トラステッドパスを利用するために、#!/bin/pfsh を使うスクリプトの名前を Custom role_name Profile などのプロファイル内に明示的に登録する必要がある (障害追跡を簡単にするため、Custom role_name Profile だけを変更することをお勧めする)
すべての役割が All Commands プロファイルを持っている場合でも、All Commands プロファイルを持っている一般ユーザーとは異なり、役割の場合は、スクリプト名がプロファイル内に明示的に登録されていなければならない
一般ユーザーの場合と同様に、プロファイルシェルスクリプト内のすべてのコマンドはユーザーのプロファイルの 1 つにも登録されていなければならない
詳細は、「特権コマンドを実行するプロファイルシェルスクリプトを作成するには」を参照してください。