Trusted Solaris 開発ガイド

ファイルシステムのセキュリティ属性フラグの取得と設定

この例は、通常のディレクトリに公開属性フラグを設定し、マルチレベルディレクトリの MLD フラグを取得します。この例を実行するには、プロセスに file_owner 特権と file_audit 特権が必要です。setfpriv(1) を使用してこれらの特権を次のように設定してください。setfpriv(1) は、プロファイルシェルから実行されるとき、file_setpriv 特権を必要とします。

phoenix% setfpriv -s -a file_owner,file_audit executable

#include <tsol/secflgs.h>
 main()
 {
 	secflgs_t 					value;
 	char 					*file = "/opt/SUNWspro";														/* MLD ではない */
 	char 					*file1 = "/export/home/zelda"; 														/* MLD */
 	int					retval;

 	retval = setfattrflag(file, FAF_PUBLIC, FAF_PUBLIC);
 	retval = getfattrflag(file, &value);
 	printf("Public Attribute Flag = %d¥n", value);

 	retval = mldgetfattrflag(file1, &value);
 	printf("MLD Attribute Flag = %d¥n", value);
 }

printf 文によって、次のように出力されます。1 は true (真) を、0 は false (偽) を意味します。

Public Attribute Flag = 0

MLD Attribute Flag = 1

FAF_MLD - ディレクトリはマルチレベルディレクトリです。FAF_MLD は、ディレクトリが空で、プロセスの実効ユーザー ID がディレクトリの所有者と一致し、プロセスに必須書き込みアクセスがある場合に、特権なしで設定できます。

FAF_SLD - ディレクトリはシングルレベルディレクトリです。このフラグをプログラムから設定することはできません。

装飾パス名が getfattrflag(1) に渡される場合でディレクトリがマルチレベルディレクトリ (MLD) の場合は、FAF_MLD が返されます。装飾されていないパス名が渡される場合でディレクトリが MLD の場合は、FAF_SLD が返されます。

装飾パス名が mldgetfattrflag(2) に渡される場合でディレクトリが MLD のときは FAF_SLD が返されます。装飾されていないパス名が渡される場合でディレクトリが MLD のときは、FAF_MLD が返されます。

装飾名の詳細は、第 8 章「マルチレベルディレクトリ」を参照してください。

FAF_PUBLIC - ファイルまたはディレクトリは公開です。監査記録は、公開ファイルと公開ディレクトリの読み取り操作に対しては作られません。これは、読み取り操作が事前選択された監査クラスの一部である場合でも同様です。このフラグは、次の読み取り操作に適用されます。access(2)fstatvfs(2)lstat(2)open(2) (読み取りのみ)、pathconf(2)readlink(2)stat(2)statvfs(2)


注 -

事前選択された監査クラスに AUE_MAC 監査または AUE_UPRIV 監査の疑似イベントが含まれる場合は、公開属性フラグの設定に関係なく上記のイベントの監査記録は常に作られます。疑似監査イベントの詳細は、『Trusted Solaris の監査管理』を参照してください。


ファイルまたはディレクトリに対し公開属性フラグを取得または設定する場合、プロセスは有効セットに file_audit 特権または file_owner 特権を必要とします。詳細は、「特権と承認」を参照してください。このフラグは、『Trusted Solaris 管理の手順』に述べているように、管理者の権限を使用しても設定できます。

FAF_ALL - ディレクトリは公開 MLD です。