Authentification

Les systèmes Unix nous offrent un moyen alternatif pour pallier à ce problème, on va se servir du PAM intégré au système, des serveurs RADIUS présents ainsi que le module auth_pam de Nginx.

On peut faire fonctionner le PAM pour qu'il utilise soit les utilisateurs présents sur le système (dans le fichier /etc/shadow) soit un service externe, dans notre cas, un serveur RADIUS.

La configuration se fait en plusieurs étapes.

PAM

aptitude install libpam-radius-auth libnginx-mod-http-auth-pam

Ces commandes vont rajouter une librairie pour que le PAM puisse interroger un serveur RADIUS ainsi qu'un module Nginx.

Un fichier /etc/pam_radius_auth.conf se créer, il est nécessaire de rajouter dedans le serveur RADIUS à contacter ainsi que la clé partagée entre les deux:

/etc/pam_radius_auth.conf
<srv_radius1>    shared_key              2
<srv_radius2>    shared_key              3

Il faut également créer un fichier dans /etc/pam.d/ pour nginx avec les directives concernant le type d'authentification à utiliser:

/etc/pam.d/nginx
auth required /lib/security/pam_radius_auth.so
account required /lib/security/pam_radius_auth.so

Nginx tournant avec un utilisateur ayant des moindres privilèges, il est nécessaire de faire en sorte qu'ils puisse lire le fichier de configuration /etc/pam_radius_auth.conf

chown root:www-data /etc/pam_radius_auth.conf

Nginx

Côté Nginx, deux simples directives sont à rajouter dans le fichier de configuration du Vhost, il s'agit de auth_pam et auth_pam_service_name, la 1ere définissant le message à afficher à l'utilisateur et la seconde définissant le fichier sur lequel il va pointer dans le répertoire /etc/pam.d/, ici, le fichier nginx qu'on a créer à l'étape précédente : :

/etc/nginx/conf.d/vhost.conf
server {
        listen 80 ;
        server_name 10.10.10.10;
        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl;
        server_name 10.40.30.106;
        ssl on;
        ssl_certificate /etc/kibana/cert/cert.pem;
        ssl_certificate_key /etc/kibana/cert/certkey.pem;
 
        location /
         {
            auth_pam    "Authentification requise";
            auth_pam_service_name   "nginx";
            proxy_pass http://127.0.0.1:8080;
        }
}

Maintenant que la configuration est fait des deux côtés, il suffit simplement de redémarrer le serveur web:

service nginx restart

Lors de la prochaine visite de la page, des identifiants seront demandés afin de pouvoir aller plus loin. Évidement, il faut que le compte en question soit présent sur le RADIUS.

En cas de problème lors de la configuration, le fichier /var/log/auth.log peut être d'une grande utilité pour voir où ça bloque.

wiki/pam.txt · Dernière modification: 2018/04/23 19:13 (modification externe)
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5