今回は「強制アクセス制御
(mandatory access control, MAC)」
を知ろう!
なんだかすごそうな名前だね!
Linux の基本的なアクセス制御は
「パーミッション」なんだ
パーミッションのように
アクセス制御対象の所有者が
自分で制御を決められる方式を
「任意アクセス制御
(discretionary access control, DAC)」
とよぶよ
ファイル所有者が 「任意」の
アクセス制御だと思う!
chmod
で
パーミッションを設定できるよね
確かに
パーミッションは仕組みは簡単だけど
ちゃんとアクセス制御できているよね?
でも色々な使われ方をしているうちに
パーミッションだけでは
不十分な場合も出てきたんだ
たとえばどんな感じかな?
みどりのゲームサーバプログラムが
悪意あるユーザに
乗っ取られたとしよう
たまに耳にする
「任意のコードを
実行できる脆弱性」
とかというやつだね!
その悪意あるユーザは
ゲームサーバプロセス実行者の権限で
そこからほとんどのコマンドを
実行できてしまうんだ
ほとんどのコマンドは
パーミッションで誰でも
実行を許しているからね
確かにそうなっちゃうね
そこでゲームサーバのプロセスに
以下のような制限を
設けられたとしよう
- ゲームサーバのコマンドだけ実行できる
- ゲームサーバに関係あるディレクトリ配下のみアクセスできる
- ゲームサーバが扱う設定ファイルのみ読み込みできる
- ゲームサーバが扱うデータファイルのみ読み書きできる
- ゲームサーバが使うポートのみ使用できる
良さそうな仕組みだね!
ゲームサーバが乗っ取られても
ゲームサーバ本来の動作以外は
実質何もできなくなっちゃうね!
このようにアクセス制御対象を
所有者ではなくシステムが管理して
できることできないことを
強制するアクセス制御を
「強制アクセス制御」とよぶよ
とても強力な
アクセス制御なんだね
強制アクセス制御の実装には
以下のようなものがあるよ
実装 | 説明 |
---|---|
SELinux | 細く設定できるが難しい |
AppArmor | 簡単に使えることを目指している |
TOMOYO Linux | 動作の学習から設定を作成する |
強制アクセス制御の実装は
ディストリビューションに
含まれている場合がほとんどなんだ
なのでディストリビューションの
デフォルトを使うのが無難だよ
強制アクセス制御の実装 | ディストリビューション |
---|---|
SELinux | Red Hat 系(CentOS, |
AppArmor | Debian 系(Debian, |
強制アクセス制御は
どうやって設定すれば
いいのかな?
強制アクセス制御の設定は複雑で難しく
強制アクセス制御の実装によっても変わるんだ
なのでここでは紹介だけに留めておくね
今回は強制アクセス制御を学んだよ!
パーミッションではできなかった
細かなアクセス制御を指定できるんだ!
強制アクセス制御は簡易な解説では
「最初にオフにしましょう」と
書かれてしまうぐらい
難しい話題なんだ
でもちゃんと設定すれば
強固なセキュリティを
確保できる仕組みだよ!