auth-pam: Module dynamique d'authentification PAM pour NGINX
Nécessite le plan Pro (ou supérieur) de l'abonnement GetPageSpeed NGINX Extras.
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_auth_pam_module.so;
Ce document décrit nginx-module-auth-pam v1.8.0 publié le 14 février 2026.
Authentification PAM de niveau entreprise pour NGINX
Vue d'ensemble
Ce module fournit une authentification HTTP Basic via PAM (Pluggable Authentication Modules) pour NGINX.
- Mise en œuvre complète de A à Z (pas un fork)
- Compatible avec les configurations héritées
- Sécurité renforcée, éprouvée en production
Caractéristiques clés
- Authentification HTTP Basic via PAM
- Expansion de variables dans le domaine (authentification conditionnelle)
- Exportation d'environnement PAM (HOST, REQUEST)
- Mise en cache des résultats d'authentification en mémoire partagée (pour les performances LDAP/AD)
- Authentification asynchrone via un pool de threads (travailleurs non bloquants)
- Support des modules dynamiques
Configuration
| Directive | Par défaut | Description |
|---|---|---|
auth_pam |
- | Nom du domaine pour l'authentification HTTP Basic. Prend en charge les variables. Réglez sur off pour désactiver. |
auth_pam_service_name |
nginx |
Nom du service PAM (correspond à /etc/pam.d/<name>) |
auth_pam_set_pam_env |
off |
Exporter HOST et REQUEST vers l'environnement PAM |
auth_pam_cache_zone |
- | Définir la zone de mémoire partagée : zone=name:size (contexte http uniquement) |
auth_pam_cache |
- | Activer la mise en cache d'authentification : zone=name time=60s |
auth_pam_thread_pool |
default |
Pool de threads pour l'authentification asynchrone (nécessite --with-threads). Réglez sur off pour le mode synchrone. |
Exemples
Utilisation de base
Protégez un emplacement avec l'authentification PAM :
location /secure {
auth_pam "Zone Sécurisée";
auth_pam_service_name "nginx";
}
Créez le fichier de service PAM /etc/pam.d/nginx :
auth required pam_unix.so
account required pam_unix.so
Authentification LDAP
Utilisez le module PAM LDAP pour l'authentification basée sur un annuaire :
location /ldap-protected {
auth_pam "Zone LDAP";
auth_pam_service_name "nginx_ldap";
}
Fichier de service PAM /etc/pam.d/nginx_ldap :
auth required pam_ldap.so
account required pam_ldap.so
Mise en cache d'authentification
Mettez en cache les authentifications réussies pour réduire la charge sur les backends PAM (particulièrement utile pour LDAP/AD) :
http {
auth_pam_cache_zone zone=pam_cache:1m;
server {
location /cached-auth {
auth_pam "Zone Mise en Cache";
auth_pam_service_name "nginx_ldap";
auth_pam_cache zone=pam_cache time=60s;
}
}
}
Remarques : - Seules les authentifications réussies sont mises en cache (les tentatives échouées touchent toujours PAM) - Les mots de passe sont hachés en SHA1 dans les clés de cache, jamais stockés en texte clair - Le nom du service est inclus dans la clé de cache pour éviter les collisions entre services - TTL recommandé : 60s (par défaut), ajustez en fonction des exigences de sécurité
Authentification asynchrone (Pool de Threads)
Lorsque NGINX est compilé avec --with-threads, l'authentification PAM est automatiquement déchargée vers un pool de threads. Cela empêche les backends PAM lents (LDAP/AD) de bloquer les processus de travail.
# Comportement par défaut - utilise automatiquement le pool de threads "default" de NGINX
location /protected {
auth_pam "Restreint";
auth_pam_service_name "nginx_ldap";
}
# Utilisez un pool de threads personnalisé pour une authentification à fort volume
thread_pool pam_pool threads=4 max_queue=256;
http {
server {
location /high-volume {
auth_pam "Zone à Fort Volume";
auth_pam_service_name "nginx_ldap";
auth_pam_thread_pool pam_pool;
}
}
}
# Forcer le mode synchrone (désactiver l'asynchrone)
location /sync-auth {
auth_pam "Zone Synchrone";
auth_pam_service_name "nginx";
auth_pam_thread_pool off;
}
Remarques :
- Nécessite que NGINX soit construit avec --with-threads
- Le cache est vérifié avant l'envoi au pool de threads (chemin rapide pour les hits de cache)
- Renvoie 503 si la file d'attente du pool de threads est pleine
Authentification conditionnelle
Ignorez PAM pour les clients authentifiés par certificat :
map $ssl_client_verify $pam_realm {
SUCCESS "off";
default "Zone Restreinte";
}
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";
}
}
Désactivez l'authentification pour les réseaux internes :
geo $pam_realm {
default "Restreint";
10.0.0.0/8 "off";
}
location /internal {
auth_pam $pam_realm;
auth_pam_service_name "nginx";
}
Environnement PAM avec pam_exec
Exportez les détails de la requête vers PAM pour des scripts d'authentification personnalisés :
location /custom-auth {
auth_pam "Zone Personnalisée";
auth_pam_service_name "nginx_exec";
auth_pam_set_pam_env on;
}
Lorsqu'il est activé, l'environnement PAM inclut :
HOST- En-tête d'hôte de la requête (par exemple,localhost:8000)REQUEST- Ligne de requête complète (par exemple,GET /path?query HTTP/1.1)
Fichier de service PAM /etc/pam.d/nginx_exec :
auth required pam_exec.so /path/to/auth-script.sh
account required pam_permit.so