SELinux チートシート

cheatsheet

モードの確認と変更

現在のSELinuxのモードを確認したり、一時的・永続的にモードを変更します。

目的 コマンド 説明
現在のSELinuxの状態とモードを確認
sestatus
SELinuxの有効/無効状態、現在のモード(Enforcing/Permissive/Disabled)、ロードされているポリシー名などを表示します。
現在のSELinuxモードのみを確認
getenforce
現在のモード(Enforcing, Permissive, Disabled のいずれか)のみを出力します。
一時的にEnforcingモードに変更
sudo setenforce 1
システムを再起動するまで、SELinuxをEnforcingモードにします。Enforcingモードではポリシー違反は拒否され、ログに記録されます。
一時的にPermissiveモードに変更
sudo setenforce 0
システムを再起動するまで、SELinuxをPermissiveモードにします。Permissiveモードではポリシー違反は許可されますが、ログには記録されます。トラブルシューティング時に役立ちます。
永続的にモードを変更
sudo vi /etc/selinux/config
設定ファイル /etc/selinux/config を編集し、SELINUX= の行を enforcing, permissive, または disabled に変更します。変更を反映するにはシステム再起動が必要です。
注意: disabled から enforcing または permissive に変更する場合は、ファイルシステムの再ラベル付けが必要になることがあります。
システム起動時にモードを指定 (一時的) カーネルパラメータで指定 ブートローダーの設定でカーネルパラメータに enforcing=0 (Permissive) または enforcing=1 (Enforcing) を追加します。selinux=0 で無効化、selinux=1 で有効化も可能です。これは永続的な変更ではありません。

ファイルコンテキストの管理

ファイルやディレクトリに割り当てられたSELinuxコンテキスト(ラベル)を表示、変更、復元します。

目的 コマンド 説明
ファイル/ディレクトリのコンテキストを表示
ls -Z <パス>
指定したファイルやディレクトリのSELinuxコンテキストを表示します。ディレクトリ内のファイルを表示する場合も同様です。
プロセスのコンテキストを表示
ps auxZ | grep <プロセス名>
実行中のプロセスのSELinuxコンテキストを表示します。-Z オプションを使います。
ファイル/ディレクトリのコンテキストを一時的に変更
sudo chcon <コンテキスト> <パス>
指定したファイルやディレクトリのSELinuxコンテキストを一時的に変更します。再起動や restorecon で元に戻る可能性があります。
例: sudo chcon -t httpd_sys_content_t /var/www/html/index.html
ファイル/ディレクトリのコンテキストを一時的に変更 (再帰的)
sudo chcon -R <コンテキストの一部> <ディレクトリパス>
指定したディレクトリ以下のファイルやディレクトリのコンテキストを再帰的に変更します。
例: sudo chcon -R -t httpd_sys_content_t /var/www/custom_html/
デフォルトのファイルコンテキスト定義を追加/変更 (永続的)
sudo semanage fcontext -a -t <タイプ> '<パス(正規表現可)>(/.*)?'
特定のパスに対するデフォルトのファイルコンテキストルールを追加します。変更は /etc/selinux/targeted/contexts/files/file_contexts.local に保存されます。
例: sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'
デフォルトのファイルコンテキスト定義を削除 (永続的)
sudo semanage fcontext -d '<パス(正規表現可)>(/.*)?'
指定したパスのファイルコンテキスト定義を削除します。
デフォルトのファイルコンテキスト定義を表示
sudo semanage fcontext -l
現在定義されているファイルコンテキストのルール一覧を表示します。ローカルな変更も含まれます。
ファイル/ディレクトリのコンテキストをデフォルト定義に従って復元
sudo restorecon -v <パス>
指定したパスのファイルコンテキストを、semanage fcontext で定義されたデフォルトルールに基づいて正しいコンテキストに復元します。-v で変更されたファイルを表示します。
ファイル/ディレクトリのコンテキストをデフォルト定義に従って再帰的に復元
sudo restorecon -Rv <ディレクトリパス>
指定したディレクトリ以下のファイルやディレクトリのコンテキストを再帰的に復元します。-R で再帰的に、-v で変更されたファイルを表示します。
ファイルシステムの再ラベル付けをスケジュール
sudo fixfiles onboot
または
sudo touch /.autorelabel
次回のシステム起動時に、ファイルシステム全体のSELinuxコンテキストをデフォルトポリシーに従って再ラベル付けします。SELinuxが無効から有効に変更された場合などに使用します。時間がかかることがあります。fixfiles -F onboot は強制的な再ラベル付けを行います。Permissiveモードで実行することが推奨されます。
特定のパスのデフォルトコンテキストを確認
matchpathcon <パス>
指定されたファイルやディレクトリパスに対して、SELinuxポリシーが定義しているデフォルトのセキュリティコンテキストを表示します。

Boolean値の管理

SELinuxポリシーの動作を制御する真偽値(Boolean)を表示・変更します。

