Aller au contenu

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