Zum Inhalt

auth-pam: PAM-Authentifizierung dynamisches Modul für NGINX

Erfordert den Pro-Plan (oder höher) des GetPageSpeed NGINX Extras Abonnements.

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-auth-pam
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-auth-pam

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_http_auth_pam_module.so;

Dieses Dokument beschreibt nginx-module-auth-pam v1.8.0, veröffentlicht am 14. Februar 2026.


Unternehmensgerechte PAM-Authentifizierung für NGINX

Übersicht

Dieses Modul bietet HTTP Basic Authentication über PAM (Pluggable Authentication Modules) für NGINX.

  • Vollständige Implementierung von Grund auf (kein Fork)
  • Drop-in-kompatibel mit Legacy-Konfigurationen
  • Härtung der Sicherheit, in der Produktion erprobt

Hauptmerkmale

  • HTTP Basic Auth über PAM
  • Variablenexpansion im Realm (bedingte Authentifizierung)
  • PAM-Umgebungsexport (HOST, REQUEST)
  • Authentifizierungsergebnisse in gemeinsamem Speicher cachen (für LDAP/AD-Leistung)
  • Asynchrone Authentifizierung über Thread-Pool (nicht blockierende Worker)
  • Unterstützung für dynamische Module

Konfiguration

Direktive Standard Beschreibung
auth_pam - Realm-Name für HTTP Basic Auth. Unterstützt Variablen. Auf off setzen, um zu deaktivieren.
auth_pam_service_name nginx PAM-Dienstname (entspricht /etc/pam.d/<name>)
auth_pam_set_pam_env off HOST und REQUEST in die PAM-Umgebung exportieren
auth_pam_cache_zone - Definieren Sie die gemeinsame Speicherzone: zone=name:size (nur http-Kontext)
auth_pam_cache - Authentifizierungscaching aktivieren: zone=name time=60s
auth_pam_thread_pool default Thread-Pool für asynchrone Authentifizierung (benötigt --with-threads). Auf off setzen für den synchronen Modus.

Beispiele

Grundlegende Verwendung

Schützen Sie einen Standort mit PAM-Authentifizierung:

location /secure {
    auth_pam              "Sichere Zone";
    auth_pam_service_name "nginx";
}

Erstellen Sie die PAM-Dienstdatei /etc/pam.d/nginx:

auth    required pam_unix.so
account required pam_unix.so

LDAP-Authentifizierung

Verwenden Sie das PAM-LDAP-Modul für verzeichnisbasierte Authentifizierung:

location /ldap-protected {
    auth_pam              "LDAP Zone";
    auth_pam_service_name "nginx_ldap";
}

PAM-Dienstdatei /etc/pam.d/nginx_ldap:

auth    required pam_ldap.so
account required pam_ldap.so

Auth-Caching

Cache erfolgreiche Authentifizierungen, um die Last auf PAM-Backends zu reduzieren (insbesondere nützlich für LDAP/AD):

http {
    auth_pam_cache_zone zone=pam_cache:1m;

    server {
        location /cached-auth {
            auth_pam              "Cached Zone";
            auth_pam_service_name "nginx_ldap";
            auth_pam_cache        zone=pam_cache time=60s;
        }
    }
}

Hinweise: - Nur erfolgreiche Authentifizierungen werden gecacht (fehlgeschlagene Versuche treffen immer auf PAM) - Passwörter werden in Cache-Schlüsseln SHA1-gehasht, niemals im Klartext gespeichert - Der Dienstname ist im Cache-Schlüssel enthalten, um Kollisionen zwischen Diensten zu verhindern - Empfohlene TTL: 60s (Standard), je nach Sicherheitsanforderungen anpassen

Asynchrone Authentifizierung (Thread-Pool)

Wenn NGINX mit --with-threads kompiliert wird, wird die PAM-Authentifizierung automatisch an einen Thread-Pool ausgelagert. Dies verhindert, dass langsame PAM-Backends (LDAP/AD) die Worker-Prozesse blockieren.

# Standardverhalten - verwendet automatisch den "default" Thread-Pool von NGINX
location /protected {
    auth_pam              "Eingeschränkt";
    auth_pam_service_name "nginx_ldap";
}

# Verwenden Sie einen benutzerdefinierten Thread-Pool für hochvolumige Authentifizierungen
thread_pool pam_pool threads=4 max_queue=256;

http {
    server {
        location /high-volume {
            auth_pam              "Hochvolumen-Zone";
            auth_pam_service_name "nginx_ldap";
            auth_pam_thread_pool  pam_pool;
        }
    }
}

# Zwingen Sie den synchronen Modus (asynchron deaktivieren)
location /sync-auth {
    auth_pam              "Sync Zone";
    auth_pam_service_name "nginx";
    auth_pam_thread_pool  off;
}

Hinweise: - Erfordert, dass NGINX mit --with-threads gebaut wurde - Der Cache wird vor dem Posten an den Thread-Pool überprüft (schneller Pfad für Cache-Treffer) - Gibt 503 zurück, wenn die Thread-Pool-Warteschlange voll ist

Bedingte Authentifizierung

Überspringen Sie PAM für zertifikat-authentifizierte Clients:

map $ssl_client_verify $pam_realm {
    SUCCESS "off";
    default "Eingeschränkter Bereich";
}

server {
    listen 443 ssl;
    ssl_client_certificate /etc/nginx/ca.crt;
    ssl_verify_client optional;

    location /api {
        auth_pam $pam_realm;
        auth_pam_service_name "nginx";
    }
}

Deaktivieren Sie die Authentifizierung für interne Netzwerke:

geo $pam_realm {
    default     "Eingeschränkt";
    10.0.0.0/8  "off";
}

location /internal {
    auth_pam $pam_realm;
    auth_pam_service_name "nginx";
}

PAM-Umgebung mit pam_exec

Exportieren Sie Anforderungsdetails an PAM für benutzerdefinierte Authentifizierungsskripte:

location /custom-auth {
    auth_pam              "Benutzerdefinierte Zone";
    auth_pam_service_name "nginx_exec";
    auth_pam_set_pam_env  on;
}

Wenn aktiviert, umfasst die PAM-Umgebung:

  • HOST - Anforderungs-Host-Header (z. B. localhost:8000)
  • REQUEST - Vollständige Anforderungszeile (z. B. GET /path?query HTTP/1.1)

PAM-Dienstdatei /etc/pam.d/nginx_exec:

auth required pam_exec.so /path/to/auth-script.sh
account required pam_permit.so