〜Linuxにおける「誰が・何に・どこまで触れるか」を制御する仕組み〜
333.1 任意アクセス制御(DAC)
DAC(Discretionary Access Control)とは
DAC は、
リソースの所有者がアクセス権を決められる仕組み
Linux の基本的なファイルパーミッションは、すべて DAC に該当します。
ファイル所有権とパーミッション
Linux のファイルには以下が設定されています。
- 所有者(user)
- グループ(group)
- その他(others)
- 権限(r / w / x)
chmod 755 file
chown user:group file
「誰が決められるか」=所有者
SetUID / SetGID ビット
通常、プログラムは 実行したユーザの権限で動きますが、
SetUID / SetGID を付与すると挙動が変わります。
- SetUID:所有者権限で実行
- SetGID:グループ権限で実行
chmod u+s program
chmod g+s program
ACL(Access Control List)
従来の rwx だけでは表現できない場合に利用します。
- ユーザ単位の権限付与
- グループ単位の権限付与
- デフォルト ACL
setfacl -m u:user:rwx file
getfacl file
「この人だけ特別に権限を与えたい」 場合に有効
複雑になりやすいため管理が重要
拡張属性(Extended Attributes)
ファイルに 追加のメタデータ を付与する仕組みです。
user.*security.*system.*
setfattr -n user.comment -v "sample" file
getfattr file
用途例:
- SELinux のコンテキスト
- セキュリティツールの管理情報
333.2 強制アクセス制御(MAC)
MAC(Mandatory Access Control)とは
MAC は、
システムが強制的にアクセスを制御する仕組み
DAC と異なり、
- 所有者であっても制限される
- 管理者が定義したポリシーが最優先
DAC / MAC / RBAC / TE の関係
- DAC:所有者が制御
- MAC:システムが強制
- RBAC:役割ベース
- TE(Type Enforcement):SELinux の基本モデル
SELinux は、
MAC + RBAC + TE を組み合わせた非常に強力な仕組みです。
SELinux の基本
SELinux は、
- プロセス
- ファイル
- ポート
などに セキュリティコンテキスト(ラベル) を付与し、
ポリシーに基づいてアクセスを制御します。
状態確認:
getenforce
sestatus
モード:
- Enforcing(強制)
- Permissive(警告のみ)
- Disabled(無効)
SELinux の管理操作
一時的な切り替え
setenforce 0 # Permissive
setenforce 1 # Enforcing
ブール値(boolean)の制御
getsebool -a
setsebool -P httpd_can_network_connect on
機能単位で挙動を調整可能
コンテキスト管理
- 自動修復:
restorecon - 一時変更:
chcon - 永続設定:
semanage
restorecon -Rv /var/www
SELinux トラブルシューティング
- 原因分析:
audit2why - ポリシー生成:
audit2allow
SELinux 関連ツール
-
seinfo:ポリシー情報 -
apol:ポリシー分析 -
seaudit:監査ログ解析 -
newrole/runcon:ロール・コンテキスト変更
AppArmor と Smack
SELinux 以外の MAC 実装も存在します。
-
AppArmor
- パスベース制御
- Ubuntu 系で多い
-
Smack
- ラベルベース
- 組み込み・特殊用途向け