目的 コマンド 説明
全てのBoolean値とその状態を表示
getsebool -a
システム上の全てのSELinux Booleanとその現在の設定値(on/off)を一覧表示します。
特定のBoolean値の状態を表示
getsebool <Boolean名>
指定したBooleanの現在の状態を表示します。
Boolean値の詳細(説明、デフォルト値など)を表示
sudo semanage boolean -l
全てのBooleanについて、現在の状態、デフォルトの状態、簡単な説明を一覧表示します。
特定のBoolean値の詳細を表示
sudo semanage boolean -l | grep <Boolean名>
指定したBooleanの詳細情報(現在の状態、デフォルト値、説明)を表示します。
Boolean値を一時的に変更
sudo setsebool <Boolean名> <on|off|1|0>
指定したBooleanの値を一時的に変更します。再起動すると元の値に戻ります。
例: sudo setsebool httpd_can_network_connect on
Boolean値を永続的に変更
sudo setsebool -P <Boolean名> <on|off|1|0>
指定したBooleanの値を永続的に変更します。-P オプションを付けることで、変更がポリシーファイルに書き込まれ、再起動後も維持されます。ポリシーの再構築が行われるため、少し時間がかかることがあります。
例: sudo setsebool -P httpd_can_network_connect on
Boolean値を永続的に変更 (semanageを使用)
sudo semanage boolean -m --<on|off> <Boolean名>
semanage コマンドを使用してBoolean値を永続的に変更します。
例: sudo semanage boolean -m --on httpd_can_network_connect

ポートコンテキストの管理

ネットワークポートに割り当てられたSELinuxタイプを管理します。

目的 コマンド 説明
定義されているポートコンテキストを表示
sudo semanage port -l
現在定義されているネットワークポートとそのタイプ、プロトコル(tcp/udp)の一覧を表示します。
特定のポートタイプに関連付けられたポートを表示
sudo semanage port -l | grep <タイプ名>
指定したSELinuxタイプ(例: http_port_t)に関連付けられているポートを表示します。
ポートコンテキストを追加 (永続的)
sudo semanage port -a -t <タイプ> -p <tcp|udp> <ポート番号または範囲>
新しいポート番号またはポート範囲にSELinuxタイプを割り当てます。変更は永続的です。
例: sudo semanage port -a -t http_port_t -p tcp 8080
範囲指定例: sudo semanage port -a -t myapp_port_t -p tcp 9000-9010
ポートコンテキストを変更 (永続的)
sudo semanage port -m -t <タイプ> -p <tcp|udp> <ポート番号>
既存のポート番号に割り当てられているSELinuxタイプを変更します。変更は永続的です。
例: sudo semanage port -m -t jboss_management_port_t -p tcp 9999
ポートコンテキストを削除 (永続的)
sudo semanage port -d -p <tcp|udp> <ポート番号>
指定したポート番号のSELinuxタイプ割り当てを削除します。変更は永続的です。
例: sudo semanage port -d -p tcp 8080

監査ログとトラブルシューティング 🔎

SELinuxによるアクセス拒否(Denial)のログを確認し、原因を特定・解決します。

目的 コマンド/ファイル 説明
監査ログの場所 /var/log/audit/audit.log SELinuxの拒否(AVC Denial)メッセージを含む、システムの監査ログがデフォルトで記録されるファイルです。auditd サービスが実行中である必要があります。
代替ログの場所 (auditd無効時) /var/log/messages auditd が動作していない場合、SELinuxの拒否メッセージがシステムログ (rsyslog) に記録されることがあります。
最近のSELinux拒否ログを検索
sudo ausearch -m avc,user_avc,selinux_err,user_selinux_err -ts recent
auditd のログから、最近発生したSELinux関連のエラー(AVC Denialなど)を検索します。-ts でタイムスタンプ(例: today, yesterday, 10:00)を指定できます。
特定の実行ファイルに関する拒否ログを検索
sudo ausearch -c <実行ファイル名> -m avc -i
指定したコマンド名(例: httpd, nginx)に関連するAVC拒否ログを検索します。-i で解釈可能な形式で表示します。
拒否ログの解析と解決策の提示 (setroubleshoot)
sudo sealert -l <UUID>
setroubleshoot-server パッケージが必要。/var/log/messages などに出力されるUUIDを指定して、拒否の詳細な分析と解決策の候補を表示します。
拒否ログの解析と解決策の提示 (setroubleshoot GUI)
sealert -b
setroubleshoot パッケージが必要。GUIで拒否ログとその解析結果を表示します。(デスクトップ環境が必要)
拒否ログの解析と解決策の提示 (setroubleshoot 全ログ)
sudo sealert -a /var/log/audit/audit.log
監査ログ全体を解析し、検出された拒否とその解決策候補を表示します。
拒否ログから許可ルールを含むポリシーモジュールを作成
sudo ausearch -m avc -ts recent | audit2allow -M <モジュール名>
policycoreutils-python-utils パッケージが必要。最近の拒否ログを元に、それを許可するためのカスタムポリシーモジュール(.te および .pp ファイル)を生成します。
注意: 安易に適用せず、拒否の原因(ラベル間違いなど)を先に確認することが重要です。
拒否ログの内容を表示 (audit2allow)
sudo ausearch -m avc -ts recent | audit2allow -a
拒否ログの内容を読み取り、対応する allow ルールを表示します。モジュールは作成しません。
生成されたカスタムポリシーモジュールをインストール
sudo semodule -i <モジュール名>.pp
audit2allow などで生成したポリシーパッケージファイル(.pp)をシステムにインストールして有効化します。
特定のドメインを一時的にPermissiveモードにする
sudo semanage permissive -a <ドメイン名_t>
システム全体はEnforcingモードのまま、特定のプロセスドメイン(例: httpd_t)だけをPermissiveモードにします。トラブルシューティングに有用です。
特定のドメインをEnforcingモードに戻す
sudo semanage permissive -d <ドメイン名_t>
Permissiveモードに設定したドメインをEnforcingモードに戻します。
Permissiveモードに設定されているドメインを表示
sudo semanage permissive -l
現在Permissiveモードで動作するように設定されているドメインの一覧を表示します。
dontaudit ルールを無効化して隠れた拒否を表示
sudo semodule -DB
通常はログに出力されない dontaudit ルールによる拒否もログに出力されるようにします。デバッグ時に有効です。
dontaudit ルールを再度有効化
sudo semodule -B
無効化した dontaudit ルールを元に戻し、通常のログ出力状態にします。ポリシーの再構築が行われます。

