IT用語/アクセス制御(DAC、MAC)

アクセス制御(2014-09-11)



概要

アクセス制御は大きく

  • 認証(authentication。あなたは誰ですか)
  • 認可(authorization。あなたに権限を与えましょう)
  • 監査(audit。あなたが何をやったか調べます)

からなりますが、今回は主に「認可」の話です。

あるユーザが、ファイルに対して読み/書き/実行のどこまで許されているかを決める仕組み。
はい、もっと難しく言うと。
ユーザやプロセス(=サブジェクト)がシステム、ファイル、ソケット等の各リソース(=オブジェクト)に対して、どのアクセス(Create/Read/Update/Delete)が許されているかを制御すること。

この際、与える権限は常に必要最小限のものでなくてはなりません(最小権限の原則*1)。
最小権限を実装する方式の例が以下になります。

随意アクセス制御(or 任意アクセス制御。Discretionary Access Control:DAC)

一般的なOSでやっているあれ。「所有者」が「権限」を、決めるやつ。
Windowsだとファイルのプロパティ - セキュリティから決めたり。
Unixだとchownやchmodで所有者やパーミッションを決めたりする。
そして、管理者(Administratorやroot)にはすべての権限が与えられる。

強制アクセス制御(Mandatory Access Control:MAC)

所有者ではなく、「システムが」権限を決める。
例えば、ある操作ログをフォレンジック(法的証拠)として記録しておきたい場合に、たとえ操作した本人やシステム管理者でも改竄されたら(書込み権限を与えたら)困る、というような高度の権限管理が求められる場合に必要となる制御。
実装方法は色々あり、以下代表的なものを*2

ロールベースアクセス制御(Rolebased Access Control:RBAC)

SQLでいうところの、GRANTやREVOKEでしょうか。

  1. ロール(役割)という権限の集合を作る*3
  2. ユーザをロールに所属させる
  3. ユーザは、ロール内で許されたアクセス権限を行使できる

ロール単位で管理できるのがメリット。特定の集団に対する権限の付与/奪取がまとめてできたり、ユーザの部署移動時の権限変更が楽になったりする。

TE(Type Enforcement)

これはSELinuxの例ですが、プロセスがアクセスできるリソースを制限する仕組み。

  1. HTTPプロセスやFTPプロセス等の各プロセスに「ドメイン」というラベル(識別子)を付与する。
  2. ファイル、ディレクトリ、ソケット等のリソースに「タイプ」というラベル(識別子)を付与する。
  3. 「アクセスベクタ」という設定で、"ドメイン(あるプロセス)"が"タイプ(あるリソース)"に対してどのような権限を持つか決める。

*1 「最小の権限」と「責務の分離」をセットで覚えておきましょう。要は一人の管理者に全権を預ければ良いというものではな無い、ということになります。
*2 ていうか、調べたらきりが無かったです。基本的にはOSのカーネル(いわゆる心臓部)レベルで各々のアクセス制御機能を組み込むようですね。
*3 例えば、「部署Aのログ監査役」というロールに、部署Aのログファイルの読み取り権限を与える。この時、ログファイルへの書込み権限や部署Bに関する権限は与えない。というイメージ。

  最終更新のRSS