SELinuxは、何年にもわたって、ゼロデイエクスプロイトによるシステムへの損害の防止を支援してきました。このツールは、仮想マシンの分離にも役立ち、コンテナーの分離に必要です。それでも、SELinuxはまだ一般的に無効になっているか、許容モードになっています。
SELinuxのtargeted ポリシーは、必要に応じてサービス間の相互作用を許可しながら、さまざまなプロセスドメインを分離するように設計されています。管理者がカスタマイズされたアプリケーションでこのポリシーを使用するようにシステムを構成し、SELinuxを強制モードに維持するには、いくつかのコマンドが必要です。
[SELinuxポリシードキュメントの使用について詳しくはこちらをご覧ください。]
semanage コマンドは、ファイルコンテキスト、ポートコンテキスト、およびブール値を調整するために使用されます。それでも特定のプロセスとの競合がある場合は、さらに調査が完了するまで、そのドメインを許可モードにすることができます。これにより、システムの残りの部分が強制モードで保護されたままになります。
4つのsemanageだけで 以下のコマンドを使用すると、ほとんどのシステムは、カスタマイズされたアプリケーションが強制モードのSELinuxで実行されるように構成できます。
semanage boolean コマンド
ターゲット ポリシーには、 allowのセットを有効または無効にする多くのブール値が含まれています ルール。サービスには複数のユースケースがあり、環境ごとに異なる方法で実行されることを前提としています。ブール値を使用すると、さまざまな使用例に応じてさまざまなルールセットを使用できます。アカデミック環境のWebサーバーでは、学生がホームディレクトリからコンテンツを公開できるようにする必要がありますが、企業の公開サイトでは、ユーザーのホームへのアクセスを拒否する必要があります。ディレクトリ、SSI実行可能ファイルの制限、NFS共有に保存されているデータの表示。
httpd_selinux マニュアルページでは、 httpdに提供されているすべてのブール値の使用について説明しています。 ドメインとサンプルのsetsebool 各ブール値を永続的に有効にするコマンド。これらのブール値を表示および変更する別の(および新しい)方法は、 semanage booleanを使用することです。 コマンド。
-l </ code> オプションは、ロードされたポリシーのすべてのブール値を一覧表示します。次に、キーワードをフィルタリングできます:
$ sudo semanage boolean -l | grep httpd
httpd_anon_write (off , off) Allow httpd to anon write
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap この出力には、ブール値の名前、ブール値の現在および永続的な状態、およびブール値の使用方法の簡単な説明が含まれます。
semanageでブール値を変更するには 使用:
$ sudo semanage boolean -m --off httpd_ssi_exec
-C を追加して、ローカルでカスタマイズされたブール値を一覧表示することもできます。 オプション:
$ sudo semanage boolean -l -C
SELinux boolean State Default Description
httpd_ssi_exec (off , off) Allow httpd to ssi exec
virt_sandbox_use_all_caps (on , on) Allow virt to sandbox use all caps
virt_use_nfs (on , on) Allow virt to use nfs
各SELinuxドメインのマニュアルページには、それらのドメインに提供されているすべてのブール値の説明があります。 semanageを使用してSELinuxブール値を変更する際のその他のオプションについて 、 semanage-booleanを参照してください マニュアルページ。
これらのsemanageを自動化できます 関連するAnsibleモジュールとロールを持つコマンド。 semanage booleanのAnsibleモジュール sebooleanです 。これと以下で説明する関連モジュールは、 linux-system-rolesによって提供されるロールによって使用されます Fedoraまたはrhel-system-rolesのパッケージ Red HatEnterpriseLinuxのパッケージ。 Red Hatパッケージは、Red Hat Enterprise Linux 7.4以降で利用可能であり、「Extras」リポジトリにあります。
semanage fcontext コマンド
ターゲット ポリシーは、アプリケーションファイル(データ、ログ、ランタイムファイルなど)のファイルコンテキスト情報をデフォルトおよび一般的な代替の場所に提供します。これらのコンテキスト定義はマッピングです restorecon コマンドは、ファイルコンテキストを確認または変更するために使用します。
semanage fcontext コマンドを使用して、ファイルコンテキスト定義を一覧表示し、さらに追加することができます。 -l </ code> オプションは、ロードされたポリシーのすべてのコンテキストを表示します。次に、キーワードをフィルタリングできます:
$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd regular file system_u:object_r:sshd_initrc_exec_t:s0
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
/usr/lib/systemd/system/sshd-keygen.* regular file system_u:object_r:sshd_keygen_unit_file_t:s0
この出力には、ターゲットファイル名の正規表現パターン、ファイルの種類、および一致するファイル名に割り当てるファイルコンテキストが含まれます。
関連するマニュアルページ、この場合は man sshd_selinux には、管理対象ファイルのリストと、ドメインで使用可能な各ファイルコンテキストの説明が含まれています。代替ラベルを指定して適用するためのサンプルコマンドもあります。
たとえば、 sshdを保存する場合 別のサブディレクトリにあるホストキーの場合、次の2つのコマンドを実行できます。
$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys
この例では、正規表現はディレクトリ / etc / ssh / keysと一致します。 / etc / ssh / keysにあるサブディレクトリとファイルも同様です。 ディレクトリ。
ブール値と同様に、 -C を追加することで、ローカルでカスタマイズされたファイルコンテキストを表示できます。 オプション:
$ sudo semanage fcontext -l -C
SELinux fcontext type Context
/usr/share/dnfdaemon/dnfdaemon-system all files system_u:object_r:rpm_exec_t:s0
SELinuxファイルコンテキストを変更する際のその他のオプションについては、 semanage-fcontextを参照してください。 マニュアルページ。
semanage fcontextを自動化できます Ansible sefcontextを使用したコマンド モジュール。 restorecon コマンドは、別のコマンドモジュールで実行する必要があります。 ansible-doc sefcontextを参照してください たとえば。 selinux システムの役割には両方のタスクが含まれます。
semanageポート コマンド
ファイルコンテキストに加えて、 target ポリシーはポートコンテキストも定義します。ブール値やファイルコンテキストと同様に、ドメイン固有のマニュアルページには、定義されたタイプが一覧表示され、別のポートでサービスを実行するために必要なサンプルコマンドも表示される場合があります。
次のコマンドでポートコンテキストを表示します:
$ sudo semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989 カスタムポートでサービスを実行する場合は、サービスの構成ファイルを変更し、SELinuxポート定義も追加する必要があります。ポート定義がないと、サービスの開始に失敗し、「ポートにバインドできません」のようなエラーをログに記録します。
次のコマンドでポート定義を追加します:
$ sudo semanage port -a -t http_cache_port_t -p tcp 8010
ポートを指定するときは、プロトコルとポート番号の両方を含める必要があります。さらに、プロトコルとポート番号ごとに定義できるタイプは1つだけです。 SELinuxポートコンテキストを変更する際のその他のオプションについては、 semanage-portを参照してください。 マニュアルページ。
semanage-portを自動化できます seportを使用したコマンド Ansibleモジュール。
semanage permissive コマンド
システム全体をパーミッシブモードに移行する(さらに悪いことに、SELinuxを完全に無効にする)代わりに、単一のドメインをパーミッシブモードにすることができます。許容モードのドメインは、すべてのアクションを許可しますが、ログに記録すると拒否されます。システム上の他のドメインは強制モードのままであり、特に許可されていないアクションをログに記録して拒否します。
共通ドメインのマニュアルページには、パーミッシブモードにすることができるSELinuxタイプがリストされています。
現在許可モードになっているドメインを一覧表示するには、次を使用します。
$ sudo semanage permissive -l 初期インストール時には、許容モードのドメインが存在する可能性はほとんどありません。
ドメインをパーミッシブモードにするには、次を使用します。
$ sudo semanage permissive -a squid_t
-d オプションを選択すると、許可ドメインが削除され、そのドメインの強制モードが再度有効になります。
ドメインをパーミッシブモードにする際のその他のオプションについては、 semanage-permissiveを参照してください。 マニュアルページ。
Ansible selinux_permissive モジュールを使用して、ドメインをパーミッシブモードにすることができます。 ansible-doc selinux_permissiveを参照してください 例として。
すべてのsemanage ターゲットのポリシー構成を追加または変更するコマンドは、情報を * localに保存します / etc / selinux / targetedの下のファイル ディレクトリツリー。これらのファイルにはすべて、直接編集してはならないという警告がありますが、カスタマイズを維持するために使用されます。 SELinuxとポリシーパッケージが更新されると、これらのローカルカスタマイズファイルはそのまま残り、更新されたポリシーに適用されます。