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

印刷ビューの終了

更新: 2016 年 11 月
 
 

アプリケーションおよびスクリプトへの権利の割り当て

アプリケーションとスクリプトは 1 つのコマンドまたは一連のコマンドを実行します。権利を割り当てるには、権利プロファイル内の各コマンドに対して、セット ID や特権などのセキュリティー属性を設定します。必要に応じて、アプリケーションは承認を確認できます。


注 -  スクリプト内のコマンドを成功させるためにそのコマンドに対して setuid ビットまたは setgid ビットを設定する必要がある場合は、権利プロファイル内でスクリプト実行可能ファイルおよびそのコマンドに対してセキュリティー属性を追加する必要があります。スクリプトがプロファイルシェルで実行されると、セキュリティー属性を使用してコマンドが実行されます。

特権付きのコマンドを含むシェルスクリプトの実行方法

特権シェルスクリプトを実行するには、そのスクリプトとスクリプト内のコマンドに特権を追加します。このため、該当する権利プロファイルには、特権が割り当てられているコマンドが含まれている必要があります。

始める前に

root 役割になる必要があります。詳細は、割り当てられている管理権利の使用を参照してください。

  1. 1 行目に /bin/pfsh またはほかのプロファイルシェルが指定されているスクリプトを作成します。
    #!/bin/pfsh
    # Copyright (c) 2015 by Oracle
  2. 通常のユーザーとして、スクリプト内のコマンドに必要な特権を判断します。

    特権なしでスクリプトを実行すると、ppriv コマンドの debug オプションにより不足している特権が一覧表示されます。

    $ ppriv -eD script-full-path

    詳細は、プログラムが必要とする特権を判断する方法を参照してください。

  3. スクリプトの権利プロファイルを作成または変更します。

    シェルスクリプトとそのシェルスクリプトに含まれるコマンドを、それらの必要なセキュリティー属性とともに権利プロファイルに追加します。権利プロファイルを作成する方法を参照してください。

  4. 信頼できるユーザーまたは役割に権利プロファイルを割り当てます。

    例については、ユーザーへの権利の割り当てを参照してください。

  5. スクリプトを実行するには、次のいずれかを行います。
    • ユーザーとしてスクリプトが割り当てられている場合、プロファイルシェルを開いてスクリプトを実行します。
      $ pfexec script-full-path
    • 役割としてスクリプトが割り当てられている場合、役割を引き受けてスクリプトを実行します。
      $ su - rolename
      Password: xxxxxxxx
      # script-full-path
使用例 34  レガシーアプリケーションへのセキュリティー属性の割り当て

レガシーアプリケーションは特権を認識しないため、管理者は権利プロファイル内のアプリケーション実行可能ファイルにセキュリティー属性 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 番目のスクリプトを変更することによって、ファイルへの変更のレコードを保持します。

  1. 最初のスクリプトを作成します。

    # pfedit batchpfedit.sh
        #!/usr/bin/bash
        OLDEDITOR=$EDITOR
        export EDITOR=~/bin/key-edit.sh
        pfedit /var/ITdemos/firstdemo-directory
        export EDITOR=$OLDEDITOR

    各情報の意味は次のとおりです。

    OLDEDITOR=$EDITOR

    現在のエディタの値を保持するための OLDEDITOR 変数を定義します。

    ~/bin/key-edit.sh

    編集を含むスクリプトです。

    pfedit /var/ITdemos/firstdemo-directory

    使用するスクリプトの一時的な pfedit ファイルを作成するコマンドです。

    export EDITOR=$OLDEDITOR

    元の $EDITOR 定義を置き換えます。

  2. 編集スクリプトを作成します。

    # 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 コマンドは、この余分な一時ファイルを削除します。

  3. 最初のスクリプトを呼び出します。

    さらに多くの編集スクリプトを作成してから、batchpfedit.sh 内の key-edit.sh スクリプトを新しいスクリプト名に置き換えることができます。