docker-compose-security-test.sh 996 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #!/bin/sh
  2. set -eu
  3. repo_root=$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)
  4. cd "$repo_root"
  5. check_application_security_opt() {
  6. file=$1
  7. count=$(
  8. awk '
  9. $0 == " sub2api:" {
  10. in_application = 1
  11. next
  12. }
  13. in_application && $0 ~ /^ [A-Za-z0-9_-]+:$/ {
  14. in_application = 0
  15. }
  16. in_application && $0 == " security_opt:" {
  17. in_security_opt = 1
  18. next
  19. }
  20. in_application && in_security_opt && $0 == " - no-new-privileges:true" {
  21. count++
  22. }
  23. END { print count + 0 }
  24. ' "$file"
  25. )
  26. if [ "$count" -ne 1 ]; then
  27. printf '%s must enable no-new-privileges exactly once for the sub2api service\n' "$file" >&2
  28. exit 1
  29. fi
  30. }
  31. for compose_file in \
  32. deploy/docker-compose.yml \
  33. deploy/docker-compose.local.yml \
  34. deploy/docker-compose.standalone.yml \
  35. deploy/docker-compose.dev.yml
  36. do
  37. check_application_security_opt "$compose_file"
  38. done
  39. printf 'docker compose security test passed\n'