Oracle LinuxでのSELinuxの管理

SELinuxについて説明し、Oracle LinuxでのSELinuxの管理に関するガイダンスを提供します。

従来の Linuxセキュリティは任意アクセス制御(DAC)ポリシーに基づきます。システム・セキュリティのDACモデルでは、ファイルやプロセスなどのリソースへのアクセスは、ユーザー・アイデンティティと所有権のみに基づきます。システムにマルウェアまたは破損したソフトウェアが存在する場合、プロセスを開始したユーザーが実行する権限を持つファイルおよびリソースに対しては何でも実行できます。ユーザーがrootの場合、またはアプリケーションがrootsetuidまたはsetgidの昇格された権限で実行されている場合、プロセスはファイル・システム全体に対するrootアクセス制御を持つできます。

この問題に対処するために、国家安全保障機関は、Linux OSのファイル、プロセス、ユーザー、アプリケーションに関するより詳細な制御を可能にするために、Security Enhanced Linux (SELinux)を策決しました。LinuxカーネルのSELinux拡張により、強制アクセス制御(MAC)ポリシーが適用されます。これにより、すべてのユーザー、プログラム、プロセス、ファイル、デバイスに対してきめ細かな権限を構成するセキュリティ・ポリシーを定義できるようになります。カーネルのアクセス制御の決定は、認証されたユーザーIDだけではなく、セキュリティーの観点からリソースがどの程度機密であるかに基づきます。

プロセスがファイルを開くなど、セキュリティ関連アクセスが発生すると、SELinuxはカーネルの操作をインターセプトします。MACポリシー・ルールで操作が許可されている場合、操作は続行されます。それ以外の場合、SELinuxは操作をブロックし、プロセスにエラーを返します。カーネルは、MACルールの前にDACポリシー・ルールを確認して実施するため、DACルールでリソースへのアクセスが拒否された場合、SELinuxポリシー・ルールは確認されません。

SELinuxパッケージの説明

SELinuxにはいくつかのパッケージがあり、各パッケージには、Oracle LinuxシステムでSELinuxを管理するために使用できる特定のユーティリティが含まれています。一部のパッケージはデフォルトでインストールされますが、その他のパッケージはオプションです。

次の表に、デフォルトでOracle LinuxにインストールされているSELinuxパッケージをリストします。

パッケージ

説明

policycoreutils

load_policyrestoreconseconsetfilessemodulesestatusおよびsetseboolなど、SELinuxを操作および管理するためのユーティリティを提供します。

libselinux

SELinuxアプリケーションがプロセスやファイル・セキュリティのコンテキストを取得および設定したり、セキュリティ・ポリシー決定を取得するために使用するAPIを提供します。

python3-libselinux

SELinuxアプリケーションを開発するためのPythonバインディングが含まれます。

selinux-policy

SELinux targetedポリシーなどのポリシーの基礎として使用される、SELinux Referenceポリシーを提供します。

selinux-policy-targeted

SELinuxターゲット・ポリシーを提供します。このポリシーでは、ターゲット・ドメイン外のオブジェクトがDACの下で実行されます。

libselinux-utils

avcstatgetenforcegetseboolmatchpathconselinuxconlistselinuxdefconselinuxenabled、および setenforceユーティリティを提供します。

次の表に、デフォルトではインストールされていない有用なSELinuxパッケージをリストします。dnfコマンドを使用して、必要なパッケージをインストールします。

パッケージ

説明

mcstrans

s0-s0:c0.c1023などのSELinuxレベルをSystemLow-SystemHighなどの判読しやすい形式に変換します。

policycoreutils-python-utils

audit2allowaudit2whychcatおよびsemanageなど、SELinuxを操作するためのPythonユーティリティを提供します。

policycoreutils-sandbox

厳密に限定されたSELinuxドメインでコマンドを実行するためのSELinuxサンドボックスを作成するためのサンドボックス・ユーティリティを提供します。

