2026年5月17日
2026年5月17日
Dockerコンテナをrootで実行しない方法
はじめに
Dockerコンテナをrootで実行しない方法は、セキュリティとパフォーマンスの両面から重要です。通常、Dockerコンテナは非rootユーザーで動作することで、外部からの攻撃に対する防御力を強化します。この記事では、コンテナ内でroot権限を避けるための手順と設定方法について解説します。
症状・背景
- セキュリティ上のリスク: コンテナ内でrootユーザーが存在すると、攻撃者が内部に侵入しやすくなります。
- パフォーマンス: root権限を使わないと、コンテナの起動や操作が高速化されます。また、非rootユーザーを使用することでリソースの管理も容易になります。
- ポータビリティ: コンテナは異なる環境でも再現性を保つため、rootユーザー依存の構成は避けるべきです。
手順・設定方法
ステップ1: Dockerイメージを作成する
# Dockerfileを作成し、非rootユーザーを使用するための設定を行う
FROM ubuntu:20.04
# ユーザーを作成
RUN useradd -ms /bin/bash myuser
# 作成したユーザーディレクトリを指定する
USER myuser
# 必要なパッケージをインストール
RUN apt-get update && \
apt-get install -y nginx
ステップ2: セキュアなDockerコンテナの起動
# 作成したDockerイメージを起動する
docker run --name mynginx -d mynginx_image
ステップ3: SELinux(オプション)
- SELinuxの有効化: SELinuxはLinuxで使用されるセキュリティポリシーであり、コンテナのセキュリティを強化します。
# システムにSELinuxをインストール
sudo yum install -y policycoreutils
# SELinuxを有効にする(必要なら)
setenforce 1
ステップ4: 実践/トラブルシュート/監視
# コンテナのログを確認する
docker logs mynginx
# コンテナのステータスを確認する
docker ps -a
注意事項
- SELinuxの設定: SELinuxの有効化やポリシー設定はオプションで、必要に応じて行う。
- ロールベース認証: Dockerの
--userns-remapオプションを使用して、ユーザー名前空間をマップすることで、コンテナ内でroot権限を使わずに実行できる。 - セキュリティ上の注意: rootユーザーは最小限にとどめること。必要不可欠なサービスのみでrootとして起動する。
- パフォーマンス/運用上の注意: ユーザー名前空間の使用はパフォーマンス上、微小な影響があるため、十分検討すること。
まとめ
1. Dockerfileでのユーザー設定: Dockerイメージ内で非rootユーザーを作成し、そのユーザーを使用する。
2. コンテナ起動時: --userns-remapオプションを使用して、コンテナ内で適切なユーザー名前空間をマップする。
3. SELinuxの有効化(必要に応じて): セキュリティレベルを高めるために、SELinuxを有効にする。
4. ログの確認と監視: コンテナの状態を確認し、問題が発生した場合は適切に対処する。
関連記事: