はじめに
Linux のセキュリティモデルには、「任意アクセス制御(DAC: Discretionary Access Control)」と「強制アクセス制御(MAC: Mandatory Access Control)」があります。本章では、特に強制アクセス制御に焦点を当て、以下を学びます:
- SELinux(Security-Enhanced Linux)の基本構造と設定方法
- AppArmor や Smack の概要
- DACとの違い
- SELinuxのトラブルシュートと運用管理
1. アクセス制御の概念
DAC(Discretionary Access Control)
Linux標準のアクセス制御で、所有者(ユーザー)がファイルやプロセスのアクセス権を制御します。chmod や chown による制御が該当します。
MAC(Mandatory Access Control)
管理者が定義したポリシーに従い、アクセスが強制的に制御されます。個々のユーザーがポリシーを変更できない点がDACと異なります。
2. SELinux の仕組みと構造
SELinux は MAC を実現する最も一般的な仕組みです。Red Hat 系ディストリビューションでは標準搭載されています。
2.1 SELinux のモード
getenforce
Enforcing: ポリシーを強制Permissive: ポリシー違反をログに記録のみDisabled: 無効化
一時的な切り替え:
setenforce 0 # Permissiveに変更
setenforce 1 # Enforcingに戻す
永続的な設定は /etc/selinux/config を編集:
SELINUX=enforcing
2.2 SELinux の基本概念
| 概念 | 説明 |
|---|---|
| Type Enforcement (TE) | 最も基本的なポリシー形式。プロセスとファイルに type を付け、許可関係を定義。 |
| RBAC (Role-Based Access Control) | ユーザーに role を割り当ててアクセス制限。 |
| MLS (Multi-Level Security) | 軍事用の階層化セキュリティモデル。一般用途ではあまり使われない。 |
2.3 ラベルの構造
SELinuxではすべてのファイル・プロセスに セキュリティコンテキスト というラベルが付与されます。
例:
ls -Z /var/www/html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
この中の httpd_sys_content_t が type(タイプ)です。
2.4 ラベル操作とポリシー管理
ポリシーとBooleans
getsebool -a
setsebool -P httpd_can_network_connect on
コンテキスト修正
restorecon -Rv /var/www/html
chcon -t httpd_sys_content_t index.html
永続的な変更には semanage を使用:
semanage fcontext -a -t httpd_sys_content_t '/myweb(/.*)?'
restorecon -Rv /myweb
2.5 トラブルシュート用コマンド
| コマンド | 役割 |
|---|---|
audit2why | ログを分析して拒否理由を表示 |
audit2allow | 必要な許可ポリシーを自動生成 |
sealert | GUIベースの通知ツール(setroubleshoot-server) |
ログ解析例:
ausearch -m avc -ts recent
3. AppArmor の概要
Ubuntu や SUSE で使われている強制アクセス制御。SELinux と異なり、パスベースでアクセス制御を行います。
主な特徴:
- SELinuxより設定が簡単
- プロファイルが
/etc/apparmor.d/に配置される aa-complain,aa-enforceでモード切替
4. Smack の概要
Smack(Simplified Mandatory Access Control Kernel)は IoT 向けに軽量設計されたMAC。
- ファイルに Smack ラベルを付与
- 一部の組み込みLinuxで使用
- 運用例は少ない
5. コマンド一覧
| コマンド | 説明 |
|---|---|
getenforce / setenforce | SELinuxモードの確認・変更 |
sestatus | SELinuxの全体状態を確認 |
restorecon / setfiles | ラベルを元に戻す / 一括設定 |
semanage | ラベル、ポリシーの設定 |
getsebool / setsebool | SELinux boolean の確認・設定 |
audit2allow, audit2why | ログ解析とポリシー補完 |
runcon, newrole | コンテキスト変更してコマンド実行 |
/etc/selinux/config | SELinux永続設定ファイル |
章末問題(四択)
Q1. SELinux において、ファイルやプロセスに割り当てられるアクセス制御情報はどれか?
A. RBAC
B. ストリームラベル
C. セキュリティコンテキスト
D. ユーザー権限リスト
解説
正解:C
セキュリティコンテキストは「ユーザー:ロール:タイプ:レベル」の構成で、MAC制御に用いられます。
Q2. SELinux において、ポリシーを一時的に無効にするモードはどれか?
A. Enforcing
B. Disabled
C. Permissive
D. Passive
解説
正解:C
Permissive モードはログのみ記録し、強制制御をしないため、検証時に使います。
Q3. SELinux の Booleans を永続的に変更するコマンドはどれか?
A. semanage
B. setsebool -P
C. restorecon
D. audit2allow
解説
正解:B-P オプションを付けることで、setsebool の設定が永続化されます。
Q4. SELinux のログ解析に使用されるツールはどれか?
A. aa-status
B. getenforce
C. audit2why
D. top
解説
正解:C
audit2why はログに基づき、SELinux がアクセスを拒否した理由を説明してくれるツールです。
まとめ
- SELinux は MAC の主要実装であり、Red Hat 系ディストリで標準採用
- モードや Booleans の管理、コンテキストのラベル管理が重要
- トラブルシュートには
audit2allowやaudit2whyを使う - AppArmor や Smack の知識も問われるが、主に SELinux が出題範囲
コメント