selinux-policy-mls

SELinux targetedポリシーのかわりに厳格なMulti-Level Security (MLS)ポリシーをサポートします。

selinux-policy-doc 多数のSELinuxポリシー要素についてのマニュアル・ページを提供します。

setroubleshoot

sealertコマンドを使用してsetroubleshoot-serverメッセージを表示できます。

setroubleshoot-server

sealertコマンドを使用して、SELinuxからのアクセス拒否メッセージをコマンド・ラインで表示できる詳細な説明に変換します。

setools-console

Tresys TechnologyのSEToolsツールおよびライブラリ・ディストリビューションを提供します。これを使用して、ポリシーの分析および問合せ、監査ログの監視およびレポート、ファイル・コンテキストの管理を行うことができます。

詳細は、SELinuxプロジェクトのWikiselinux(8)およびその他のSELinuxコマンドのマニュアル・ページを参照してください。

SELinuxユーティリティ

次の表に、SELinuxの管理に使用できる主要なユーティリティと、それらを含むパッケージを示します。

ユーティリティ

パッケージ

説明

audit2allow

policycoreutils-python-utils

拒否された操作の監査ログからSELinuxポリシーのallowルール(およびオプションのdontauditエントリ)を生成します。

audit2why

policycoreutils-python-utils

拒否ログを分析してアクセスがブロックされた理由を説明し、関連するSELinux調整を推奨します。

avcstat

libselinux-utils

SELinuxアクセス・ベクター・キャッシュ(AVC)の統計を表示します。

chcat

policycoreutils-python-utils

ファイルまたはユーザーのセキュリティ・カテゴリを変更または削除します。

chcon

coreutils

ファイルおよびディレクトリのSELinuxコンテキストを変更します。

fixfiles

policycoreutils

ファイル・システムのセキュリティ・コンテキストを修正します。

getenforce

libselinux-utils

現在のSELinuxモードをレポートします。

getsebool

libselinux-utils

SELinuxのブール値をレポートします。

load_policy

policycoreutils

新しいSELinuxポリシーをカーネルにロードします。

matchpathcon

libselinux-utils

システム・ポリシーを問い合せ、ファイル・パスに関連付けられているデフォルトのセキュリティ・コンテキストを表示します。

restorecon

policycoreutils

1つ以上のファイルでセキュリティ・コンテキストをリセットします。

restorecond

policycoreutils

ファイル作成を監視し、デフォルトのファイル・コンテキストを設定するデーモン。

runcon

coreutils

指定されたコンテキスト内でコマンドを実行します。

sandbox

policycoreutils-sandbox

SELinuxサンドボックス内でコマンドを実行します。

sealert

setroubleshoot-serversetroubleshoot

SELinux AVC拒否の診断および説明、およびこのような拒否を防ぐ方法に関する推奨事項の提供のために、setroubleshootシステムへのユーザー・インタフェースとして機能します。

sechecker

setools-console

SELinuxのポリシーを確認します。

secon

policycoreutils

ファイル、プログラムまたはユーザー入力のSELinuxコンテキストを表示します。

sediff

setools-console

SELinuxのポリシーを比較します。

seinfo

setools-console

SELinuxのポリシーを問い合せます。

selinuxconlist

libselinux-utils

ユーザーがアクセスできるすべてのSELinuxコンテキストを表示します。

selinuxdefcon

libselinux-utils

ユーザーのデフォルトのSELinuxコンテキストを表示します。

selinuxenabled

libselinux-utils

SELinuxが有効かどうかを示します。

semanage

policycoreutils-python-utils

SELinuxのポリシーを管理します。

semodule

policycoreutils

SELinuxポリシー・モジュールを管理します。

semodule_deps

policycoreutils

SELinuxポリシー・パッケージ間の依存関係を表示します。

semodule_expand

policycoreutils

