大学で、SELinuxの講習会をうけたので、そのメモです。かなり基礎的な部分の説明で、アクセス制御の部分を集中的に教えてもらいました。

セキュアOSと呼ばれるOSの中でも、フリーで手に入るSELinuxは今後かなり注目されそうです。今日は、アクセス制御の仕組みとロールの付与の仕方について勉強しましたが、そのほかにもいろんな機能がある様子。詳しくは、『SELinux徹底ガイド』を読むのが良いらしいです。(宣伝宣伝っと 笑)

セキュアOSとは何ぞやって事とSELinuxのアクセス制御(Type Enforcement)の方法、セキュリティ属性Role-Based Access Control あたりをメモっておきます。かなり適当なメモなので、読むだけだと分からないかも・・・。『SELinux徹底ガイド』買おっかな。

特徴

セキュアOSとは

大まかに2つの機能。強制アクセス制御機能とシステム管理権限を複数のユーザに分割する機能を持つOSのこと。

強制アクセス制御は、MAC (Mandatory Access Control)と呼ばれる。あらかじめ設定されたセキュリティポリシーにしたがって、カーネルレベルでリソースへのアクセスを制御する仕組み。

システム管理権限を複数のユーザに分割するとは、RBAC (Role-Based Access Control) と呼ばれるロールベースのシステム管理方法。権限を細分化することで、root権限の分散を実現している。

これまでのLinuxOSの問題点

これまでのOSの仕組みでは、リソースへのアクセス権をDAC (Discreationary Access Control) と呼ばれる任意アクセス制御によって行っていた。これは、リソースの所有者が任意にアクセス許可を設定できる。プロセスのUID(ユーザID)とGID(グループID)、リソースの所有者とグループの比較により、アクセス権をチェックしていた。

これでは、管理者がいくらセキュリティポリシーを作っても、全ユーザにポリシーを守らせることは難しいし、root権限を奪取されてしまった場合にすべてのアクセスを許す結果になってしまう。

また、root権限は最高位権限で、あらゆる処理を行えてしまう。いったんroot権限を奪われたら、コンピュータを乗っ取られたのと同じことになる。

そこで考え出されたのが、強制アクセス制御と権限の細分化である。強制アクセス制御によって、セキュリティポリシーで許可されていないアクセスは、たとえrootであっても拒否される。権限の細分化により、アプリケーション管理者とシステム管理者とで行えることが違うという設定が可能になった。

セキュリティコンテキスト

SELinuxでは、セキュリティコンテキストと呼ばれるセキュリティ属性を使ってアクセス制御やRBAC を制御する。セキュリティ属性は、以下の3つの要素からなる。

セキュリティコンテキスト

ユーザ属性は、SELinuxがユーザを識別するのに使います。ロール属性は、RBACで設定されたアクセス権を示します。タイプ属性が、リソースへのアクセス制御に使われるものです。この、タイプ属性をセキュリティポリシーと比較することで、リソースへのアクセス許可を出します

例: hamasyou:sysadm_r:sysadm_t
ユーザ識別子: hamasyou
ロール: sysadm_r
タイプ: sysadm_t

ドメイン遷移

セキュリティポリシーが存在しない場合、親プロセスから生成された子プロセスは、親プロセスのタイプ属性を継承します。これは、かなり危険で、例えば httpd デーモンをセキュリティ管理者権限を持つプロセスが実行した場合、httpd から生成される子プロセスは、セキュリティ管理者権限を持ってしまいます。

そこで、ドメイン遷移定義を設定することで、あるタイプ属性を持つプロセスが起動したプロセス(親プロセス)から割り当てられるプロセス(子プロセス)のタイプ属性を任意に設定できます。

Role-Based Access Control

RBACは root 権限にすべての権限が集中してしまうのを改善する目的で導入されたものです。権限の細分化によって、管理者権限の厳重な管理を行います。

権限は、ロールというものに割り当てます。SELinuxでは、ロールごとにタイプ属性を付与します。作成したロールは、ユーザごとに割り振ります。ユーザに付与されたロールは、シェルの起動に使われます。シェルは、ロールに付与されたタイプ属性の権限で動きます。

参考