19.2. SELinux のステータスおよびモードの変更
SELinux が有効になっている場合は、Enforcing モードまたは Permissive モードのいずれかで実行できます。以下のセクションでは、これらのモードに永続的に変更する方法を説明します。
19.2.1. SELinux のステータスおよびモードの永続的変更 リンクのコピーリンクがクリップボードにコピーされました!
SELinux のステータスおよびモード で説明されているように、SELinux は有効または無効にできます。有効にした場合の SELinux のモードには、Enforcing および Permissive の 2 つがあります。
getenforce コマンド、または sestatus コマンドを使用して、SELinux が実行しているモードを確認できます。getenforce コマンドは、Enforcing、Permissive、または Disabled を返します。
sestatus コマンドは SELinux のステータスと、使用されている SELinux ポリシーを返します。
Permissive モードで SELinux を実行すると、ユーザーやプロセスにより、さまざまなファイルシステムオブジェクトのラベルが間違って設定される可能性があります。SELinux が無効になっている間に作成されたファイルシステムのオブジェクトには、ラベルが追加されません。ただし、SELinux では、ファイルシステムオブジェクトのラベルが正しいことが必要になるため、これにより Enforcing モードに変更したときに問題が発生します。
SELinux では、誤ったラベル付けやラベル付けされていないファイルが問題を引き起こすことを防ぐため、Disabled 状態から Permissive モードまたは Enforcing モードに変更すると、ファイルシステムのラベルが自動的に再設定されます。root で fixfiles -F onboot コマンドを使用して、-F オプションを含む /.autorelabel ファイルを作成し、次回のシステムの再起動時にファイルに再ラベル付けされるようにします。
再ラベル付けのためにシステムを再起動する前に、enforcing=0 カーネルオプションを使用するなどして、システムが Permissive モードで起動することを確認します。これにより、selinux-autorelabel サービスを起動する前に、systemd が必要とするラベルのないファイルがシステムにある場合に、システムが起動に失敗することを防ぎます。詳細は、RHBZ#2021835 を参照してください。
19.2.2. SELinux の Permissive モードへの変更 リンクのコピーリンクがクリップボードにコピーされました!
SELinux を Permissive モードで実行していると、SELinux ポリシーは強制されません。システムは動作し続け、SELinux がオペレーションを拒否せず AVC メッセージをログに記録できるため、このログを使用して、トラブルシューティングやデバッグ、ならびに SELinux ポリシーの改善に使用できます。この場合、各 AVC は一度だけログに記録されます。
前提条件
-
selinux-policy-targetedパッケージ、libselinux-utilsパッケージ、およびpolicycoreutilsパッケージがインストールされている。 -
selinux=0またはenforcing=0カーネルパラメーターは使用されません。
手順
任意のテキストエディターで
/etc/selinux/configファイルを開きます。以下に例を示します。vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=permissiveオプションを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
システムの再起動後に、
getenforceコマンドがPermissiveを返すことを確認します。getenforce
$ getenforce PermissiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.3. SELinux の Enforcing モードへの変更 リンクのコピーリンクがクリップボードにコピーされました!
SELinux を Enforcing モードで実行している場合は、SELinux ポリシーが強制され、SELinux ポリシールールに基づいてアクセスが拒否されます。RHEL では、システムに SELinux を最初にインストールした時に、Enforcing モードがデフォルトで有効になります。
前提条件
-
selinux-policy-targetedパッケージ、libselinux-utilsパッケージ、およびpolicycoreutilsパッケージがインストールされている。 -
selinux=0またはenforcing=0カーネルパラメーターは使用されません。
手順
任意のテキストエディターで
/etc/selinux/configファイルを開きます。以下に例を示します。vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=enforcingオプションを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存して、システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次にシステムを起動する際に、SELinux はシステム内のファイルおよびディレクトリーのラベルを再設定し、SELinux が無効になっている間に作成したファイルおよびディレクトリーに SELinux コンテキストを追加します。
検証
システムの再起動後に、
getenforceコマンドがEnforcingを返すことを確認します。getenforce
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
トラブルシューティング
Enforcing モードに変更したあと、SELinux ポリシールールが間違っていたか、設定されていなかったため、SELinux が一部のアクションを拒否する場合があります。
SELinux に拒否されるアクションを表示するには、root で以下のコマンドを実行します。
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today
# ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts todayCopy to Clipboard Copied! Toggle word wrap Toggle overflow setroubleshoot-serverパッケージがインストールされている場合は、次のコマンドも使用できます。grep "SELinux is preventing" /var/log/messages
# grep "SELinux is preventing" /var/log/messagesCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux が有効で、Audit デーモン (
auditd) がシステムで実行していない場合は、dmesgコマンドの出力で SELinux メッセージを検索します。dmesg | grep -i -e type=1300 -e type=1400
# dmesg | grep -i -e type=1300 -e type=1400Copy to Clipboard Copied! Toggle word wrap Toggle overflow
詳細は Troubleshooting problems related to SELinux を参照してください。
19.2.4. 以前無効にしたシステムで SELinux を有効にする リンクのコピーリンクがクリップボードにコピーされました!
以前に SELinux を無効にしていたシステムで SELinux を有効にする場合は、システムの起動失敗やプロセスの失敗などの問題を回避するために、まずアクセスベクターキャッシュ (AVC) メッセージを permissive モードで解決します。
Permissive モードで SELinux を実行すると、ユーザーやプロセスにより、さまざまなファイルシステムオブジェクトのラベルが間違って設定される可能性があります。SELinux が無効になっている間に作成されたファイルシステムのオブジェクトには、ラベルが追加されません。ただし、SELinux では、ファイルシステムオブジェクトのラベルが正しいことが必要になるため、これにより Enforcing モードに変更したときに問題が発生します。
SELinux では、誤ったラベル付けやラベル付けされていないファイルが問題を引き起こすことを防ぐため、Disabled 状態から Permissive モードまたは Enforcing モードに変更すると、ファイルシステムのラベルが自動的に再設定されます。
再ラベル付けのためにシステムを再起動する前に、enforcing=0 カーネルオプションを使用するなどして、システムが Permissive モードで起動することを確認します。これにより、selinux-autorelabel サービスを起動する前に、systemd が必要とするラベルのないファイルがシステムにある場合に、システムが起動に失敗することを防ぎます。詳細は、RHBZ#2021835 を参照してください。
手順
- SELinux を Permissive モードで有効にします。詳細は Permissive モードへの変更 を参照してください。
システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux 拒否メッセージを確認します。詳細は、SELinux 拒否の特定 を参照してください。
次の再起動時に、ファイルが再ラベル付けされていることを確認します。
fixfiles -F onboot
# fixfiles -F onbootCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、
-Fオプションを含む/.autorelabelファイルが作成されます。警告fixfiles -F onbootコマンドを入力する前に、必ず Permissive モードに切り替えてください。デフォルトでは、
autorelabelはシステムで使用可能な CPU コアと同じ数のスレッドを並列に使用します。ラベルの自動再設定中に単一のスレッドのみを使用するには、fixfiles -T 1 onbootコマンドを使用します。- 拒否がない場合は、Enforcing モードに切り替えます。詳細は システムの起動時に SELinux モードの変更 を参照してください。
検証
システムの再起動後に、
getenforceコマンドがEnforcingを返すことを確認します。getenforce
$ getenforce EnforcingCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次のステップ
Enforcing モードで SELinux を使用してカスタムアプリケーションを実行するには、次のいずれかのシナリオを選択してください。
-
unconfined_service_tドメインでアプリケーションを実行します。 - アプリケーションに新しいポリシーを記述します。詳細は、カスタム SELinux ポリシーの作成 のセクションを参照してください。
19.2.5. SELinux の無効化 リンクのコピーリンクがクリップボードにコピーされました!
SELinux を無効にすると、システムが SELinux ポリシーをロードしなくなります。その結果、システムは SELinux ポリシーを適用せず、Access Vector Cache (AVC) メッセージをログに記録しません。したがって、SELinux を実行する利点 はすべて失われます。
パフォーマンスが重視されるシステムなど、セキュリティーを弱めても重大なリスクが生じない特殊な状況を除き、SELinux を無効にしないでください。
実稼働環境でデバッグを実行する必要がある場合は、SELinux を永続的に無効にするのではなく、一時的に permissive モードを使用してください。Permissive モードの詳細は Permissive モードへの変更 を参照してください。
前提条件
grubbyパッケージがインストールされている。rpm -q grubby
$ rpm -q grubby grubby-<version>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順
ブートローダーを設定して、カーネルコマンドラインに
selinux=0を追加します。sudo grubby --update-kernel ALL --args selinux=0
$ sudo grubby --update-kernel ALL --args selinux=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow システムを再起動します。
reboot
$ rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
再起動したら、
getenforceコマンドがDisabledを返すことを確認します。getenforce
$ getenforce DisabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
代替方法
RHEL 8 では、/etc/selinux/config ファイルの SELINUX=disabled オプションを使用して SELinux を無効にする 非推奨 の方法を引き続き使用できます。その結果、カーネルは SELinux が有効な状態で起動し、起動プロセスの後半で無効モードに切り替わります。その結果、メモリーリークや競合状態が発生し、カーネルパニックが発生する可能性があります。この方法を使用するには以下を実行します。
任意のテキストエディターで
/etc/selinux/configファイルを開きます。以下に例を示します。vi /etc/selinux/config
# vi /etc/selinux/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow SELINUX=disabledオプションを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を保存して、システムを再起動します。
reboot
# rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow
19.2.6. システムの起動時に SELinux モードの変更 リンクのコピーリンクがクリップボードにコピーされました!
ブート時に、次のカーネルパラメーターを設定して、SELinux の実行方法を変更できます。
enforcing=0このパラメーターを設定すると、システムを起動する際に、Permissive モードで起動します。これは、問題のトラブルシューティングを行うときに便利です。ファイルシステムの破損がひどい場合は、Permissive モードを使用することが、問題を検出するための唯一の選択肢となるかもしれません。また、Permissive モードでは、ラベルの作成が適切に行われます。このモードで作成した AVC メッセージは、Enforcing モードと同じになるとは限りません。
Permissive モードでは、一連の同じ拒否の最初の拒否のみが報告されます。一方、Enforcing モードでは、ディレクトリーの読み込みに関する拒否が発生し、アプリケーションが停止する場合がします。Permissive モードでは、表示される AVC メッセージは同じですが、アプリケーションは、ディレクトリー内のファイルを読み続け、拒否が発生するたびに AVC を取得します。
selinux=0このパラメーターにより、カーネルは、SELinux インフラストラクチャーのどの部分も読み込まないようになります。init スクリプトは、システムが
selinux=0パラメーターで起動したことを認識し、/.autorelabelファイルのタイムスタンプを変更します。これにより、次回 SELinux を有効にしてシステムを起動する際にシステムのラベルが自動的に再設定されます。重要実稼働環境では
selinux=0パラメーターを使用しないでください。システムをデバッグするには、SELinux を無効にする代わりに、一時的に permissive モードを使用してください。autorelabel=1このパラメーターにより、システムで、以下のコマンドと同様の再ラベルが強制的に行われます。
touch /.autorelabel reboot
# touch /.autorelabel # rebootCopy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルシステムに間違ったラベルが付いたオブジェクトが大量に含まれる場合は、システムを Permissive モードで起動して自動再ラベルプロセスを正常に実行します。