SELinuxポリシー・モジュール・パッケージを拡張します。

semodule_link

policycoreutils

複数のSELinuxポリシー・モジュール・パッケージを1つに結合します。

semodule_package

policycoreutils

SELinuxポリシー・モジュール・パッケージを作成します。

sesearch

setools-console

SELinuxのポリシーを問い合せます。

sestatus

policycoreutils

使用されているSELinuxモードとSELinuxポリシーを表示します。

setenforce

libselinux-utils

SELinuxモードを変更します。

setsebool

policycoreutils

SELinuxのブール値を設定します。

setfiles

policycoreutils

1つ以上のファイルのセキュリティ・コンテキストを設定します。

SELinuxモードの設定

SELinuxは、enforcingモードまたはpermissiveモードで実行されます。

enforcing

SELinuxセキュリティ・ポリシー・ルールによって権限が付与されていない場合、カーネルはユーザーおよびプログラムへのアクセスを拒否します。拒否メッセージはすべて、AVC (アクセス・ベクター・キャッシュ)拒否として記録されます。これがデフォルト・モードです。

permissive

カーネルはセキュリティ・ポリシー・ルールを強制しませんが、SELinuxは拒否メッセージをログ・ファイルに送信します。これにより、SELinuxがenforcingモードで実行されている場合に拒否されるアクションを確認できます。このモードは、システムにSELinuxを効果的に実装する場合に役立ちます。

現在のSELinuxモードを表示するには、次のコマンドを実行します。

getenforce

現在のモードをenforcingに設定するには、次のコマンドを実行します:

sudo setenforce enforcing

現在のモードをpermissiveに設定するには、次のコマンドを実行します:

sudo setenforce permissive
ノート

setenforceを使用してモードに設定した値は、リブート後は維持されません。デフォルトのSELinuxモードを構成するには、SELinuxの構成ファイル/etc/selinux/configを編集して、SELINUXディレクティブの値をenforcingpermissiveに設定します。

SELinuxの無効化

selinuxカーネル・パラメータをゼロに設定することで、SELinuxを完全に無効にできます。

重要

Oracleでは、本番システムでSELinuxを無効にすることはお薦めしません。かわりにpermissiveモードを使用します。

  1. 必要なカーネル・パラメータを設定します。

    grubbyユーティリティを使用して、selinuxパラメータをゼロに設定します。

    sudo grubby --update-kernel ALL --args selinux=0
  2. システムを再起動します。
  3. SELinuxが無効になっていることを確認します。

    getenforceコマンドを実行し、出力がDisabledであることを確認します。

    getenforce
    Disabled
  4. (オプション) SELinuxを再度有効にする

    SELinuxを再度有効にするには、次のコマンドを入力し、システムを再起動します。

    sudo grubby --update-kernel ALL --remove-args selinux

ポリシー・ドキュメントのインストール

SELinuxは複雑で、ポリシーを使用してアクセスを構成するための多くのオプションがあります。使用可能なポリシーの詳細は、selinux-policy-docパッケージが提供するマニュアル・ページから入手できます。このタスクでは、この情報にアクセスする方法を示します。

ポリシー・ドキュメントには、ユーザーとロールに関する情報も含まれています。たとえば、user_selinux(8)マニュアル・ページで、SELinux権限のないuser_uユーザー、およびuser_rロールについて詳細を参照できます。ポリシー・ドキュメントでは、様々なセキュリティ・コンテキストに適用する制限と、使用環境のポリシーをカスタマイズするために使用できるブール型オプションについて、概要を示します。

  1. パッケージをインストールします。
    sudo dnf install -y selinux-policy-doc
  2. 次のように、マニュアル・ページ・データベースを更新します。
    sudo mandb
  3. SELinuxポリシーのマニュアル・ページを参照します。すべてのSELinuxマニュアル・ドキュメントを示すリストを取得するには、次を実行します。
    man -k _selinux