aws

【H-7】SELinux

AL2023に導入されたSELinux。Al2023のGA当時はデフォルトで動作しており、エンジニアはまずDisable作業をしていまいた。
2025年現在はデフォルトでPermissiveという状態で立ち上がってきます。
今回は、SELinuxについて学習しましょう。

【学習フェーズ】

■ SELinuxとは何か

  • SELinux(Security-Enhanced Linux)は、Linuxに標準搭載されているセキュリティ強化機能です。
  • 通常のパーミッション(rwx)だけでは防げない操作を防止する「強制アクセス制御(MAC:Mandatory Access Control)」の仕組みです。
  • OSそのものではなく、Linuxカーネルに組み込まれたアクセス制御モジュールとして動作しています。

■ なぜSELinuxが必要なのか

  • Linuxのパーミッション設定が正しくても、意図しないアクセスが発生するケースがあります。
    例:攻撃者がroot権限を奪取した場合、通常の権限管理だけでは防げません。
  • SELinuxは「プロセスが何をして良いか」をラベル(コンテキスト)で管理し、許可された行動以外は強制的に拒否します。

上記のように、セキュリティが強化されるため、特に金融機関や政府機関など厳格なセキュリティポリシーを持つ組織で採用されてきました。

■ モードの種類(3つの動作モード)

以前はデフォルトでEnforcingとなっていたため、SELinuxに不慣れなエンジニアが設定変更やWebサーバー構築を行う際に、トラブルが頻発していました。
(例)Webサーバーが起動しているのに、403エラー
   ポート番号を変更したら、通信できない
   ファイルやディレクトリを移動したら、アプリが動かない
これらはすべて、SELinuxのポリシー違反が原因で発生するケースが多いです。

■ 基本コマンドと確認方法

  • 状態確認sestatus
  • 一時的なモード変更(再起動で元に戻る):sudo setenforce 0 # Permissiveに変更
  • 永続的な変更
    /etc/selinux/config を編集
  • ログ確認
    トラブル時は以下のログを見る(※デフォルト設定でログは記録されています)
    /var/log/audit/audit.log

【実践フェーズ】SELinuxトラブル対応ワーク

■ はじめに
SELinuxによる制限は、「知らないうちに発生する」ことが多く、気づかずにハマるケースが典型です。この実践フェーズでは、実際に発生しやすいトラブルを再現し、適切な確認方法と対応手順を学びます。無効化に頼らず、運用現場で通用するスキルを身につけましょう。

はじめに、AL2023でSELinuxを有効にしておきましょう。

①一時的にEnforcingモードへ変更:sudo setenforce 1

確認コマンド

$ sestatus
SELinux status: enabled
Current mode: enforcing

②Nginxのインストール Amazon Linux 2023はdnfを使用します。

sudo dnf install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

③デフォルトルートをデフォルトの /usr/share/nginx/html ではなく、意図的に別ディレクトリを作成します。

mkdir -p /home/ec2-user/public_html
echo "Hello SELinux Test" > /home/ec2-user/public_html/index.html

Nginx設定ファイルを編集 ドキュメントルートを変更します。

sudo vi /etc/nginx/nginx.conf

以下の部分を修正:

server {
listen 80;
server_name localhost;

location / {
root /home/ec2-user/public_html;
index index.html index.htm;
}
...
}
  1. パーミッション設定 一応、Nginxがアクセスできるようにパーミッションも整えておきます。
sudo chmod -R 755 /home/ec2-user/public_html
  1. Nginxの再起動
sudo systemctl restart nginx
  1. ブラウザ にパブリックIPでアクセスすると、403 Forbiddenエラーが発生するはずです。
http://<EC2のパブリックIP>

■ 課題1:Nginxのドキュメントルート変更で403エラー発生

【シナリオ】
Amazon Linux 2023にNginxをインストールし、ドキュメントルートをデフォルトの/usr/share/nginx/htmlから/home/ec2-user/public_htmlに変更しましょう。すると、ブラウザでアクセスすると403エラーが発生するはずです。
Nginxの設定は正しく、パーミッションも問題ありません。
SELinuxを有効にしたまま、デフォルトルートの変更を完了させましょう。

▼解答はコチラ▼