第10章 複数のシステムへの同じ SELinux 設定のデプロイメント


次のいずれかの方法を使用して、検証済みの SELinux 設定を複数のシステムにデプロイできます。

  • RHEL システムロールおよび Ansible の使用
  • RHEL Web コンソールの使用
  • スクリプトで semanage の export コマンドおよび import コマンドの使用

10.1. RHEL システムロールを使用した SELinux の設定

selinux RHEL システムロールを使用すると、SELinux 権限をリモートで設定および管理できます。次に例を示します。

  • SELinux ブール値、ファイルコンテキスト、ポート、およびログインに関連するローカルポリシーの変更を消去します。
  • SELinux ポリシーブール値、ファイルコンテキスト、ポート、およびログインの設定
  • 指定されたファイルまたはディレクトリーでファイルコンテキストを復元します。
  • SELinux モジュールの管理

10.1.1. selinux RHEL システムロールを使用したディレクトリーの SELinux コンテキストの復元

ファイルの SELinux コンテキストの誤りは、さまざまな場合に発生します。たとえば、ファイルをディレクトリーにコピーまたは移動する場合、ファイルの SELinux コンテキストが、新しい場所の予想されるコンテキストと一致しないことがあります。SELinux コンテキストが正しくないと、アプリケーションがファイルにアクセスできない可能性があります。多数のホストにあるディレクトリーの SELinux コンテキストをリモートでリセットするには、selinux RHEL システムロールを使用できます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Managing SELinux
      hosts: managed-node-01.example.com
      tasks:
        - name: Restore SELinux context
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.selinux
          vars:
            selinux_restore_dirs:
              - /var/www/
              - /etc/
    Copy to Clipboard Toggle word wrap

    サンプル Playbook で指定されている設定は次のとおりです。

    selinux_restore_dirs: <list>
    ロールによって SELinux コンテキストをリセットするディレクトリーのリストを定義します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.selinux/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

検証

  • コンテキストをリセットしたファイルまたはディレクトリーの SELinux コンテキストを表示します。たとえば、/var/www/ ディレクトリーのコンテキストを表示するには、次のように入力します。

    # ansible rhel10.example.com -m command -a 'ls -ldZ /var/www/'
    drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Feb 28 13:20 /var/www/
    Copy to Clipboard Toggle word wrap

10.1.2. selinux RHEL システムロールを使用した SELinux ネットワークポートラベルの管理

標準以外のポートでサービスを実行する場合は、このポートに対応する SELinux タイプラベルを設定する必要があります。これにより、サービスが標準以外のポートでリッスンしようとする際に、そのサービスへの許可が SELinux によって拒否されなくなります。selinux RHEL システムロールを使用すると、このタスクを自動化し、ポートにタイプラベルをリモートで割り当てることができます。

前提条件

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Managing SELinux
      hosts: managed-node-01.example.com
      tasks:
        - name: Set http_port_t label on network port
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.selinux
          vars:
            selinux_ports:
              - ports: <port_number>
                proto: tcp
                setype: http_port_t
                state: present
    Copy to Clipboard Toggle word wrap

    サンプル Playbook で指定されている設定は次のとおりです。

    ports: <port_number>
    SELinux ラベルを割り当てるポート番号を定義します。複数の値はコンマで区切ります。
    setype: <type_label>
    SELinux タイプラベルを定義します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.selinux/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

検証

  • http_port_t ラベルが割り当てられているポート番号を表示します。

    # ansible managed-node-01.example.com -m shell -a 'semanage port --list | grep http_port_t'
    http_port_t      tcp     80, 81, 443, <port_number>, 488, 8008, 8009, 8443, 9000
    Copy to Clipboard Toggle word wrap

10.1.3. selinux RHEL システムロールを使用した SELinux モジュールのデプロイ

デフォルトの SELinux ポリシーがお客様の要件に合わない場合は、カスタムモジュールを作成して、アプリケーションに必要なリソースへのアクセスを許可できます。selinux RHEL システムロールを使用すると、このプロセスを自動化し、SELinux モジュールをリモートでデプロイできます。

前提条件

  • コントロールノードと管理対象ノードの準備が完了している
  • 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
  • 管理対象ノードへの接続に使用するアカウントに、そのノードに対する sudo 権限がある。
  • デプロイする SELinux モジュールが、Playbook と同じディレクトリーに保存されている。
  • SELinux モジュールが Common Intermediate Language (CIL) またはポリシーパッケージ (PP) 形式で利用できる。

    PP モジュールを使用している場合は、管理対象ノード上の policydb バージョンが、PP モジュールのビルドに使用されたバージョン以降であることを確認してください。

手順

  1. 次の内容を含む Playbook ファイル (例: ~/playbook.yml) を作成します。

    ---
    - name: Managing SELinux
      hosts: managed-node-01.example.com
      tasks:
        - name: Deploying a SELinux module
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.selinux
          vars:
            selinux_modules:
              - path: <module_file>
    	    priority: <value>
                state: enabled
    Copy to Clipboard Toggle word wrap

    サンプル Playbook で指定されている設定は次のとおりです。

    path: <module_file>
    コントロールノード上のモジュールファイルへのパスを設定します。
    priority: <value>
    SELinux モジュールの優先度を設定します。デフォルトは 400 です。
    state: <value>

    モジュールの状態を定義します。

    • enabled: モジュールをインストールまたは有効にします。
    • disabled: モジュールを無効にします。
    • absent: モジュールを削除します。

    Playbook で使用されるすべての変数の詳細は、コントロールノードの /usr/share/ansible/roles/rhel-system-roles.selinux/README.md ファイルを参照してください。

  2. Playbook の構文を検証します。

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    このコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。

  3. Playbook を実行します。

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

検証

  • SELinux モジュールのリストをリモートで表示し、Playbook で使用したモジュールをフィルタリングします。

    # ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'
    Copy to Clipboard Toggle word wrap

    モジュールがリストされている場合、そのモジュールはインストールされ、有効になっています。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat