PAM SC の SUDO レコードの定義

借用した権限でユーザがスクリプトを実行できるように、SUDO クラスのレコードを定義する方法について説明します。
capamsc141
SUDO クラスのレコードには、コマンド スクリプトが格納されています。ユーザは、借用した権限でそのスクリプトを実行できます。SUDO レコードと、スクリプトを実行する sesudo コマンドは、権限を利用する機能を制御します。
SUDO レコードでは、comment プロパティを特別な目的に使用します。comment プロパティは多くの場合に data プロパティと呼ばれます。
data プロパティの値は、コマンド スクリプトです。禁止(prohibited)または許可(permitted)するスクリプト パラメータ値が必要に応じて追加される場合もあります。data プロパティの値全体は、一重引用符で囲む必要があります。トロイの木馬の侵入を防ぐために、実行可能ファイルは完全パス名で参照してください。
data プロパティの形式は、以下のとおりです。
data('cmd[;[prohibited-values][;permitted-values]] ')
prohibited および permitted の値のリストは省略できるため、data プロパティの値は以下のような簡単な値にすることもできます。
newres SUDO MountCd data('mount /dev/cdrom /cdr')
この例では、コマンドに指定されている簡単な値によって、sesudo MountCd コマンドで mount /dev/cdrom /cdr というスクリプトが実行されます。特定のスクリプト パラメータ値が禁止されていないため、すべての値が許可されます。
ワイルドカードと強力な変数を使用すると、prohibited パラメータおよび permitted パラメータを柔軟に指定できるようになります。使用できるワイルドカードは、UNIX の標準的なワイルドカードです。以下の表に変数をリストします。
変数
説明
$A
英字の値
$G
既存の
CA Privileged Access Manager
グループ名
$H
ユーザのホーム パス パターン
$N
数値
$O
実行者のユーザ名
$U
既存の
CA Privileged Access Manager
ユーザ名
$e
パラメータが指定されていない SUDO コマンド
$f
既存のファイル名
$g
既存の UNIX グループ名
$h
既存のホスト名
$r
UNIX の読み取り許可が付与された既存の UNIX ファイル名
$u
既存の UNIX ユーザ名
$w
UNIX の書き込み許可が付与された既存の UNIX ファイル名
$x
UNIX の実行許可が付与された既存の UNIX ファイル名
prohibited
パラメータ値のリストをスクリプトに追加する場合は、以下のようにします。
  • スクリプトと prohibited パラメータの値をセミコロンで区切り、全体を一重引用符で囲みます。例: ユーザによる -9 の使用を禁止するが、それ以外のすべてのパラメータの使用を許可し、以下のコマンドを入力します。
    newres SUDO scriptname data('cmd;-9')
    ここで、
    cmd
    はユーザのスクリプトを表します。
    また、パラメータ値を許可せず、すべてのパラメータをデフォルトに設定する場合は、SUDO レコードを以下のように定義します。
    newres SUDO scriptname data('cmd;*')
  • 1 つのスクリプト パラメータに対して複数の prohibited 値を指定する場合は、スペース文字を区切り記号として使用します。例: ユーザによる -9 および -HUP の使用を禁止するが、それ以外のすべてのパラメータの使用を許可し、以下のコマンドを入力します。
    newres SUDO scriptname data('cmd;-9 -HUP')
  • 複数のスクリプト パラメータに対して prohibited 値を指定する場合は、パイプ(|)を区切り記号として使用して、それぞれの prohibited 値セットの間を区切ります。例: スクリプトの最初のパラメータに -9 および -HUP の使用を禁止し、2 番目のパラメータに既存の UNIX ユーザ名(前出の変数の一覧を参照)の使用を禁止して、以下のコマンドを入力します。
    newres SUDO scriptname data('cmd;-9 -HUP | $u')
    指定したパラメータよりスクリプトのパラメータが多い場合は、指定した最後の prohibited パラメータのセットが、残りすべてのパラメータに適用されます。
permitted
パラメータ値のリストをスクリプトに追加する場合は、以下の操作を行います。
  • sesudo ユーティリティでは、パラメータ値が、対応する prohibited 値のいずれとも一致しないこと、および対応する permitted 値の少なくとも 1 つと一致することの 2 つがチェックされます。
    permitted
    値のリストと
    prohibited
    値のリストをセミコロンで区切り、全体を一重引用符で囲みます。prohibited 値のリストを指定しない場合でも、セミコロンは必要です。セミコロンがないと、permitted 値として指定した値が、prohibited 値として処理されます。例: スクリプトのパラメータ値として値 NAME のみを許可する場合は、以下のコマンドを入力します。
    newres SUDO scriptname data('cmd;;NAME')
    他のリストの指定も同様に行います。
    • 1 つのスクリプト パラメータに対して複数の permitted 値を指定する場合は、スペース文字を区切り記号として使用します。
    • 複数のスクリプト パラメータに permitted 値を指定する場合は、パイプ(|)を区切り記号として使用して、それぞれの permitted の値セットの間を区切ります。
    例: 2 つのパラメータがあるとします。最初のパラメータには UNIX のユーザ名でない数字を指定し、2 番目のパラメータには UNIX のグループ名でない英字を指定する必要がある場合は、以下のコマンドを入力します。
    newres SUDO scriptname data('cmd; $u | $g ; $N | $A')
    スクリプトのパラメータが指定したパラメータより多い場合は、指定した最後の permitted パラメータのセットが、残りすべてのパラメータに適用されます。
したがって、data プロパティ全体の形式は、スクリプト、パラメータごとの prohibited 値、パラメータごとの permitted 値の順になります。
data('cmd; param1_prohib1 param1_prohib2 ... param1_prohibN | \ param2_prohib1 param2_prohib2 ... param2_prohibN | \ ... paramN_prohib1 paramN_prohib2 ... paramN_prohibN ; \ param1_permit1 param1_permit2 ... param1_permitN | \ param2_permit1 param2_permit2 ... param2_permitN | ... paramN_permit1 paramN_permit2 ... paramN_permitN')