@hybridlabor-api/aos 4.8.0 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/.agents/agents.md +1 -1
  2. package/.agents/nodes.json +1 -1
  3. package/.agents/vendor-manifest.json +23 -1
  4. package/.claude/agents/godmode-media-eventtech.md +1 -1
  5. package/.claude/hooks/conventional-commits.mjs +125 -0
  6. package/.claude/hooks/env-file-protection.mjs +105 -0
  7. package/.claude/hooks/go-gate.mjs +101 -81
  8. package/.claude/settings.json +13 -0
  9. package/.opencode/agents/godmode-media-eventtech.md +1 -1
  10. package/.opencode/plugins/bdb-aos.js +31 -4
  11. package/README.de.md +1 -1
  12. package/README.md +1 -1
  13. package/README.pt.md +1 -1
  14. package/THIRD_PARTY_NOTICES.md +88 -0
  15. package/docs/skills_table.md +1 -1
  16. package/installer.js +174 -46
  17. package/package.json +6 -2
  18. package/packages/aos-cli/README.md +80 -0
  19. package/packages/aos-cli/bin/aos-cli.mjs +134 -0
  20. package/packages/aos-cli/core-skills.json +12 -0
  21. package/packages/aos-cli/extensions/aos.ts +321 -0
  22. package/packages/aos-cli/package-lock.json +1923 -0
  23. package/packages/aos-cli/package.json +29 -0
  24. package/packages/aos-cli/scripts/check-theme.mjs +63 -0
  25. package/packages/aos-cli/themes/aos.json +97 -0
  26. package/scripts/build-plugin-manifest.mjs +131 -0
  27. package/scripts/validate-skills.mjs +81 -6
  28. package/skills/basic/ao-orchestrator/SKILL.md +116 -0
  29. package/skills/global_config/agenttrail/SKILL.md +6 -1
  30. package/skills/global_config/ask-tim/SKILL.md +4 -4
  31. package/skills/global_config/bash-script-generator/SKILL.md +201 -0
  32. package/skills/global_config/bash-script-generator/assets/templates/standard-template.sh +96 -0
  33. package/skills/global_config/bash-script-generator/docs/bash-scripting-guide.md +729 -0
  34. package/skills/global_config/bash-script-generator/docs/generation-best-practices.md +193 -0
  35. package/skills/global_config/bash-script-generator/docs/script-patterns.md +566 -0
  36. package/skills/global_config/bash-script-generator/docs/text-processing-guide.md +437 -0
  37. package/skills/global_config/bash-script-generator/examples/log-analyzer.sh +92 -0
  38. package/skills/global_config/bash-script-generator/scripts/generate_script_template.sh +123 -0
  39. package/skills/global_config/bash-script-generator/scripts/run_ci_checks.sh +172 -0
  40. package/skills/global_config/bash-script-generator/scripts/test_generator.sh +413 -0
  41. package/skills/global_config/bash-script-validator/SKILL.md +249 -0
  42. package/skills/global_config/bash-script-validator/docs/awk-reference.md +449 -0
  43. package/skills/global_config/bash-script-validator/docs/bash-reference.md +468 -0
  44. package/skills/global_config/bash-script-validator/docs/common-mistakes.md +623 -0
  45. package/skills/global_config/bash-script-validator/docs/grep-reference.md +395 -0
  46. package/skills/global_config/bash-script-validator/docs/regex-reference.md +391 -0
  47. package/skills/global_config/bash-script-validator/docs/sed-reference.md +454 -0
  48. package/skills/global_config/bash-script-validator/docs/shell-reference.md +463 -0
  49. package/skills/global_config/bash-script-validator/docs/shellcheck-reference.md +399 -0
  50. package/skills/global_config/bash-script-validator/examples/bad-bash.sh +55 -0
  51. package/skills/global_config/bash-script-validator/examples/bad-shell.sh +54 -0
  52. package/skills/global_config/bash-script-validator/examples/good-bash.sh +71 -0
  53. package/skills/global_config/bash-script-validator/examples/good-shell.sh +69 -0
  54. package/skills/global_config/bash-script-validator/scripts/run_ci_checks.sh +23 -0
  55. package/skills/global_config/bash-script-validator/scripts/shellcheck_wrapper.sh +174 -0
  56. package/skills/global_config/bash-script-validator/scripts/test_validate.sh +446 -0
  57. package/skills/global_config/bash-script-validator/scripts/validate.sh +512 -0
  58. package/skills/global_config/ci-pipeline/SKILL.md +135 -0
  59. package/skills/global_config/dispatching-parallel-agents/SKILL.md +170 -0
  60. package/skills/global_config/dockerfile-generator/SKILL.md +1038 -0
  61. package/skills/global_config/dockerfile-generator/examples/example.dockerignore +95 -0
  62. package/skills/global_config/dockerfile-generator/examples/golang-distroless.Dockerfile +34 -0
  63. package/skills/global_config/dockerfile-generator/examples/java-springboot.Dockerfile +45 -0
  64. package/skills/global_config/dockerfile-generator/examples/nextjs-production.Dockerfile +49 -0
  65. package/skills/global_config/dockerfile-generator/examples/nodejs-multistage.Dockerfile +55 -0
  66. package/skills/global_config/dockerfile-generator/examples/python-fastapi.Dockerfile +48 -0
  67. package/skills/global_config/dockerfile-generator/references/language_specific_guides.md +510 -0
  68. package/skills/global_config/dockerfile-generator/references/multistage_builds.md +570 -0
  69. package/skills/global_config/dockerfile-generator/references/optimization_patterns.md +492 -0
  70. package/skills/global_config/dockerfile-generator/references/security_best_practices.md +375 -0
  71. package/skills/global_config/dockerfile-generator/scripts/generate_dockerignore.sh +199 -0
  72. package/skills/global_config/dockerfile-generator/scripts/generate_golang.sh +172 -0
  73. package/skills/global_config/dockerfile-generator/scripts/generate_java.sh +185 -0
  74. package/skills/global_config/dockerfile-generator/scripts/generate_nodejs.sh +279 -0
  75. package/skills/global_config/dockerfile-generator/scripts/generate_python.sh +218 -0
  76. package/skills/global_config/dockerfile-generator/scripts/test_generator.sh +210 -0
  77. package/skills/global_config/dockerfile-validator/SKILL.md +300 -0
  78. package/skills/global_config/dockerfile-validator/examples/.dockerignore.example +34 -0
  79. package/skills/global_config/dockerfile-validator/examples/bad-example.Dockerfile +37 -0
  80. package/skills/global_config/dockerfile-validator/examples/golang-distroless.Dockerfile +50 -0
  81. package/skills/global_config/dockerfile-validator/examples/good-example.Dockerfile +52 -0
  82. package/skills/global_config/dockerfile-validator/examples/python-optimized.Dockerfile +53 -0
  83. package/skills/global_config/dockerfile-validator/examples/security-issues.Dockerfile +42 -0
  84. package/skills/global_config/dockerfile-validator/references/docker_best_practices.md +348 -0
  85. package/skills/global_config/dockerfile-validator/references/optimization_guide.md +473 -0
  86. package/skills/global_config/dockerfile-validator/references/security_checklist.md +208 -0
  87. package/skills/global_config/dockerfile-validator/scripts/dockerfile-validate.sh +699 -0
  88. package/skills/global_config/dockerfile-validator/scripts/test_validate.sh +35 -0
  89. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn-lock-read.Dockerfile +6 -0
  90. package/skills/global_config/dockerfile-validator/tests/fixtures/copy-before-yarn.Dockerfile +6 -0
  91. package/skills/global_config/dockerfile-validator/tests/fixtures/from-platform-nonroot.Dockerfile +7 -0
  92. package/skills/global_config/dockerfile-validator/tests/test_regression.sh +164 -0
  93. package/skills/global_config/finishing-a-development-branch/SKILL.md +228 -0
  94. package/skills/global_config/github-actions-generator/SKILL.md +353 -0
  95. package/skills/global_config/github-actions-generator/assets/templates/action/composite/action.yml +82 -0
  96. package/skills/global_config/github-actions-generator/assets/templates/action/docker/Dockerfile +25 -0
  97. package/skills/global_config/github-actions-generator/assets/templates/action/docker/action.yml +42 -0
  98. package/skills/global_config/github-actions-generator/assets/templates/action/docker/entrypoint.sh +27 -0
  99. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/action.yml +33 -0
  100. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/index.js +50 -0
  101. package/skills/global_config/github-actions-generator/assets/templates/action/javascript/package.json +27 -0
  102. package/skills/global_config/github-actions-generator/assets/templates/workflow/basic_workflow.yml +242 -0
  103. package/skills/global_config/github-actions-generator/assets/templates/workflow/reusable_workflow.yml +106 -0
  104. package/skills/global_config/github-actions-generator/examples/README.md +147 -0
  105. package/skills/global_config/github-actions-generator/examples/actions/setup-node-cached/action.yml +93 -0
  106. package/skills/global_config/github-actions-generator/examples/caching/docker-buildkit.yml +256 -0
  107. package/skills/global_config/github-actions-generator/examples/security/dependency-review.yml +62 -0
  108. package/skills/global_config/github-actions-generator/examples/security/sbom-attestation.yml +119 -0
  109. package/skills/global_config/github-actions-generator/examples/triggers/chatops-commands.yml +475 -0
  110. package/skills/global_config/github-actions-generator/examples/triggers/repository-dispatch.yml +418 -0
  111. package/skills/global_config/github-actions-generator/examples/triggers/workflow-orchestration.yml +404 -0
  112. package/skills/global_config/github-actions-generator/examples/workflows/docker-build-push.yml +68 -0
  113. package/skills/global_config/github-actions-generator/examples/workflows/go-ci.yml +161 -0
  114. package/skills/global_config/github-actions-generator/examples/workflows/monorepo-ci.yml +340 -0
  115. package/skills/global_config/github-actions-generator/examples/workflows/multi-environment-deploy.yml +406 -0
  116. package/skills/global_config/github-actions-generator/examples/workflows/nodejs-ci.yml +122 -0
  117. package/skills/global_config/github-actions-generator/examples/workflows/python-ci.yml +157 -0
  118. package/skills/global_config/github-actions-generator/examples/workflows/scheduled-tasks.yml +376 -0
  119. package/skills/global_config/github-actions-generator/references/advanced-triggers.md +917 -0
  120. package/skills/global_config/github-actions-generator/references/best-practices.md +755 -0
  121. package/skills/global_config/github-actions-generator/references/common-actions.md +715 -0
  122. package/skills/global_config/github-actions-generator/references/custom-actions.md +320 -0
  123. package/skills/global_config/github-actions-generator/references/expressions-and-contexts.md +688 -0
  124. package/skills/global_config/github-actions-generator/references/modern-features.md +421 -0
  125. package/skills/global_config/github-actions-generator/scripts/test_generator.sh +344 -0
  126. package/skills/global_config/github-actions-templates/SKILL.md +7 -0
  127. package/skills/global_config/github-actions-validator/SKILL.md +576 -0
  128. package/skills/global_config/github-actions-validator/examples/README.md +88 -0
  129. package/skills/global_config/github-actions-validator/examples/outdated-versions.yml +76 -0
  130. package/skills/global_config/github-actions-validator/examples/valid-ci.yml +79 -0
  131. package/skills/global_config/github-actions-validator/examples/with-errors.yml +47 -0
  132. package/skills/global_config/github-actions-validator/references/act_usage.md +233 -0
  133. package/skills/global_config/github-actions-validator/references/action_versions.md +122 -0
  134. package/skills/global_config/github-actions-validator/references/actionlint_usage.md +343 -0
  135. package/skills/global_config/github-actions-validator/references/common_errors.md +512 -0
  136. package/skills/global_config/github-actions-validator/references/modern_features.md +384 -0
  137. package/skills/global_config/github-actions-validator/references/runners.md +317 -0
  138. package/skills/global_config/github-actions-validator/scripts/install_tools.sh +113 -0
  139. package/skills/global_config/github-actions-validator/scripts/validate_workflow.sh +910 -0
  140. package/skills/global_config/github-actions-validator/tests/test_validate_workflow.sh +237 -0
  141. package/skills/global_config/makefile-generator/SKILL.md +614 -0
  142. package/skills/global_config/makefile-generator/assets/templates/.gitkeep +1 -0
  143. package/skills/global_config/makefile-generator/docs/makefile-structure.md +530 -0
  144. package/skills/global_config/makefile-generator/docs/optimization-guide.md +784 -0
  145. package/skills/global_config/makefile-generator/docs/patterns-guide.md +642 -0
  146. package/skills/global_config/makefile-generator/docs/security-guide.md +361 -0
  147. package/skills/global_config/makefile-generator/docs/targets-guide.md +642 -0
  148. package/skills/global_config/makefile-generator/docs/variables-guide.md +596 -0
  149. package/skills/global_config/makefile-generator/scripts/add_standard_targets.sh +539 -0
  150. package/skills/global_config/makefile-generator/scripts/generate_makefile_template.sh +690 -0
  151. package/skills/global_config/makefile-generator/test/test_helper_scripts.sh +190 -0
  152. package/skills/global_config/makefile-validator/SKILL.md +244 -0
  153. package/skills/global_config/makefile-validator/docs/bake-tool.md +1000 -0
  154. package/skills/global_config/makefile-validator/docs/best-practices.md +858 -0
  155. package/skills/global_config/makefile-validator/docs/common-mistakes.md +944 -0
  156. package/skills/global_config/makefile-validator/examples/bad-makefile.mk +77 -0
  157. package/skills/global_config/makefile-validator/examples/good-makefile.mk +103 -0
  158. package/skills/global_config/makefile-validator/scripts/test_validate.sh +382 -0
  159. package/skills/global_config/makefile-validator/scripts/validate_makefile.sh +712 -0
  160. package/skills/global_config/{MCP_Manage → mcp-manage}/SKILL.md +3 -3
  161. package/skills/global_config/requesting-code-review/SKILL.md +98 -0
  162. package/skills/global_config/requesting-code-review/code-reviewer.md +198 -0
  163. package/skills/global_config/using-git-worktrees/SKILL.md +170 -0
  164. package/skills/global_config/verification-before-completion/SKILL.md +123 -0
  165. package/skills/global_config/writing-plans/SKILL.md +126 -46
  166. package/skills/global_config/writing-plans-legacy/SKILL.md +139 -0
