Trusted Solaris 開発ガイド

ファイルシステムのセキュリティ属性の照会

ファイルシステムのセキュリティ属性は、システム管理者が一部のセキュリティ属性を割り当てなかった場合、あるいは作成プロセスで属性を取得していない場合、ローカルまたはマウントされたファイルシステムオブジェクトに対し、欠落しているセキュリティ属性を充てんします。ファイルシステムのセキュリティ属性は、vfstab(4) ファイルと vfstab_adjunct(4) ファイル、あるいはファイルまたはディレクトリの i ノードから取得できます。

vfstab_adjunct ファイルからの属性の取得

vfstab_adjunct(4) ファイルには、遠隔マウントポイントとその関連セキュリティ情報が含まれます。システム管理者は、遠隔ワークステーションからローカルワークステーションにマウントされたファイルシステムが正しいセキュリティ属性を持つように、このファイルの設定と管理を行います。

次の例は、vfstab_adjunct(4) から行を取得して表示します。getvfsaent(3) ルーチンは、初めにファイルの先頭の行を読み取り、それに続く呼び出しごとに次の行を 1 つずつ読み取ります。getvfsaent(3) ルーチンは、入力ファイルに指定されたマウントポイントの行を読み取ります。


注 -

このコード例に示すように、stdio.h を必ずインクルードしてください。


#include <stdio.h>
 #include <tsol/vfstab_adjunct.h>

 main()
 {
 	struct 					vfsaent *entry;
 	char 					*vfsfile = "/etc/security/tsol/vfstab_adjunct";
 	char 					*file = "/shark/doc";
 	int					retval;
 	FILE					*fp;

 	fp = fopen(vfsfile, "r");
 	if (fp == NULL) {
 			printf("Can't open %s¥n", vfsfile);
 			exit(1);
 	}

/* ファイルを 1 行ずつ読み取る */
 	retval = getvfsaent(fp, &entry);
 	if (retval == 0) {
 			printf("Mount Point is %s ¥n Security Info is %s¥n",
 			entry->vfsa_fsname, entry->vfsa_attr);
 			free(entry);
 	}
 	else
 			printf("No entries!¥n");

 	fseek(fp, 0, 0);

/* 指定のマウントポイントの行を読み取る */
 	retval = getvfsafile(fp, &entry, file);
 	if (retval == 0) {
 			printf("Mount Point is %s ¥nSecurity Info is %s¥n",
 			entry->vfsa_fsname, entry->vfsa_attr);
 			free(entry);
 	}
 	else
 			printf("Mount point not found.¥n");
 	fclose(fp);
 }

printf 文によって、次のように出力されます。この vfstab_adjunct ファイルには、/opt/SUNWspro マウントポイントに対するエントリが 1 つだけあります。

Mount Point is /opt/SUNWspro

Security Info is slabel=[C]:allowed all

Mount Point not found

i ノードからの属性の取得

次のコードは、file (ファイル) の CMW ラベル (FSA_LABEL) を取得し、それを buffer (バッファー) に返します。

#include <tsol/fsattr.h>
 #include <tsol/label.h>

 main()
 {
 	char 		*file = "/export";
 	char 		buffer [3*1024], *string = (char *)0;
 	int 		length, retval;

 	length = sizeof(buffer);
 	retval = getfsattr(file, FSA_LABEL, buffer, length);
 	retval = bcltos((bclabel_t *)buffer, &string, 0, VIEW_INTERNAL);
 	printf("/export CMW label = %s ¥n", buffer);
 }

printf 文によって、次のように出力されます。

/export CMW label = ADMIN_LOW [ADMIN_LOW]

明示的定数の値

明示的定数の値は、次のいずれかになります。

FSA_ACLCNT - ファイルシステムアクセスのアクセス制御リスト (ACL) 数

FSA_ACL - ファイルシステムアクセスの ACL

FSA_DFACLCNT - ファイルシステムのデフォルト ACL 数

FSA_DFACL - ファイルシステムのデフォルト ACL

FSA_APRIV - ファイルシステムの許容特権セット

FSA_FPRIV - ファイルシステムの強制特権セット

FSA_LABEL - ファイルシステムの CMW ラベル

FSA_AFLAGS - ファイルシステムの属性フラグ。「ファイルシステムのセキュリティ属性フラグの取得と設定」を参照してください。

FSA_LBLRNG - ファイルシステムのラベル範囲

FSA_MLDPFX - ファイルシステムのマルチレベルディレクトリの接頭辞文字列

FSA_APSACNT - プロセス監査の事前選択マスク内のクラスの数

FSA_APSA - プロセス監査の事前選択マスク内のクラス。プロセスは、この情報を取得する場合、有効特権セット内で file_audit 特権を必要とする。詳細は、「特権と承認」を参照してください。

明示的定数の内容

CMW ラベル、ファイルシステムのラベル範囲、ファイル特権、およびマルチレベルディレクトリにアクセスするプログラミングインタフェースの概要は、「Trusted Solaris 7 のセキュリティ機構」で述べています。詳細は、該当するそれぞれの章を参照してください。