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