カスタムポリシーモジュールの管理 🧩

独自のSELinuxポリシーモジュールを作成、インストール、削除、管理します。

目的 コマンド 説明
インストール済みのポリシーモジュールを表示
sudo semodule -l
現在システムにインストールされているSELinuxポリシーモジュールの一覧を表示します。カスタムモジュールも含まれます。
ポリシーモジュールをインストール
sudo semodule -i <モジュールファイル.pp>
コンパイル済みのポリシーパッケージファイル(.pp)をインストールします。
ポリシーモジュールを削除
sudo semodule -r <モジュール名>
指定した名前のポリシーモジュールをシステムから削除します。
ポリシーモジュールを無効化
sudo semodule -d <モジュール名>
指定したモジュールを一時的に無効化します。ルールは適用されなくなりますが、モジュール自体は残ります。
無効化したポリシーモジュールを有効化
sudo semodule -e <モジュール名>
semodule -d で無効化したモジュールを再度有効化します。
ポリシーソースファイル(.te)からモジュール(.mod)を作成
checkmodule -M -m -o <出力.mod> <入力.te>
ポリシーのType Enforcementファイル(.te)をコンパイルし、中間モジュールファイル(.mod)を生成します。selinux-policy-devel パッケージが必要です。
モジュール(.mod)とファイルコンテキスト(.fc)からパッケージ(.pp)を作成
semodule_package -o <出力.pp> -m <入力.mod> [-f <入力.fc>]
中間モジュールファイル(.mod)と、オプションでファイルコンテキストファイル(.fc)を組み合わせて、インストール可能なポリシーパッケージファイル(.pp)を作成します。
ポリシーソースからパッケージ(.pp)を作成 (Makefile利用)
make -f /usr/share/selinux/devel/Makefile <モジュール名>.pp
selinux-policy-devel が提供するMakefileを利用して、カレントディレクトリにある <モジュール名>.te<モジュール名>.fc などのソースファイルからポリシーパッケージ(.pp)をビルドします。
ポリシー生成ツール (テンプレート作成)
sepolicy generate --init <実行ファイルパス>
policycoreutils-devel パッケージが必要。指定したアプリケーション用の基本的なポリシーモジュール(.te, .fc, .if)、Makefile、セットアップスクリプトのテンプレートを生成します。カスタムポリシー作成の出発点として便利です。

ユーザーとロールの管理

SELinuxユーザーとLinuxユーザーのマッピングや、SELinuxユーザーのロールを管理します。

目的 コマンド 説明
LinuxユーザーとSELinuxユーザーのマッピングを表示
sudo semanage login -l
Linuxのログイン名と、それに対応するSELinuxユーザー、MLS/MCSレンジのマッピングを表示します。
LinuxユーザーにSELinuxユーザーをマッピング
sudo semanage login -a -s <SELinuxユーザー> <Linuxユーザー名>
指定したLinuxユーザーに特定のSELinuxユーザーを割り当てます。
例: sudo semanage login -a -s user_u staff_admin
Linuxユーザーのマッピングを変更
sudo semanage login -m -s <SELinuxユーザー> <Linuxユーザー名>
既存のLinuxユーザーのマッピングを変更します。
例: sudo semanage login -m -s staff_u staff_admin
Linuxユーザーのマッピングを削除
sudo semanage login -d <Linuxユーザー名>
指定したLinuxユーザーのSELinuxユーザーマッピングを削除します。デフォルト(通常は __default__ の設定)が適用されます。
SELinuxユーザーの一覧を表示
sudo semanage user -l
定義されているSELinuxユーザーと、それぞれに割り当て可能なロール、MLS/MCSレンジを表示します。
現在のセッションのSELinuxコンテキストを表示
id -Z
現在ログインしているユーザーのSELinuxコンテキスト(SELinuxユーザー、ロール、タイプ、レベル)を表示します。

コメント

タイトルとURLをコピーしました