説明
COPY --chown で実行アカウントをファイル所有者にすると、権限によってはコードを変更できるようになります。アプリケーションが侵害された際、実行ファイルや設定も変更できると被害が広がるおそれがあります。
--chown 自体が危険な設定ではありません。非 root での実行や必要なデータ書き込みに使えるため、ファイルの用途と、ファイル・ディレクトリ・マウントの実効権限を併せて確認してください。
想定される影響
- 実行アカウントがコードを変更できると、侵害後に動作を改変されたり、悪意あるコードを残されたりするおそれがあります。
- 必要なデータディレクトリの書き込み権限まで取り除くと、アプリケーションが動作しなくなる場合があります。
対処方法
- コードと書き込み可能なデータを分離し、実行アカウントには必要なパスだけへの書き込み権限を付与してください。
- コードの所有者とモードを併せて設定し、非 root アカウントが読み取り・実行できても変更できないことを確認してください。root 所有だけでは書き込み禁止は保証されません。
例
コピーしたファイルの所有者を比較します。元のファイルモードと、実際に書き込みが必要なパスも確認してください。
変更前
dockerfile
FROM python:3.12-slim
RUN useradd -ms /bin/bash appuser
COPY --chown=appuser:appuser app /app
WORKDIR /app
USER appuser
CMD ["python", "app.py"]
変更後
dockerfile
FROM python:3.12-slim
RUN useradd -ms /bin/bash appuser
COPY app /app
WORKDIR /app
USER appuser
CMD ["python", "app.py"]
補足:
- 変更前: コピーしたファイルを appuser が所有します。実際の書き込み可否はファイルとディレクトリの権限によります。
- 変更後: 既定の root 所有でコピーし、appuser で実行します。必要な読み取り・実行権限とコードへの書き込み制限は別途確認が必要です。