LinuxサーバーをSELinuxで保護する方法

SELinuxは、故障したプロセスやアプリケーションからサーバーを保護するのに役立ちます。国家安全保障局(NSA)によって開発され、攻撃者から政府機器を保護することを目的としたこのセキュリティ強化(SE)Linuxアーキテクチャは、セキュリティプロトコルを使用してシステムリソースへのアクセスを制限します。サーバーにSELinuxを利用する方法を見つけましょう。
目次
- SELinuxアーキテクチャ
- SELinuxのインストールまたは有効化方法
- SELinuxの設定方法
- SELinuxポリシー
- SELinuxエラーの処理方法
- SELinuxを無効にする方法
- よくある質問
こちらもお読みください: Rcシェルとは何か、Linuxにインストールする方法
SELinuxアーキテクチャ
SELinuxは、システム管理者によって有効または無効にできるカーネルモジュールです。ファイルやネットワークポートへのアクセスはセキュリティポリシーに従って制限されているため、故障したプログラムや構成ミスのあるデーモンはシステムのセキュリティに大きな影響を与えることができません。
アプリケーションやプロセスがSELinuxシステム内でファイルアクセスを要求すると、最初にアクセスベクトルキャッシュ(AVC)をチェックします。権限が以前にキャッシュされている場合、要求されたアプリケーションのためにファイルを返します。権限がキャッシュされていない場合、セキュリティサーバーにリクエストを送信します。セキュリティサーバーは、そのデータベース内のすべてのセキュリティポリシーをチェックします。セキュリティポリシーに応じて、権限が付与されるか拒否されます。
SELinuxには、rootやスーパーユーザーの概念はありません。SELinuxなしの未変更のLinuxディストリビューションのセキュリティは、カーネルの正しさ、すべての特権アプリケーション、その構成に依存しています。これらのコンポーネントのいずれかに欠陥やバグがあると、攻撃のための表面が作成され、システムが侵害される可能性があります。
一方、SELinuxを導入した修正済みのLinuxシステムは主に、カーネルとセキュリティポリシーの正しさに依存しています。
こちらもお読みください: LinuxでのRmコマンドの使い方
SELinuxのインストールまたは有効化方法
SELinuxはセキュリティ強化Linuxの略です。SELinuxは2003年からLinuxカーネルの一部となっています。したがって、別途インストールする必要はありません。ただし、ほとんどのデスクトップLinuxディストリビューションではデフォルトで無効になっています。

SELinuxには、強制、許可、無効の3つの主要なモードがあります。それらについて簡単に説明します。
- 強制: これは、セキュリティポリシーを使用してLinuxシステムを有効にし、保護します。
- 許可: セキュリティポリシーを強制せず、すべてをログに記録します。このモードはトラブルシューティングに便利です。
- 無効: SELinuxを無効にします。このオプションは推奨されておらず、システムでSELinuxを再度有効にすると、ラベリングの変更によるエラーが発生します。
注意: UbuntuにはAppArmorが付属しており、これはSELinuxの代替です。SELinuxはUbuntuで使用可能ですが、AppArmorとは互換性がなく、有効にするとシステムが破損する可能性があります。UbuntuでSELinuxを本当に使用する必要がある場合は、まずAppArmorを無効にし、ピアマティブモードから始めて、実稼働で使用する前に徹底的なテストを行ってください。
- システムでSELinuxを有効化するには、「/etc/selinux/config」ファイルを編集する必要があります。テキストエディタでこのファイルを開いてください。
sudonano/etc/selinux/config- 設定ファイル内で
SELINUX=permissiveに設定します。Ctrl + Oを押してEnterを押してファイルを保存し、Ctrl + Xを押してエディタを終了します。これでシステムのSELinuxが有効化されました。
注意: SELinuxを許可モードに設定する前に直接強制しようとすると、ファイルやプロセスが誤ってラベリングされ、起動できなくなる可能性があります。
- ファイルシステムを自動的に再ラベルするには、ルートファイルシステムに「.autorelabel」というファイルを作成します。システムを再起動すると、SELinuxが自動的にファイルシステムを再ラベルします。エラーを減らすために、設定フォルダ内の
SELINUX=permissiveオプションをそのままにしておいてください。すべてが再ラベルされたら、「/etc/selinux/config」でSELinuxをSELINUX=enforcingに設定し、再起動します。
SELinuxはシステムで正常に強制されます。
こちらもお読みください: Starshipを使用してLinuxターミナルのプロンプトをカスタマイズする方法
SELinuxの設定方法
SELinuxは、システム管理者がシステムリソースにアクセスできるものを制御するアーキテクチャです。SELinuxは、セキュリティポリシーを使用してシステムへのアクセスを制限します。システムを保護するためにSELinuxを設定する方法はいくつかあり、最も一般的なものは「ターゲットポリシー」と「マルチレベルセキュリティ」(MLS)です。
ターゲットポリシーはデフォルトのセキュリティポリシーです。ファイルアクセス、タスク、サービスなど、一連のセキュリティポリシーをカバーしています。マルチレベルセキュリティ(MLS)は、一般的に政府や大規模組織によって使用され、設定が非常に複雑で、管理のために専任のチームが必要です。
現在のSELinuxモードを確認するには、getenforceおよびsestatusコマンドを使用できます。
現在のセッションでSELinuxモードを変更する必要があるだけの場合、次の2つのコマンドを実行できます。
sudo setenforce 0: 現在のセッションのためにSELinuxを許可モードに設定します。sudo setenforce 1: 現在のセッションのためにSELinuxを強制モードに設定します。
SELinuxポリシー
SELinuxはラベリングシステムとして機能します。すべてのファイル、ポート、プロセスにラベルを関連付けます。ラベルは、物事を論理的にグループ化する方法です。カーネルは、ブート時にラベルを管理する責任があります。

