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. ログの確認と監視: コンテナの状態を確認し、問題が発生した場合は適切に対処する。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