securelevel は、 BSDカーネルにおけるセキュリティメカニズムであり、特定の機能を任意に制限できます。securelevel は、sysctl変数kern.securelevelによって制御されます。この値は整数であり、0 より大きい値に設定すると、特定の種類の制限が有効になります。どのスーパーユーザープロセスでも securelevel を上げることができますが、下げることができるのはinitプロセスのみです。
FreeBSD jailsと併用する場合、各jailはグローバルなsecurelevelに加えて独自のsecurelevelを保持します。評価時には、2つのsecurelevelのうち高い方が使用されます。これにより、ホスト環境はjailsよりも低いsecurelevelで動作できるため、jailsでは操作できないファイルフラグを操作できるようになります。
REGRESSIONオプションでコンパイルすると、FreeBSD カーネルに新しい sysctl が追加され、自動回帰テストの目的で securelevel を下げることができるようになります。
定義
OpenBSDでは、セキュアレベルは次のように定義されています。[ 1 ]
- -1 (永続的に安全でないモード)は、カーネルがレベル0の場合のようにレベルを上げようとしない点を除けば、セキュアレベル0と機能的に同一です。これにより、セキュアレベルの保護機能が事実上無効になります。
- 0 (非セキュアモード)では、適切な権限があればすべてのデバイスへの読み取りまたは書き込みが可能になり、chflagsコマンドを使用してシステムファイルフラグをクリアできます。このモードは通常、システムの起動中に使用され、起動が完了してシステムがマルチユーザーモードに入ると、レベル1に昇格されます。
- 1 (セキュアモード)は、システムがマルチユーザーモードで起動されたときのデフォルトモードです。このモードでは、セキュアレベルを下げることはできず、生メモリデバイスへの書き込みはできず、マウントされたファイルシステムの生デバイスへの書き込みもできません。重要なカーネル変数 (fs.posix.setuid、hw.allowpowerdown、net.inet.ip.sourceroute、machdep.kbdreset、ddb.console、ddb.panic、machdep.allowaperture など) はロックダウンされ、起動時に存在していたGPIOピンのみにアクセスできます。
- 2 (高セキュリティモード)は、セキュアレベル1と同じ効果を持ちますが、さらに、アンマウントされたディスクデバイスにも書き込みができないこと、特定の時間関連機能がロックダウンされ、過去に時刻を設定できないこと(ログに記録されるアクションの時刻が正確であることを保証するため)、およびpfルールを変更できないことが追加されています。このモードは、 rootユーザーアカウントが侵害された場合に、ある程度の防御を提供するように設計されています。
参考文献
- ↑ "SECURELEVEL(7)"。OpenBSD マニュアルページ。
外部リンク
- FreeBSDハンドブックのSecurelevel