SELinuxポリシーは、ブーリアンによって管理できます。たとえば、httpdというデーモンにブーリアンを設定してみましょう。httpdは、Linuxでウェブサーバーを実行するために使用するApache HTTPサーバーのデーモンです。
httpdに特有のすべてのモジュールをリストするには、ターミナルで次のコマンドを実行します:
getsebool -a|grep httpdここで、-aオプションはすべてのブーリアンをリストし、grepを使用してhttpdに関連するブーリアンをフィルタリングします。Linuxでのgrepに関する詳細を知るには、この記事をお読みください。
上記のコマンドの出力は、以下の画像のようになります。
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd can connect ftp --> off
httpd_can_connect_ldap --> off
httpd_can_connect_mythty --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd dbus sssd--> off上記のリストから、httpd_can_connect_ftpというブーリアンを選択し、その値を変更します。最初に、httpd_can_connect_ftpの値がオンかオフかを確認します:
getsebool httpd_can_connect_ftp次に、httpd_can_connect_ftpの値を許可するように設定します。
setsebool -P httpd_can_connect_ftp 1ここで、1は「許可」または「オン」を表します。-Pタグは、変更を永続的にするために使用されます。再度、httpdに関連するブーリアンをリストすると、httpd_can_connect_ftpの値が「オン」に変更されていることが確認できます。
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd can connect ftp --> on
httpd_can_connect_ldap --> off
httpd_can_connect_mythty --> off
httpd_can_connect_zabbix --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> off
httpd dbus sssd--> offこちらもお読みください: UbuntuにおけるDockerを使用したWordPressの設定方法
SELinuxエラーの処理方法
一般的にSELinuxには4つのタイプのエラーがあります。
- システムが破損している: SELinuxはアクセスを制限することでシステムを保護しますが、場合によってはこれでは不十分なことがあります。これらのエラーが発生した場合、システムが侵害されている可能性があります。必要な手段を迅速に講じてください。
- ポリシーのバグ: 修正が必要なポリシーにバグがある場合、このエラーが表示されます。
- ラベルが間違っている: このエラーメッセージは、ユーザーによるラベリングのカスタマイズやSELinuxによる自動ラベリングがうまくいかなかった場合に表示されます。これらのラベルエラーを修正するためのツールが市場に多数存在します。
- ポリシーの修正が必要: システムに変更を加えた際にSELinuxに通知しなかった場合に発生するエラーです。このエラーは、ブーリアンやポリシーモジュールを使用して修正できます。
SELinuxを無効にする方法
SELinuxを無効にすることは、企業や政府のサーバー、および攻撃に非常に脆弱な公開デバイスにとって決して良い選択肢ではありません。しかし、システムでSELinuxを無効にしたい場合は、以下の手順に従ってください。
- 「/etc/selinux」のSE Linux設定ファイルに移動し、SE Linux構成モードを
enforcingからpermissiveに変更し、システムを再起動します。 - SELinuxモードを
permissiveからdisabledに変更します。
次回再起動後、システムのSELinuxは無効化され、通常のLinuxマシンになります。
こちらもお読みください: Linuxでのファイアウォールの設定方法
よくある質問
SELinuxはAndroidにありますか?
はい、SELinuxはバージョン4.3からAndroidに実装されています。これにより、Androidユーザーをサイバー攻撃から保護するためにAndroidのセキュリティが強化されました。
SELinuxはファイアウォールですか?
SELinuxはファイアウォールではありません。ファイアウォールはコンピュータとネットワーク間のトラフィックを制御します。SELinuxはシステム内のさまざまなプログラムのファイルシステムとネットワークアクセスを制御し、内部ファイアウォールとしてシステムを保護するものと考えることができます。
SELinuxはオペレーティングシステムですか?
SELinuxはオペレーティングシステムではありません。これはLinuxカーネルに存在するカーネルセキュリティモジュールです。アクセス制御セキュリティポリシーと義務的アクセス制御(MAC)をサポートします。オペレーティングシステムと呼ぶには、カーネル自体以上のものが必要です。ほとんどのLinuxベースのオペレーティングシステムで、SELinuxを使用できます。
SELinuxを使用するべきですか?
あなたがシスアドミンでUnixシステムを理解しているなら、SELinuxを使用するべきです。なぜなら、これはサーバーのセキュリティを向上させ、攻撃の表面を最小化するからです。Unixシステムにあまり詳しくない場合、AppArmorを使用することもできます。これはSELinuxよりも比較的簡単です。家庭用ユーザーでLinuxをデスクトップコンピュータでのみ使用する場合、SELinuxを使用する必要はありません。設定に頭痛を引き起こし、生産性を低下させるだけです。