@@ -0,0 +1,375 @@
1
+ # Dockerfile Security Best Practices
2
+
3
+ ## Overview
4
+
5
+ This guide provides comprehensive security best practices for writing secure Dockerfiles. Security should be a primary consideration when containerizing applications.
6
+
7
+ ## Table of Contents
8
+
9
+ 1. [Base Image Security](#base-image-security)
10
+ 2. [User Management](#user-management)
11
+ 3. [Secrets Management](#secrets-management)
12
+ 4. [Dependency Management](#dependency-management)
13
+ 5. [Attack Surface Reduction](#attack-surface-reduction)
14
+ 6. [Vulnerability Scanning](#vulnerability-scanning)
15
+
16
+ ## Base Image Security
17
+
18
+ ### Use Specific Tags
19
+
20
+ **Problem:** Using `:latest` tag can lead to unpredictable builds and security vulnerabilities.
21
+
22
+ ```dockerfile
23
+ # Bad - Unpredictable, may pull vulnerable versions
24
+ FROM node:latest
25
+
26
+ # Good - Specific version
27
+ FROM node:20-alpine
28
+
29
+ # Better - Specific version with digest for reproducibility
30
+ FROM node:20-alpine@sha256:2c6c59cf4d34d4f937ddfcf33bab9d8bbad8658d1b9de7b97622566a52167f5b
31
+ ```
32
+
33
+ ### Use Minimal Base Images
34
+
35
+ **Principle:** Smaller images have fewer attack vectors.
36
+
37
+ ```dockerfile
38
+ # Large attack surface (>1GB)
39
+ FROM ubuntu:22.04
40
+
41
+ # Medium attack surface (~200MB)
42
+ FROM node:20
43
+
44
+ # Small attack surface (~50MB)
45
+ FROM node:20-alpine
46
+
47
+ # Minimal attack surface (~2MB for Go apps)
48
+ FROM gcr.io/distroless/static-debian12
49
+ ```
50
+
51
+ **Recommended Base Images:**
52
+ - **Alpine Linux:** Minimal Linux distribution (~5MB base)
53
+ - **Distroless:** Google's minimal container images (no shell, package managers)
54
+ - **Scratch:** Empty base image (for static binaries only)
55
+
56
+ ### Scan Base Images
57
+
58
+ ```bash
59
+ # Use Trivy to scan base images
60
+ trivy image node:20-alpine
61
+
62
+ # Use Snyk
63
+ snyk container test node:20-alpine
64
+
65
+ # Use Docker Scout
66
+ docker scout cves node:20-alpine
67
+ ```
68
+
69
+ ## User Management
70
+
71
+ ### Never Run as Root
72
+
73
+ **Problem:** Running as root gives attackers full system access if container is compromised.
74
+
75
+ ```dockerfile
76
+ # Bad - Runs as root (default)
77
+ FROM node:20-alpine
78
+ COPY . /app
79
+ CMD ["node", "server.js"]
80
+
81
+ # Good - Creates and uses non-root user
82
+ FROM node:20-alpine
83
+ RUN addgroup -g 1001 -S nodejs && \
84
+ adduser -S nodejs -u 1001
85
+ COPY --chown=nodejs:nodejs . /app
86
+ USER nodejs
87
+ CMD ["node", "server.js"]
88
+ ```
89
+
90
+ ### User Creation Patterns
91
+
92
+ **Alpine Linux:**
93
+ ```dockerfile
94
+ RUN addgroup -g 1001 -S appgroup && \
95
+ adduser -S app -u 1001 -G appgroup
96
+ USER app
97
+ ```
98
+
99
+ **Debian/Ubuntu:**
100
+ ```dockerfile
101
+ RUN useradd -m -u 1001 app
102
+ USER app
103
+ ```
104
+
105
+ **Distroless (built-in nonroot user):**
106
+ ```dockerfile
107
+ FROM gcr.io/distroless/static-debian12
108
+ USER nonroot:nonroot
109
+ ```
110
+
111
+ ### Set Proper File Permissions
112
+
113
+ ```dockerfile
114
+ # Copy with ownership
115
+ COPY --chown=app:app . /app
116
+
117
+ # Ensure executables have correct permissions
118
+ RUN chmod +x /app/entrypoint.sh
119
+ ```
120
+
121
+ ## Secrets Management
122
+
123
+ ### Never Hardcode Secrets
124
+
125
+ ```dockerfile
126
+ # Bad - Hardcoded secrets
127
+ ENV API_KEY=sk_live_abc123
128
+ ENV DATABASE_PASSWORD=password123
129
+
130
+ # Good - Use runtime environment variables
131
+ ENV API_KEY=""
132
+ ENV DATABASE_PASSWORD=""
133
+ ```
134
+
135
+ ### Use Build Secrets (BuildKit)
136
+
137
+ ```dockerfile
138
+ # Mount secrets during build (never stored in image layers)
139
+ # syntax=docker/dockerfile:1
140
+ FROM alpine
141
+ RUN --mount=type=secret,id=api_key \
142
+ API_KEY=$(cat /run/secrets/api_key) && \
143
+ echo "Configuring with API key..." && \
144
+ # Use API_KEY here
145
+ rm -f /run/secrets/api_key
146
+ ```
147
+
148
+ **Build command:**
149
+ ```bash
150
+ docker build --secret id=api_key,src=.env .
151
+ ```
152
+
153
+ ### Avoid Secrets in Layers
154
+
155
+ ```dockerfile
156
+ # Bad - Secret remains in image history
157
+ FROM alpine
158
+ RUN echo "SECRET_KEY=abc123" > /app/config
159
+ RUN rm /app/config # Secret still in previous layer!
160
+
161
+ # Good - Use multi-stage builds or build secrets
162
+ FROM alpine
163
+ RUN --mount=type=secret,id=config \
164
+ cat /run/secrets/config > /app/config && \
165
+ process_config && \
166
+ rm /app/config
167
+ ```
168
+
169
+ ## Dependency Management
170
+
171
+ ### Pin Dependency Versions
172
+
173
+ ```dockerfile
174
+ # Bad - Unpinned versions
175
+ RUN apt-get install -y curl git
176
+
177
+ # Good - Pinned versions
178
+ RUN apt-get install -y \
179
+ curl=7.81.0-1ubuntu1.16 \
180
+ git=1:2.34.1-1ubuntu1.11
181
+ ```
182
+
183
+ **Node.js:**
184
+ ```dockerfile
185
+ # Use package-lock.json or yarn.lock
186
+ COPY package*.json ./
187
+ RUN npm ci # Uses lock file
188
+ ```
189
+
190
+ **Python:**
191
+ ```dockerfile
192
+ # Pin versions in requirements.txt
193
+ COPY requirements.txt .
194
+ RUN pip install --no-cache-dir -r requirements.txt
195
+ ```
196
+
197
+ **Go:**
198
+ ```dockerfile
199
+ # go.sum ensures reproducible builds
200
+ COPY go.mod go.sum ./
201
+ RUN go mod download
202
+ ```
203
+
204
+ ### Clean Package Manager Caches
205
+
206
+ ```dockerfile
207
+ # Alpine (apk)
208
+ RUN apk add --no-cache curl
209
+
210
+ # Debian/Ubuntu (apt)
211
+ RUN apt-get update && apt-get install -y --no-install-recommends \
212
+ curl \
213
+ && rm -rf /var/lib/apt/lists/*
214
+
215
+ # Node.js (npm)
216
+ RUN npm ci && npm cache clean --force
217
+
218
+ # Python (pip)
219
+ RUN pip install --no-cache-dir -r requirements.txt
220
+ ```
221
+
222
+ ## Attack Surface Reduction
223
+
224
+ ### Minimize Installed Packages
225
+
226
+ ```dockerfile
227
+ # Bad - Installs unnecessary packages
228
+ RUN apt-get install -y \
229
+ curl \
230
+ wget \
231
+ vim \
232
+ sudo \
233
+ ssh
234
+
235
+ # Good - Only essential packages
236
+ RUN apt-get install -y --no-install-recommends \
237
+ curl \
238
+ ca-certificates
239
+ ```
240
+
241
+ ### Use Multi-Stage Builds
242
+
243
+ ```dockerfile
244
+ # Build stage - can include build tools
245
+ FROM golang:1.21-alpine AS builder
246
+ RUN apk add --no-cache git make
247
+ COPY . .
248
+ RUN make build
249
+
250
+ # Production stage - minimal runtime
251
+ FROM alpine:3.21
252
+ COPY --from=builder /app/binary /app/binary
253
+ CMD ["/app/binary"]
254
+ ```
255
+
256
+ ### Remove Build Dependencies
257
+
258
+ ```dockerfile
259
+ # Install, use, and remove in same layer
260
+ RUN apk add --no-cache --virtual .build-deps \
261
+ gcc \
262
+ musl-dev \
263
+ && pip install --no-cache-dir -r requirements.txt \
264
+ && apk del .build-deps
265
+ ```
266
+
267
+ ### Disable Unnecessary Services
268
+
269
+ ```dockerfile
270
+ # Don't include SSH, telnet, or other services
271
+ # Use docker exec for debugging instead
272
+ ```
273
+
274
+ ## Network Security
275
+
276
+ ### Expose Only Necessary Ports
277
+
278
+ ```dockerfile
279
+ # Document exposed ports
280
+ EXPOSE 8080
281
+
282
+ # Don't expose unnecessary ports
283
+ # Bad: EXPOSE 22 (SSH)
284
+ # Bad: EXPOSE 3306 (MySQL in app container)
285
+ ```
286
+
287
+ ### Use Non-Privileged Ports
288
+
289
+ ```dockerfile
290
+ # Good - Use port > 1024 (doesn't require root)
291
+ EXPOSE 8080
292
+
293
+ # Avoid privileged ports (< 1024)
294
+ # EXPOSE 80 # Requires root
295
+ ```
296
+
297
+ ## Vulnerability Scanning
298
+
299
+ ### Integrate Scanning into CI/CD
300
+
301
+ ```yaml
302
+ # GitHub Actions example
303
+ - name: Scan Docker image
304
+ uses: aquasecurity/trivy-action@master
305
+ with:
306
+ image-ref: myapp:latest
307
+ format: 'sarif'
308
+ output: 'trivy-results.sarif'
309
+ ```
310
+
311
+ ### Regular Image Updates
312
+
313
+ ```dockerfile
314
+ # Rebuild images regularly to get security patches
315
+ FROM node:20-alpine # Alpine releases security updates frequently
316
+ ```
317
+
318
+ ### Scan for Secrets
319
+
320
+ ```bash
321
+ # Use gitleaks or trufflehog
322
+ docker run -v $(pwd):/path zricethezav/gitleaks:latest detect --source=/path
323
+
324
+ # Use hadolint to detect some secret patterns
325
+ hadolint Dockerfile
326
+ ```
327
+
328
+ ## Security Checklist
329
+
330
+ - [ ] Use specific base image tags (no `:latest`)
331
+ - [ ] Use minimal base images (Alpine, distroless)
332
+ - [ ] Create and use non-root user
333
+ - [ ] Never hardcode secrets
334
+ - [ ] Use build secrets for sensitive data
335
+ - [ ] Pin dependency versions
336
+ - [ ] Clean package manager caches
337
+ - [ ] Minimize installed packages
338
+ - [ ] Use multi-stage builds
339
+ - [ ] Expose only necessary ports
340
+ - [ ] Scan images for vulnerabilities
341
+ - [ ] Update base images regularly
342
+ - [ ] Use HEALTHCHECK for services
343
+ - [ ] Validate with hadolint and Checkov
344
+
345
+ ## Common Vulnerabilities
346
+
347
+ ### CVE-Related Issues
348
+
349
+ 1. **Outdated base images:** Rebuild regularly
350
+ 2. **Known vulnerable packages:** Scan and update
351
+ 3. **Missing security patches:** Use latest patch versions
352
+
353
+ ### Configuration Issues
354
+
355
+ 1. **Running as root:** Create non-root user
356
+ 2. **Exposed secrets:** Use build secrets or runtime config
357
+ 3. **Unnecessary packages:** Minimize attack surface
358
+ 4. **Missing health checks:** Add HEALTHCHECK directive
359
+
360
+ ## Tools for Security
361
+
362
+ - **Trivy:** Comprehensive vulnerability scanner
363
+ - **Snyk:** Security scanning and monitoring
364
+ - **Checkov:** Policy-as-code security scanning
365
+ - **hadolint:** Dockerfile linting with security rules
366
+ - **Docker Scout:** Docker's official security tool
367
+ - **Clair:** Container vulnerability analysis
368
+ - **Anchore:** Container security and compliance
369
+
370
+ ## References
371
+
372
+ - [Docker Security Best Practices](https://docs.docker.com/develop/security-best-practices/)
373
+ - [CIS Docker Benchmark](https://www.cisecurity.org/benchmark/docker)
374
+ - [OWASP Docker Security Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html)
375
+ - [Snyk Docker Security Best Practices](https://snyk.io/learn/docker-security/)
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env bash
2
+ # Generate a comprehensive .dockerignore file
3
+
4
+ set -euo pipefail
5
+
6
+ # Default values
7
+ OUTPUT_FILE="${OUTPUT_FILE:-.dockerignore}"
8
+ LANGUAGE="${LANGUAGE:-generic}"
9
+
10
+ # Usage
11
+ usage() {
12
+ cat <<EOF
13
+ Usage: $0 [OPTIONS]
14
+
15
+ Generate a comprehensive .dockerignore file.
16
+
17
+ OPTIONS:
18
+ -l, --language LANG Language: nodejs, python, go, java, generic (default: generic)
19
+ -o, --output FILE Output file (default: .dockerignore)
20
+ -h, --help Show this help message
21
+
22
+ EXAMPLES:
23
+ # Generic .dockerignore
24
+ $0
25
+
26
+ # Node.js specific
27
+ $0 --language nodejs
28
+
29
+ # Python specific
30
+ $0 --language python
31
+
32
+ EOF
33
+ exit 0
34
+ }
35
+
36
+ # Parse arguments
37
+ while [[ $# -gt 0 ]]; do
38
+ case $1 in
39
+ -l|--language)
40
+ LANGUAGE="$2"
41
+ shift 2
42
+ ;;
43
+ -o|--output)
44
+ OUTPUT_FILE="$2"
45
+ shift 2
46
+ ;;
47
+ -h|--help)
48
+ usage
49
+ ;;
50
+ *)
51
+ echo "Unknown option: $1"
52
+ usage
53
+ ;;
54
+ esac
55
+ done
56
+
57
+ # Validate language parameter
58
+ case "$LANGUAGE" in
59
+ nodejs|python|go|java|generic) ;;
60
+ *)
61
+ echo "Warning: Unknown language '$LANGUAGE'. Supported: nodejs, python, go, java, generic. Falling back to 'generic'." >&2
62
+ LANGUAGE="generic"
63
+ ;;
64
+ esac
65
+
66
+ # Generate base .dockerignore
67
+ cat > "$OUTPUT_FILE" <<'EOF'
68
+ # Git
69
+ .git
70
+ .gitignore
71
+ .gitattributes
72
+
73
+ # CI/CD
74
+ .github
75
+ .gitlab-ci.yml
76
+ .travis.yml
77
+ .circleci
78
+ Jenkinsfile
79
+
80
+ # Documentation
81
+ README.md
82
+ CHANGELOG.md
83
+ CONTRIBUTING.md
84
+ LICENSE
85
+ *.md
86
+ docs/
87
+
88
+ # Docker
89
+ Dockerfile*
90
+ docker-compose*.yml
91
+ .dockerignore
92
+
93
+ # Environment
94
+ .env
95
+ .env.*
96
+ *.local
97
+ .envrc
98
+
99
+ # Logs
100
+ logs/
101
+ *.log
102
+
103
+ # IDE
104
+ .vscode/
105
+ .idea/
106
+ *.swp
107
+ *.swo
108
+ *~
109
+ .DS_Store
110
+ *.iml
111
+
112
+ # Testing
113
+ coverage/
114
+ .coverage
115
+ test-results/
116
+ *.test
117
+
118
+ EOF
119
+
120
+ # Add language-specific patterns
121
+ case "$LANGUAGE" in
122
+ nodejs)
123
+ cat >> "$OUTPUT_FILE" <<'EOF'
124
+ # Node.js
125
+ node_modules/
126
+ npm-debug.log*
127
+ yarn-debug.log*
128
+ yarn-error.log*
129
+ .npm
130
+ .yarn
131
+ .pnp.*
132
+ dist/
133
+ build/
134
+
135
+ EOF
136
+ ;;
137
+ python)
138
+ cat >> "$OUTPUT_FILE" <<'EOF'
139
+ # Python
140
+ __pycache__/
141
+ *.py[cod]
142
+ *$py.class
143
+ *.so
144
+ .Python
145
+ venv/
146
+ .venv/
147
+ env/
148
+ ENV/
149
+ pip-log.txt
150
+ pip-delete-this-directory.txt
151
+ .pytest_cache/
152
+ .tox/
153
+ *.egg-info/
154
+ dist/
155
+ build/
156
+
157
+ EOF
158
+ ;;
159
+ go)
160
+ cat >> "$OUTPUT_FILE" <<'EOF'
161
+ # Go
162
+ vendor/
163
+ *.exe
164
+ *.test
165
+ *.out
166
+ go.work
167
+ go.work.sum
168
+
169
+ EOF
170
+ ;;
171
+ java)
172
+ cat >> "$OUTPUT_FILE" <<'EOF'
173
+ # Java
174
+ target/
175
+ *.class
176
+ *.jar
177
+ *.war
178
+ *.ear
179
+ .gradle/
180
+ build/
181
+ .mvn/
182
+ !.mvn/wrapper/maven-wrapper.jar
183
+
184
+ EOF
185
+ ;;
186
+ generic)
187
+ cat >> "$OUTPUT_FILE" <<'EOF'
188
+ # Build artifacts
189
+ dist/
190
+ build/
191
+ target/
192
+ out/
193
+
194
+ EOF
195
+ ;;
196
+ esac
197
+
198
+ echo "✓ Generated .dockerignore: $OUTPUT_FILE"
199
+ echo " Language: $LANGUAGE"