第10章 複数のシステムへの同じ SELinux 設定のデプロイメント
テスト済みで検証済みの SELinux 設定を、複数のシステムに効率的にデプロイします。デプロイメントを自動化することで、インフラストラクチャー全体で一貫したセキュリティーポリシーを確保できます。
次のいずれかの方法を使用して、検証済みの SELinux 設定を複数のシステムにデプロイできます。
- RHEL システムロールおよび Ansible の使用
- RHEL Web コンソールの使用
-
スクリプトで
semanageの export コマンドおよび import コマンドの使用
10.1. RHEL システムロールを使用した SELinux の設定 リンクのコピーリンクがクリップボードにコピーされました!
selinux RHEL システムロールを使用すると、SELinux 権限をリモートで設定および管理できます。
たとえば、次のタスクには selinux ロールを使用してください。
- SELinux ブール値、ファイルコンテキスト、ポート、およびログインに関連するローカルポリシーの変更の消去
- SELinux ポリシーブール値、ファイルコンテキスト、ポート、およびログインの設定
- 指定されたファイルまたはディレクトリーのファイルコンテキストの復元
- SELinux モジュールの管理
10.1.1. selinux RHEL システムロールを使用したディレクトリーの SELinux コンテキストの復元 リンクのコピーリンクがクリップボードにコピーされました!
ディレクトリーの SELinux コンテキストをリモートでリセットするには、selinux RHEL システムロールを使用できます。SELinux コンテキストが正しくないと、アプリケーションがファイルにアクセスできなくなる可能性があります。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む 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/サンプル Playbook で指定されている設定は次のとおりです。
selinux_restore_dirs: <list>- ロールによって SELinux コンテキストをリセットするディレクトリーのリストを定義します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.selinux/README.mdファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
コンテキストをリセットしたファイルまたはディレクトリーの 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/
10.1.2. selinux RHEL システムロールを使用した SELinux ネットワークポートラベルの管理 リンクのコピーリンクがクリップボードにコピーされました!
標準以外のポートでサービスを実行する場合は、SELinux がサービスへのアクセス権を拒否しないように、対応する SELinux タイプラベルをそのポートに設定する必要があります。selinux RHEL システムロールを使用すると、このタスクを自動化し、ポートにタイプラベルをリモートで割り当てることができます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。
手順
次の内容を含む 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サンプル Playbook で指定されている設定は次のとおりです。
ports: <port_number>- SELinux ラベルを割り当てるポート番号を定義します。複数の値はコンマで区切ります。
setype: <type_label>- SELinux タイプラベルを定義します。
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.selinux/README.mdファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
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
10.1.3. selinux RHEL システムロールを使用した SELinux モジュールのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの SELinux ポリシーがお客様の要件に合わない場合は、カスタムモジュールを作成して、アプリケーションに必要なリソースへのアクセスを許可できます。selinux RHEL システムロールを使用すると、このプロセスを自動化し、SELinux モジュールをリモートでデプロイできます。
前提条件
- コントロールノードと管理対象ノードの準備が完了している。
- 管理対象ノードで Playbook を実行できるユーザーとしてコントロールノードにログインしている。
-
管理対象ノードへの接続に使用するアカウントに、そのノードに対する
sudo権限がある。 - デプロイする SELinux モジュールが、Playbook と同じディレクトリーに保存されている。
SELinux モジュールが Common Intermediate Language (CIL) またはポリシーパッケージ (PP) 形式で利用できる。
PP モジュールを使用している場合は、管理対象ノード上の
policydbバージョンが、PP モジュールのビルドに使用されたバージョン以降であることを確認してください。
手順
次の内容を含む 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サンプル Playbook で指定されている設定は次のとおりです。
path: <module_file>- コントロールノード上のモジュールファイルへのパスを設定します。
priority: <value>-
SELinux モジュールの優先度を設定します。デフォルトは
400です。 state: <value>モジュールの状態を定義します。
-
enabled: モジュールをインストールまたは有効にします。 -
disabled: モジュールを無効にします。 -
absent: モジュールを削除します。
-
Playbook で使用されるすべての変数の詳細は、コントロールノードの
/usr/share/ansible/roles/rhel-system-roles.selinux/README.mdファイルを参照してください。Playbook の構文を検証します。
$ ansible-playbook --syntax-check ~/playbook.ymlこのコマンドは構文を検証するだけであり、有効だが不適切な設定から保護するものではないことに注意してください。
Playbook を実行します。
$ ansible-playbook ~/playbook.yml
検証
SELinux モジュールのリストをリモートで表示し、Playbook で使用したモジュールをフィルタリングします。
# ansible managed-node-01.example.com -m shell -a 'semodule -l | grep <module>'モジュールがリストされている場合、そのモジュールはインストールされ、有効になっています。