2done.org

Linuxメインなメモ書き。二度寝してから書く。(ご意見は Twitter あたりで。そのうちコメント欄つけます。)

SELinuxの状態を変更する

(2012/07/11@F17)

あなたの SELinux 有効ですか?

SELinux を有効/無効にする前にまず状態を確認しましょう。状態確認の方法は主に2つです。

getenforce コマンド

現在の SELinux 状態を表示します。出力が Enforcing なら SELinux は有効です。このままが良いでしょう。とてもクールです。

$ getenforce
(出力例)
Enforcing   … 有効(制御有+ログ出力有)
Permissive  … 有効(制御無+ログ出力有)
Denied     … 無効(制御無+ログ出力無)

sestatus コマンド

現在の状態と併せて設定ファイルの状態も出力します。

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted … 設定ファイル(/etc/selinux/config @ SELINUXTYPE)の設定
Current mode:                   enforcing    … 現在の SELinux 状態
Mode from config file:          enforcing … 設定ファイル(/etc/selinux/config @ SELINUX)の設定
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      26

/etc/selinux/config の設定が間違っている時は次のようになります。(SELINUX=disable)としてしまった時。

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          error (Success) ← ココがエラーになる
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      26

SELinux を Enforcing にする

現在の状態をコマンドで変更する

現在の状態を Permissive から Enforcing に変更する時は、「setenforce 1」を実行します。Disabled の状態から Enforcing に変更できません。

# getenforce
Permissive
# setenforce 1
# getenforce
Enforcing

OS起動時の状態を変更する

OS 起動時の SELinux 状態を変更するには設定ファイルを修正します。設定後は sestatus コマンドにエラーがないことを確認します。

# vim /etc/selinux/config
SELINUX=enforcing  ← ココを変更
SELINUXTYPE=targeted

この時、現在の SELinux 状態が Enforcing や Permissive であれば設定は完了です。Disabled の状態から Enforcing や Permissive に変更する場合は、再ラベル付けという処理が必要になります。再ラベル付けでは、定義に従いファイルコンテキストを再付与します。

※ Disabled の状態の時に作成されたファイルにはファイルコンテキストが含まれません。

再ラベル付け

システム全体に対して再ラベル付けを行うにはルートディレクトリ直下に .autorelabel ファイルを作成し、OS を再起動します。特定のディレクトリに対してファイルコンテキストの再設定をする場合は restorecon -Rv ./dir などを実行します。

# fixfile onboot (または touch /.autorelabel)
System will relabel on next boot
# shutdown -r 0

SELinux を Permissiveにする

現在の状態をコマンドで変更する

現在の状態を Enforcing から Permissive に変更する時は、「setenforce 0」を実行します。Disabled の状態から Permissive に変更できません。

# getenforce
Enforcing
# setenforce 0
# getenforce
Permissive

OS起動時の状態を変更する

OS 起動時の SELinux 状態を変更するには設定ファイルを修正します。設定後は sestatus コマンドにエラーがないことを確認します。

# vim /etc/selinux/config
SELINUX=permissive  ← ココを変更
SELINUXTYPE=targeted

この時、現在の SELinux 状態が Enforcing や Permissive であれば設定は完了です。Disabled の状態から Enforcing や Permissive に変更する場合は、システム全体に対して再ラベル付けが必要となります。

SELinux を無効(Disabled)にする

現在の状態をコマンドで変更する

コマンドを使って SELinux を無効にできません。

OS起動時の状態を変更する

OS 起動時の SELinux 状態を変更するには設定ファイルを修正します。設定後は sestatus コマンドにエラーがないことを確認し OS を再起動します。

# vim /etc/selinux/config
SELINUX=disabled ← ココを変更
SELINUXTYPE=targeted
# shutdown -r 0

または

# sed -i "s/\(^SELINUX=\).*/\1disabled/" /etc/selinux/config

OSインストール時に無効にする方法はこちら → Fedora 14 イントール時に SELinux を無効にする(F14)

注意

SELINUXTYPE に SELINUX に設定すべき値を設定した場合は、OS 起動時カーネルパニックになります。これは存在しないポリシーセットを参照しようとしてしまうために起こる問題です。設定ファイルには設定出来る値が全て書かれていますのできちんと読んで設定しましょう。

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

参考1: [指摘] 「SELinux無効化でカーネルパニック - CentOS6の備忘録」に対する指摘 - やったるでぇ

/etc/sysconfig/selinux について

/etc/sysconfig/selinux は /etc/selinux/config のシンボリックリンクです。RH系には存在しますがそれ以外のOSには存在しません。

これを編集している人はいつか sed して困ると思います。オプション --follow-symlinks を忘れずにつけましょう。