Railsの情報サイトです。設定するTweet2013/01/062013年最初の『Rails雑感』のテーマは、AppArmorです。Server上でPassengerを利用してRailsアプリケーションを運用する場合にAppArmorをどう設定すべきかを考えてみたいと思います。ApacheとPassengerを使ってRailsアプリケーションを運用している、という前提でお話しします。インストールされています。本稿の内容を実際に試してみたい方は、Rails本番環境構築ガイドを参考にして環境を整えてください。AppArmorの基礎知識AppArmorは、Linuxカーネルのセキュリティモジュールの一種です。同様のモジュールとしてはSELinuxがあり、おそらくはこちらの方が有名です。Modules(LSM)と呼ばれるインターフェースを通じて、Linuxカーネルに組み込まれます。基本的には、セキュリティモジュールは1個しかLinuxカーネルに組み込めませんので、Linuxのディストリビューションごとにデフォルトのセキュリティモジュールが異なります。CentOSはSELinuxを、UbuntuはAppArmorを採用しています。AppArmorは、SELinuxと同様に強制アクセス制御(MAC)と呼ばれる仕組みをLinuxカーネルにもたらします。所有者とグループの概念に基礎を置く伝統的なLinuxのアクセス制御(任意アクセス制御)との違いをまとめると次のようになります:誰が何に対してどんな処理を行えるのかを細かく制御できる。セキュリティポリシーは管理者によって一元的に管理される。管理者以外のユーザーは、自分が所有するファイルであってもセキュリティポリシーの範囲を超えてアクセス制限を緩和できない。Webサイトを運営する視点では、ApacheやMySQLなどのサービスに対してアクセス制限をかけられることが重要です。任意アクセス制御のもとでは、攻撃者がこれらのサービスの乗っ取りに成功すると、事実上何でもやりたい放題だったのですが、強制アクセス制御が適用されていれば、攻撃者はセキュリティポリシーの範囲内でしか動けない、ということになります。強制アクセス制御を利用すると「サービスを閉じこめる」ことができるのです。AppArmorでは、サービスごとにプロファイルと呼ばれる設定ファイルを作り、それをAppArmorにロードすることで対象となるサービスがAppArmorの管理下に入ります。mode)の2つのモードのいずれかを選択できます。サービスがセキュリティポリシーに違反するアクセスを行ったときの結果が異なります。前者では単純に拒否されます。後者ではアクセス自体は可能ですが、監査ログに記録が残ります。