アプリケーションとスクリプトは 1 つのコマンドまたは一連のコマンドを実行します。権利を割り当てるには、権利プロファイル内の各コマンドに対して、セット ID や特権などのセキュリティー属性を設定します。必要に応じて、アプリケーションは承認を確認できます。
権利を必要とするスクリプトを実行する – 特権付きのコマンドを含むシェルスクリプトの実行方法
機密ファイルをバッチ編集する – 使用例 37
root 以外のユーザーが root 所有のアプリケーションを実行できるようにする – 使用例 35
スクリプト内の承認を確認する – 使用例 36
特権シェルスクリプトを実行するには、そのスクリプトとスクリプト内のコマンドに特権を追加します。このため、該当する権利プロファイルには、特権が割り当てられているコマンドが含まれている必要があります。
始める前に
root 役割になる必要があります。詳細は、割り当てられている管理権利の使用を参照してください。
#!/bin/pfsh # Copyright (c) 2015 by Oracle
特権なしでスクリプトを実行すると、ppriv コマンドの debug オプションにより不足している特権が一覧表示されます。
$ ppriv -eD script-full-path
詳細は、プログラムが必要とする特権を判断する方法を参照してください。
シェルスクリプトとそのシェルスクリプトに含まれるコマンドを、それらの必要なセキュリティー属性とともに権利プロファイルに追加します。権利プロファイルを作成する方法を参照してください。
例については、ユーザーへの権利の割り当てを参照してください。
$ pfexec script-full-path
$ su - rolename Password: xxxxxxxx # script-full-path
レガシーアプリケーションは特権を認識しないため、管理者は権利プロファイル内のアプリケーション実行可能ファイルにセキュリティー属性 euid=0 を割り当てます。次に、管理者はそれを信頼できるユーザーに割り当てます。
# profiles -p LegacyApp profiles:LegacyApp> set desc="Legacy application" profiles:LegacyApp> add cmd=/opt/legacy-app/bin/legacy-cmd profiles:LegacyApp:legacy-cmd> set euid=0 profiles:LegacyApp:legacy-cmd> end profiles:LegacyApp> exit # profiles -p LegacyApp 'select cmd=/opt/legacy-app/bin/legacy-cmd;info;end' id=/opt/legacy-app/bin/legacy-cmd euid=0
# usermod -K profiles+="Legacy application" jdoe使用例 35 割り当てられた権利でのアプリケーションの実行
この例では、管理者は 使用例 46の権利プロファイルを信頼できるユーザーに割り当てます。ユーザーはスクリプトの実行時にパスワードを入力する必要があります。
# usermod -K auth_profiles+="Site application" jdoe使用例 36 スクリプトまたはプログラム内の承認の確認
承認を確認するには、auths コマンドに基づくテストを作成します。このコマンドの詳細については、auths(1) のマニュアルページを参照してください。
たとえば、次の行では、$1 引数に指定した承認がユーザーに与えられているかどうかをテストします。
if [ `/usr/bin/auths|/usr/xpg4/bin/grep $1` ]; then echo Auth granted else echo Auth denied fi
より完全なテストには、ワイルドカードの使用を確認するロジックが含まれています。たとえば、solaris.system.date 承認がユーザーにあるかどうかをテストするには、次の文字列を確認する必要があります。
solaris.system.date
solaris.system.*
solaris.*
プログラムを作成している場合は、getauthattr() 関数を使用して、承認をテストします。
使用例 37 ディレクトリ内のファイルのバッチ編集のスクリプト作成この例は、2 つのスクリプトを使用して機密ファイルをバッチ編集する方法を示しています。最初のスクリプトはデフォルトエディタを消去し、2 番目のスクリプトを呼び出します。2 番目のスクリプトは編集スクリプトです。2 番目のスクリプトを変更することによって、ファイルへの変更のレコードを保持します。
最初のスクリプトを作成します。
# pfedit batchpfedit.sh #!/usr/bin/bash OLDEDITOR=$EDITOR export EDITOR=~/bin/key-edit.sh pfedit /var/ITdemos/firstdemo-directory export EDITOR=$OLDEDITOR
各情報の意味は次のとおりです。
現在のエディタの値を保持するための OLDEDITOR 変数を定義します。
編集を含むスクリプトです。
使用するスクリプトの一時的な pfedit ファイルを作成するコマンドです。
元の $EDITOR 定義を置き換えます。
編集スクリプトを作成します。
# pfedit batchpfedit.sh #!/usr/bin/bash OLDEDITOR=$EDITOR export EDITOR=~/bin/key-edit.sh pfedit /var/ITdemos/firstdemo-directory export EDITOR=$OLDEDITOR
2 番目のスクリプトには、編集する変更が含まれています。この例では、key-edit.sh スクリプトは単語 pey を単語 key に置き換えます。
#!/usr/bin/bash perl -pi.pfedit -e 's/pey/key/g' $1 rm $1.pfedit
$1 は、一時ファイルを検索します。
perl -pi.extension は一時ファイルを作成し、元のファイルに書き戻します。
rm コマンドは、この余分な一時ファイルを削除します。
最初のスクリプトを呼び出します。
さらに多くの編集スクリプトを作成してから、batchpfedit.sh 内の key-edit.sh スクリプトを新しいスクリプト名に置き換えることができます。