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:ポリシーを強制適用し、違反をブロック
- Permissive:違反を許可しつつ、ログに記録(※AL2023の最新デフォルト)
- Disabled:無効化(セキュリティ機能は働かない)
公式サイト:https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/default-SELinux-modes-states.html
以前はデフォルトで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;
}
...
}
- パーミッション設定 一応、Nginxがアクセスできるようにパーミッションも整えておきます。
sudo chmod -R 755 /home/ec2-user/public_html
- Nginxの再起動
sudo systemctl restart nginx
- ブラウザ にパブリック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を有効にしたまま、デフォルトルートの変更を完了させましょう。
▼解答はコチラ▼