承認は、/etc/security/auth_attr ファイル内に格納されます。承認を使用するアプリケーションを開発するには、次の手順に従います。
次のように getent コマンドを使用して、auth_attr データベース内のエントリをスキャンします。
% getent auth_attr | sort | more
getent コマンドは auth_attr データベース内の承認の一覧を取得し、類似した名前の承認をまとめてソートします。承認は、構成された順序で取得されます。getent コマンドの使用については、getent(1M) のマニュアルページを参照してください。
プログラム開始時に、chkauthattr(3C) 関数を使って必要な承認の有無を検査します。
chkauthattr() 関数は、次の場所で順に承認を検索します。
policy.conf(4) データベース内の AUTHS_GRANTED 鍵 – AUTHS_GRANTED は、デフォルトで割り当てられた承認を示します。
policy.conf(4) データベース内の PROFS_GRANTED 鍵 – PROFS_GRANTED は、デフォルトで割り当てられた権利プロファイルを示します。chkauthattr() は、これらの権利プロファイルに指定された承認が含まれているかどうかを検査します。
user_attr(4) データベース – このデータベースには、ユーザーに割り当てられたセキュリティー属性が格納されています。
prof_attr(4) データベース – このデータベースには、ユーザーに割り当てられた権利プロファイルが格納されています。
chkauthattr() 実行時に正しい承認がこれらのどの場所にも見つからなかった場合、そのユーザーはプログラムへのアクセスを拒否されます。chkauthattr() 関数が Stop プロファイルを検出した場合、AUTHS_GRANTED、PROFS_GRANTED、および /etc/security/policy.conf から検出される承認およびプロファイルは無視されます。したがって、Stop プロファイルは /etc/security/policy.conf ファイル内の PROFS_GRANTED および AUTHS_GRANTED キーを使用して一覧表示されるプロファイルをオーバーライドするために使用できます。
提供されたセキュリティー属性を使用する方法、新しいセキュリティー属性を追加する方法、およびセキュリティー属性をユーザーおよびプロセスに割り当てる方法については、Chapter 3, Assigning Rights in Oracle Solaris, in Securing Users and Processes in Oracle Solaris 11.2 を参照してください。
次のコードスニペットは、chkauthattr() 関数を使ってあるユーザーの承認を検査する方法を示したものです。この場合、プログラムは solaris.job.admin 承認の有無を検査しています。このユーザーがこの承認を持っている場合、このユーザーはほかのユーザーのファイルを読み書きできます。この承認がない場合、このユーザーが操作できるのは、自身が所有するファイルだけになります。
/* Define override privileges */ priv_set_t *override_privs = priv_allocset(); /* Clear privilege set before adding privileges. */ priv_set(PRIV_OFF, PRIV_EFFECTIVE, PRIV_FILE_DAC_READ, priv_FILE_DAC_WRITE, NULL); priv_addset(override_privs, PRIV_FILE_DAC_READ); priv_addset(override_privs, PRIV_FILE_DAC_WRITE); if (!chkauthattr("solaris.jobs.admin", username)) { /* turn off privileges */ setppriv(PRIV_OFF, PRIV_EFFECTIVE, override_privs); } /* Authorized users continue to run with privileges */ /* Other users can read or write to their own files only */