diff --git a/modules/50-hardening.sh b/modules/50-hardening.sh index 38d196c..382103d 100755 --- a/modules/50-hardening.sh +++ b/modules/50-hardening.sh @@ -227,6 +227,17 @@ _h_angie_config() { [[ -z "$angie_pid" ]] && angie_pid=/run/angie.pid [[ -z "$angie_err" ]] && angie_err=/var/log/angie/error.log + # locate mime.types: angie-bin/Debian ship /etc/angie/mime.types; the Arch source + # 'angie' package instead pulls it from the 'mailcap' dep at /etc/nginx/mime.types + # (and deletes its own). Pick whichever exists so 'angie -t' doesn't fail on include. + local angie_mime="" + for m in "$d/mime.types" /etc/nginx/mime.types /etc/mime.types; do + [[ -f "$m" ]] && { angie_mime="$m"; break; } + done + [[ -z "$angie_mime" ]] && { warn "no mime.types found; installing a minimal one"; _angie_install_mime "$d/mime.types"; angie_mime="$d/mime.types"; } + # the modules/ include dir must exist or the glob fails the config test + sudo_ install -d -m 0755 "$d/modules" "$d/modules/http" + # backup the original once if [[ -f "$oldcfg" && ! -f "$oldcfg.orig.bootstrap" ]]; then sudo_ cp -a "$oldcfg" "$oldcfg.orig.bootstrap" @@ -255,7 +266,7 @@ events { } http { - include /etc/angie/mime.types; + include $angie_mime; default_type application/octet-stream; log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" ' @@ -364,6 +375,24 @@ EOF # ufw already opened 80/443 in _h_ufw } +_angie_install_mime() { # dest — write a minimal mime.types if none exists on the host + sudo_ tee "$1" >/dev/null <<'EOF' +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + image/png png; + image/svg+xml svg svgz; + application/javascript js; + application/json json; + application/pdf pdf; + application/zip zip; + application/octet-stream bin exe dll so deb dmg iso img; +} +EOF +} _angie_helpers() { sudo_ tee /usr/local/bin/angie-enable >/dev/null <<'EOF' #!/usr/bin/env bash