diff --git a/openspec/changes/code-review-fix/tasks.md b/openspec/changes/code-review-fix/tasks.md index 47a18f2..fba4c14 100644 --- a/openspec/changes/code-review-fix/tasks.md +++ b/openspec/changes/code-review-fix/tasks.md @@ -53,7 +53,7 @@ ## 6. Infrastructure & Docker - [x] 6.1 `[sonnet]` Add `headers()` function to `next.config.js` with X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, Content-Security-Policy -- [ ] 6.2 `[sonnet]` Add `USER appuser` to `services/ml/Dockerfile`: create user with `useradd`, set ownership, add USER directive before CMD +- [x] 6.2 `[sonnet]` Add `USER appuser` to `services/ml/Dockerfile`: create user with `useradd`, set ownership, add USER directive before CMD - [ ] 6.3 `[haiku]` Create `.dockerignore` with `.git`, `.env`, `.env*`, `node_modules`, `.next`, `data/`, `*.md`, `__pycache__/`, `mlruns/`, `models/` - [ ] 6.4 `[haiku]` Change TA-Lib download URL to HTTPS in `services/ml/Dockerfile:10` - [ ] 6.5 `[sonnet]` Add SHA256 checksum verification for TA-Lib download in `services/ml/Dockerfile` diff --git a/services/ml/Dockerfile b/services/ml/Dockerfile index 83234d2..ad90481 100644 --- a/services/ml/Dockerfile +++ b/services/ml/Dockerfile @@ -32,5 +32,12 @@ COPY . . # Expose port for FastAPI EXPOSE 8001 +# Create non-root user and set ownership +RUN useradd -r -s /bin/false appuser +RUN chown -R appuser:appuser /app + +# Switch to non-root user +USER appuser + # Run the inference server by default CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8001"]