はじめに
皆さんは検証する際にSELinuxは無効にしますか?私は必ず無効にします。
正直なところ、いつも何も考えずにとりあえず無効にしており、「SELinuxって結局何のためにあるのか?」というのがピンと来ていなかったので、浅く理解できることを目標に概要確認から動作検証をしたいと思います。
SELinuxとは
SELinux (Security-Enhanced Linux) は、システムにアクセスできるユーザーを管理者がより詳細に制御できるようにする Linux® システム 用のセキュリティ・アーキテクチャです。
SELinux は、システム上のアプリケーション、プロセス、ファイルのアクセス制御を定義します。アクセス制御にはセキュリティポリシーを使用します。セキュリティポリシーは一連のルールで構成されており、アクセス可能なものとそうでないものを SELinux が識別できるようにします。
理解できそうで微妙にわからない。。。
アクセス制御は「chmodコマンドでパーミッションで済む話では?」と思いましたが、
以下を理解するとそうではないことがわかりました。
SELinuxを理解するうえで重要な概念
任意アクセス制御 (DAC) ⇒いつもの権限管理
オブジェクトへのアクセスを制御するセキュリティモデルの一つです。このモデルでは、オブジェクトの所有者がアクセス権を設定し、他のユーザーがそのオブジェクトにアクセスできるかどうかを決定します。例えば、ファイルシステムでファイルの所有者が誰がそのファイルを読み取り、書き込み、実行できるかを決めることができます。
強制アクセス制御 (MAC) ⇒SELinux
より厳格なセキュリティモデルです。このモデルでは、アクセス権は中央の権限ある機関によって管理され、個々のオブジェクトやユーザーにラベルを付けてアクセスを制御します。例えば、機密情報を扱うファイルには「機密」のラベルが付けられ、そのラベルに適切なアクセス権を持つユーザーのみがアクセスできるようになります。
上記より、なぜSELinuxが必要かという問いに対して、
「DACは柔軟であるがゆえに穴ができてしまう可能性があるので、MACによって厳格に管理する必要がある。」
という理解をしました。
SELinuxのモードについて
SELinuxのモードは3つあるようです。
Enforcingモード
SELinuxが有効であり、設定されたポリシーに基づいてアクセス制御が行われます。ポリシーに違反するアクセスは拒否され、ログに記録されます。
Permissiveモード
SELinuxは有効ですが、ポリシー違反があってもアクセスを拒否せず、警告メッセージをログに記録するだけです。このモードは、問題のトラブルシューティングやポリシーの調整に役立ちます。
Disabledモード
SELinuxが無効であり、アクセス制御は行われず、ログも生成されません。
動作確認検証
Webサーバ(192.168.150.3)へアクセスし、デフォルトの状態ではアクセスできないことを確認、SELinuxへポリシー追加することによってアクセスできることを確認します。
①デフォルトの状態でWebサーバ(192.168.150.3)へアクセスし、失敗していることを確認します。
②Webサーバへ設定追加
[root@localhost html]# getenforce
Enforcing
[root@localhost ~]# sudo setsebool -P httpd_can_network_connect on
#HTTPD(ApacheなどのWebサーバー)のスクリプトやモジュールがネットワーク経由で他のサーバーやサービスに接続できるかどうかを制御します。
[root@localhost ~]# sudo setsebool -P httpd_can_network_relay on
#HTTPDがバックエンド・サーバーにHTTPトラフィックをリレーできるようになります。
[root@localhost ~]# sudo restorecon -Rv /var/www/html
#SELinuxのポリシーを再読み込みして、変更を有効にします。
[root@localhost ~]# sudo systemctl restart httpd
#SELinuxの設定を反映させるために、Webサーバーを再起動します。
プロセスやモジュール間のアクセス制御を許可しており、非常に細かくポリシーを記載できることがわかります。
③設定追加後、Webサーバ(192.168.150.3)へアクセスし、成功していることを確認
さいごに
結論、「SELinuxって結局何のためにあるのか?」という疑問は、「DACによる管理だけでなく、セキュリティポリシーを適用することで、漏れのない一貫したセキュリティを保つため」にあるのかなと感じました。
以上、自分なりに解釈・検証してみましたが、何か間違ったことを言っていたらご指摘いただけると嬉しいです。ここまで読んでいただきありがとうございました。