Linux Security Modules
Linux Security Modules (LSM) はGNU/Linux(Linuxディストリビューション)において、任意の1つのセキュリティ実装のみをサポートすることを回避し、同時に様々なコンピュータセキュリティモデルをサポートするためLinuxカーネルに追加されたフレームワークである。GNU General Public Licenseの条項に従いライセンスされ、Linuxカーネルバージョン2.6の標準的な機能の一部となっている。AppArmor、Security-Enhanced Linux (SELinux)、Smack(英語版)そして TOMOYO Linuxは現在メインライン(メインストリーム)カーネル(リーナス・トーバルズにより管理されるカーネルソースコードツリーで公式のLinuxカーネル)に存在するLSMベースのセキュリティモジュールである。
カーネルソースコードディレクトリのトップにあるsecurity/というディレクトリの下にカーネル内処理に関するサブルーチン群が、include/linux/security.hヘッダファイルに主要な関数・構造体のプロトタイプ宣言や有益なマクロ、インライン関数がある。
名称より誤解を受けることが多いが、2011年現在におけるLSMはローダブル・カーネル・モジュール (LKM) ではなく、カーネル内に静的にリンクされる。またLSMの上に実装される各種セキュリティモジュールは以前はLKMとして実装可能であったが、現在では原則不可能である(後述)。
"Linux Security Module"と呼称する文書・Webページが散見されるが、正しくはLinux Security Modulesである。
従来からLinux環境で利用されてきたセキュリティモジュールPluggable authentication module(英語版) (PAM, Linux PAM(英語版)) はユーザー認証やパーミッション制御のみに特化しているが、LSMはそれよりもカバーする範囲は広い。
LSMのアクセス制御の目標はシステム監査 (System audit) の問題と非常に近い関連性があるが少し相違点もある。監査はアクセス試行を全てを記録するということを要求する。LSMはそのようなことは実現しない。なぜなら、カーネル内の「ちょっとした回り道」によるシステムコール失敗を検知し、関連する重要オブジェクトが取得される前にエラーコードを返すには、さらに非常に多くのフックが必要となるためである。
LSMの設計はUSENIX Security 2002において論文Linux Security Modules: General Security Support for the Linux Kernel(Linux Security Modules: Linuxカーネルにおける標準的なセキュリティサポート)と言う形で発表された。同じカンファレンスにおいて、Using CQUAL for Static Analysis of Authorization Hook Placement(フック配置の認容の静的な解析のためのCQUALの使用)という、必要なすべてのフックが実際にカーネルに挿入されたことを検証するカーネルソースコードの静的な自動解析に関する研究論文も発表されている。