Bonjour,
Dans le but de centraliser un peu l'authentification de nos applicatifs web, je cherche à mettre en place l'authentification sur base radius. Le serveur sur lequel je fais mes test est un Debian, qui héberge également la base radius. J'ai donc Apache 2 et Freeradius d'installés, et j'ai installé le package libapache2-mod-auth-radius pour faire le lien entre les deux. Dans ma conf Apache j'ai défini un répertoire comme suit :
<Directory /usr/share/mondossier> AuthType Basic AuthName "Authentification requise (RADIUS)." AuthBasicProvider radius AuthRadiusActive On require user cguivy </Directory>
Jusqu'ici ça marche (quand je tente d'accéder au repertoire en HTTP, j'ai la popup qui me demande mon login/mot de passe et m'accepte/me jette en fonction de ce que je lui réponds). Ce que je voudrais maintenant c'est autoriser uniquement les utilisateurs d'un groupe radius défini, par exemple le groupe "Network". Mon user "cguivy" est dans le groupe Network dans la base radius (c'est une base mysql), en tout cas dans la table radusergroup j'ai bien un enregistrement qui relie le username "cguivy" au groupname "Network".
Dans la conf de mon répertoire apache j'ai donc changé "require user cguivy" par "require group Network", mais une fois ceci fait, impossible de s'authentifier, et dans le log d'erreur d'Apache j'ai :
[Tue Jan 17 17:50:00 2012] [error] [client 1.2.3.4] access to /mondossier/ failed, reason: require directives present and no Authoritative handler.
(et cela si je tape le bon mot de passe, si j'en mets un mauvais j'ai un message d'erreur "password mismatch")
Je ne suis pas sûr d'arriver à interpréter ce message d'erreur, surtout la fin qui parle d'"Authoritative handler".
Par ailleurs je remarque autre chose, quand je teste mon user avec l'utilitaire radtest, si je mets le bon mot de passe j'obtiens :
root@serveur:/etc/apache2# radtest cguivy motdepasse 127.0.0.1 1812 secret Sending Access-Request of id 137 to 127.0.0.1 port 1812 User-Name = "cguivy" User-Password = "motdepasse" NAS-IP-Address = 1.2.3.4 NAS-Port = 1812 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=137, length=51 Cisco-AVPair = "shell:priv-lvl=15" Service-Type = Administrative-User
A aucun moment il n'est fait mention du groupe Network, je me demande si freeradius a bien "compris" que je voulais que mon user soit dans ce groupe. Egalement, quand je regarde dans les logs de freeradius, je vois que la requête faite par Apache a un "Service-Type" à "Authenticate-Only" ce qui me fait croire qu'il ne tente pas de vérifier le groupe par ce biais, juste le mot de passe. Mais là j'avoue que ma connaissance de radius n'est pas suffisante pour que je sois certain de mon analyse.
Des idées pour me débloquer ?
S'il faut remplacer libapache2-mod-auth-radius par autre chose c'est possible, s'il faut passer par autre chose qu'un groupe (par exemple un av-pair) pour que ça marche c'est possible aussi. Merci.
Cordialement,
Clément Guivy
Salut,
pour ma part je connais très bien RADIATOR mais très peu FreeRadius, cependant si tu souhaites autoriser que des utilisateurs du groupe "Ntework" par exemple, tu peux le gérer ça au niveau de ta requete SQL en faisant une requete du type SELECT Login,Password From User where Group ='Network'. Avec une directive apache du type "require valid-user"
Maintenant si tu veux pouvoir donner accès à certains répertoires qu'à certains groupes, il faudrait voir l'ACCESS REQUEST envoyé par apache (et pas le simulateur) pour voir quels sont les attributs envoyés par Apache, si par exemple il y a le répertoire qui est accédé afin de forger ta requête SQL en conséquence...
Christophe.
On 17/01/2012 18:37, Clément Guivy wrote:
Bonjour,
Dans le but de centraliser un peu l'authentification de nos applicatifs web, je cherche à mettre en place l'authentification sur base radius. Le serveur sur lequel je fais mes test est un Debian, qui héberge également la base radius. J'ai donc Apache 2 et Freeradius d'installés, et j'ai installé le package libapache2-mod-auth-radius pour faire le lien entre les deux. Dans ma conf Apache j'ai défini un répertoire comme suit :
<Directory /usr/share/mondossier> AuthType Basic AuthName "Authentification requise (RADIUS)." AuthBasicProvider radius AuthRadiusActive On require user cguivy
</Directory>
Jusqu'ici ça marche (quand je tente d'accéder au repertoire en HTTP, j'ai la popup qui me demande mon login/mot de passe et m'accepte/me jette en fonction de ce que je lui réponds). Ce que je voudrais maintenant c'est autoriser uniquement les utilisateurs d'un groupe radius défini, par exemple le groupe "Network". Mon user "cguivy" est dans le groupe Network dans la base radius (c'est une base mysql), en tout cas dans la table radusergroup j'ai bien un enregistrement qui relie le username "cguivy" au groupname "Network".
Dans la conf de mon répertoire apache j'ai donc changé "require user cguivy" par "require group Network", mais une fois ceci fait, impossible de s'authentifier, et dans le log d'erreur d'Apache j'ai :
[Tue Jan 17 17:50:00 2012] [error] [client 1.2.3.4] access to /mondossier/ failed, reason: require directives present and no Authoritative handler.
(et cela si je tape le bon mot de passe, si j'en mets un mauvais j'ai un message d'erreur "password mismatch")
Je ne suis pas sûr d'arriver à interpréter ce message d'erreur, surtout la fin qui parle d'"Authoritative handler".
Par ailleurs je remarque autre chose, quand je teste mon user avec l'utilitaire radtest, si je mets le bon mot de passe j'obtiens :
root@serveur:/etc/apache2# radtest cguivy motdepasse 127.0.0.1 1812 secret Sending Access-Request of id 137 to 127.0.0.1 port 1812 User-Name = "cguivy" User-Password = "motdepasse" NAS-IP-Address = 1.2.3.4 NAS-Port = 1812 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=137, length=51 Cisco-AVPair = "shell:priv-lvl=15" Service-Type = Administrative-User
A aucun moment il n'est fait mention du groupe Network, je me demande si freeradius a bien "compris" que je voulais que mon user soit dans ce groupe. Egalement, quand je regarde dans les logs de freeradius, je vois que la requête faite par Apache a un "Service-Type" à "Authenticate-Only" ce qui me fait croire qu'il ne tente pas de vérifier le groupe par ce biais, juste le mot de passe. Mais là j'avoue que ma connaissance de radius n'est pas suffisante pour que je sois certain de mon analyse.
Des idées pour me débloquer ?
S'il faut remplacer libapache2-mod-auth-radius par autre chose c'est possible, s'il faut passer par autre chose qu'un groupe (par exemple un av-pair) pour que ça marche c'est possible aussi. Merci.
Cordialement,
Clément Guivy _______________________________________________ Liste de diffusion du FRsAG http://www.frsag.org/