Horoa – La voie est libreLa voie est libre

Installation de FreeRadius avec le support Oracle.

freeradius-oracleFreeradius est un serveur RADIUS extrêmement complet, modulaire et stable. C’est un des fleurons du logiciel libre et sans doute le serveur radius le plus répandu au monde. Parmi les modules fournis par freeradius, certain permettent de plugin le radius à des bases de données pour l’authentification et l’accounting notamment. Cet article traite de l’intégration de freeradius avec les SGBD Oracle. En effet le support d’Oracle étant souvent retiré des packages fournis par les distributions pour d’évidentes raisons de licenses.
Freeradius n’est rien de moins que le serveur RADIUS le plus utilisé dans le monde. Cela n’a pourtant pas toujours été le cas. Il fut une époque où les déploiements de freeradius donnait lieu à de nombreuses interrogations voire même des railleries de la part des tiers avec lesquels on souhaitait implémenter un mécanisme d’authentification (lorsque vous faisiez de la collecte IP par exemple). Cette époque est maintenant révolu et aujourd’hui ce produit libre sous licence GPL a su s’imposer grâce à son coût, bien évidement, mais aussi grâce à sa conception modulaire qui le rend extrêmement versatile. A ma connaissance c’est le serveur radius qui gère le plus grand nombre de types d’authentification EAP. Ajoutez à cela la prise en charge les mécanismes d’authentification PAP, CHAP, MS-CHAP v1 et v2,  Digest, PAM, ; des backends SQL, un backend LDAP et la prise en charge de plus d’une centaine de dictionnaires d’attributs (dont les attributs wimax)… et vous comprenez alors que « versatile » n’est pas un vain mot dans le monde du RADIUS. Pour couronner le tout le code est maintenu par la société networkradius, emmenée par Alan Dekok qui a participé à la rédaction de plusieurs RFC autour des protocoles RADIUS et DIAMETER. NetworkRadius propose d’ailleurs un support commercial de grande qualité comme c’est souvent le cas des produits opensource supportés commercialement (je vous en parle en tant qu’utilisateur du support commercial GOLD).

Dans cet article je vais détaillé un point un peu obscure de freeradius, et pour cause, puisqu’il s’agit de son interfaçage avec les SGBD Oracle… Si si: y’en a qu’on essayé… Ils ont eu des problèmes!

C’est certainement à cause de la nature non libre d’Oracle mais la documentation concernant freeradius et Oracle est assez sommaire et disparate. Nous allons donc voir comment intégrer de façon simple et efficace ces softs dans un environnement debian… bref comment construire un package debian freeradius-oracle!

Préparation de l’environnement:

A la base il nous faut bien entendu un sytème debian opérationnel. Ici on utilise une Debian Squeeze comme base de travail. On va tout d’abord y installer un les outils nécessaires à la compilation et à l’installation des softs:

sudo apt-get install build-essential unzip libtool automake dpkg-dev debhelper quilt libssl-dev libpam0g-dev libmysqlclient-dev libgdbm-dev libldap2-dev libsasl2-dev libiodbc2-dev libkrb5-dev libperl-dev libpcap-dev python-dev libsnmp-dev libpq-dev

Installation des composants Oracle

A ce stade il nous manque les librairies Oracles pour pouvoir compiler freeradius avec le support d’oracle. Oracle ne distribuant pas les sources des ces softs (oui on parle bien de la boite qui a racheté mysql sun et gère openoffice.org), nous allons devoir installer manuellement les librairies clientes d’Oracle. Plusieurs possibilités pour cela:

  • On peut tout bonnement installer un serveur Oracle complet: par exemple Oracle 11g (je ne l’ai jamais testé avec la version XE  d’oracle). Dans ce cas retenez bien votre $ORACLE_HOME car c’est là que seront installer les librairies nécessaires à la compilation
  • On peut aussi se contenter d’installer l’Oracle instant_client, distribué gratuitement par Oracle sous forme de bianires (une inscription est nécessaire)

Ici nous choisirons cette deuxième solutions car elle n’oblige pas à l’achat coûteux d’une licence logiciel Oracle. Rendez vous donc sur le site d’Oracle, section download, et choisissez la version de l’instantclient correspondant à votre version de GNU/Linux ainsi que son SDK: http://www.oracle.com/technetwork/database/features/instant-client/

Pour ce tuto nous utilisons une Debian 6.0 amd64. Les archives récupérées sont donc:

instantclient-basic-linux-x86-64-11.2.0.2.0.zip
instantclient-sdk-linux-x86-64-11.2.0.2.0.zip

On va décompresser les archives dans un répertoire dédié à ‘linstallation d’Oracle:

sudo mkdir /opt/oracle
sudo unzip -d /opt/oracle/ instantclient-basic-linux-x86-64-11.2.0.2.0.zip
sudo unzip -d /opt/oracle/ instantclient-sdk-linux-x86-64-11.2.0.2.0.zip

Le package nécessite une modification pour permettre la compilation et le lancement du serveur. Sans la modification suivante, le serveur plantera lors du chargement du module Oracle:

cd /opt/oracle/instantclient_11_2/
sudo ln -s libclntsh.so.11.1 libclntsh.so

On ajoute les librairies installées à la liste des librairies du système en ajoutant le fichier suivant /etc/ld.so.conf.d/oracle.conf, contenant la ligne ci-dessous:

/opt/oracle/instantclient_11_2

Puis on recharge les librairies.

sudo ldconfig

Les  softs oracles sont maintenant installés, place à la compilation de FreeRadius.:

Installation de FreeRadius

Récupérons les sources. Je vous conseille de prendre au minimum la version 2.1.10 qui contient des correctifs de bugs. notamment concernant la compilation du driver rlm_sql_oracle.
http://freeradius.org/download.html

cd
wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-2.1.10.tar.bz2
tar jxvf freeradius-server-2.1.10.tar.bz2

Encore mieux, vous pouvez utiliser les dernières source  via git. Si vous préférez tout de même  utiliser la release officielle, sachez qu’il vous faudra appliquer un petit patch que j’ai écrit si vous utilisez une version d’Oracle différente de la 10g. Ce patch ayant été intégré upstream, la prochaine release (2.1.11), ou les dernières sources git devraient l’intégrer de base.

Quoi qu’il en soit il en soit, afin de générer un package debian freeradius-oracle, il vous faudra télécharger cette archive. Elle contient les définitions du packages ainsi que quelques patch pour configurer les règles de compilation debian.

wget http://www.horoa.net/wp-content/uploads/2011/06/freeradius-oracle.tar.gz
tar zvxf freeradius-oracle.tar.gz
cd freeradius-server-2.1.10
cp ../freeradius-oracle/freeradius-oracle.* debian/

Si vous n’utilisez pas les dernières sources, appliquez le patch suivant, sinon ignorez cette ligne:
patch -p0 < ../freeradius-oracle/oracle_versionlibs.patch

Appliquez ce patch afin de permettre la construction du packge debian
patch -p0 < ../freeradius-oracle/debian.oracle_enabled.patch

Notez que ce dernier patch est fait pour la version 11.2 des lib Oracle, installées dans /opt/oracle. Si vous utilisez une version différente ou un chemin d’installation différent, veillez à ajuster les options de configuration dans le fichier debian/rules.

Avant de créer le package on va re-générer les scripts de configuration avec:
cd src/modules/rlm_sql/drivers/rlm_sql_oracle
autoreconf
cd -

On peut maintenant générer les packages debian
sudo dpkg-buildpackage -b -uc

Cette commande terminée, on devrait obtenir une floppée de .deb dans le répertoire parent, notamment: freeradius-oracle_2.1.10+git_amd64.deb

Il ne nous reste plus qu’à installer les packages et leurs dépendances

sudo apt-get install libaio1 openssl-blacklist ssl-cert
sudo dpkg -i ../libfreeradius2_2.1.10+git_amd64.deb ../freeradius_2.1.10+git_amd64.deb ../freeradius-common_2.1.10+git_all.deb ../freeradius-oracle_2.1.10+git_amd64.deb

Afin d’éviter de perdre le fruit de notre travail lors d’une mise à jour, on configure dpkg pour qu’il n’écrase pas les paquets liées à freeradius
sudo dpkg --get-selections | grep freeradius | sed 's/install$/hold/' | sudo dpkg --set-selections

Le reste n’est qu’une affaire de configuration. En substance, il faut dé-commenter la ligne suivante dans /etc/freeradius/radiusd.conf:
$INCLUDE sql.conf

et configurer un instance sql dans /etc/freeradius/sql.conf en utilisant le driver oracle et une chaine de connexion adéquate:

sql {
database = "oracle"
driver = "rlm_sql_${database}"
login = "scott"
password = "tiger"
radius_db = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=A.B.C.D)(PORT=1521))(CONNECT_DATA=(SID=GEN1)))"
...
}

On peut alors tester que le serveur ce lancera correctement

sudo freeradius -X -C

Tags: , , ,

6 comments

  • Hi followed your how to step by step on a debian-6.0.2.1-i386 with freeradius-server-2.1.10 and instantclient-basic-linux32-11.2.0.2.0 instantclient-sdk-linux32-11.2.0.2.0. I executed both patch command.
    Executing autogen.sh this is the output:
    libtoolize: putting auxiliary files in `.’.
    libtoolize: copying file `./ltmain.sh’
    libtoolize: You should add the contents of the following files to `aclocal.m4′:
    libtoolize: `/usr/share/aclocal/libtool.m4′
    libtoolize: `/usr/share/aclocal/ltoptions.m4′
    libtoolize: `/usr/share/aclocal/ltversion.m4′
    libtoolize: `/usr/share/aclocal/ltsugar.m4′
    libtoolize: `/usr/share/aclocal/lt~obsolete.m4′
    libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])’ to configure.in and
    libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
    libtoolize: Consider adding `-I m4′ to ACLOCAL_AMFLAGS in Makefile.am.
    libtoolize: `AC_PROG_RANLIB’ is rendered obsolete by `LT_INIT’
    configure.in:559: warning: AC_CACHE_VAL(ac_cv_lib_readline, …): suspicious presence of an AC_SUBST in the second argument, where no actions should be taken
    ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from…
    ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from…
    acinclude.m4:394: AC_LIB_READLINE is expanded from…
    configure.in:559: the top level
    configure.in:1160: warning: AC_CONFIG_SUBDIRS: you should use literals
    ../../lib/autoconf/status.m4:1098: AC_CONFIG_SUBDIRS is expanded from…
    configure.in:1160: the top level
    configure.in:559: warning: AC_CACHE_VAL(ac_cv_lib_readline, …): suspicious presence of an AC_SUBST in the second argument, where no actions should be taken
    ../../lib/autoconf/general.m4:2019: AC_CACHE_VAL is expanded from…
    ../../lib/autoconf/general.m4:2040: AC_CACHE_CHECK is expanded from…
    acinclude.m4:394: AC_LIB_READLINE is expanded from…
    configure.in:559: the top level
    configure.in:1160: warning: AC_CONFIG_SUBDIRS: you should use literals
    ../../lib/autoconf/status.m4:1098: AC_CONFIG_SUBDIRS is expanded from…
    configure.in:1160: the top level
    Configuring in src/modules/rlm_counter…
    Configuring in src/modules/rlm_sqlcounter…

    and when run dpkg-buildpackage -b -uc:

    configure: WARNING: oracle libraries not found. Use –with-oracle-lib-dir=.
    configure: error: set –without-rlm_sql_oracle to disable it explicitly.
    configure: error: ./configure failed for ./drivers/rlm_sql_oracle
    configure: error: ./configure failed for src/modules/rlm_sql
    make: *** [config.status] Error 1
    dpkg-buildpackage: error: debian/rules build gave error exit status 2

    i have instant client in /opt/oracle and executed ldconfig in /opt/oracle/instantclient_11_2/.

    i did understand the third line of this:
    cd /opt/oracle/instantclient_11_2/
    sudo ln -s libclntsh.so.11.1 libclntsh.so
    /opt/oracle/instantclient_11_2
    sudo ldconfig

    where i’m wrong ? can you help me plz ?

    Tnx a lot

    • hello, as you may noticed , there are 2 patches in this howto (both found in the tarball). Are you sure you applied the second path: oracle_versionlibs.patch before running autogen.sh?

      Did you check tthe pathes in this patch matched your installation This pathes depends on where you installed oracle instant client.

      Can you please sent the file src/modules/rlm_sql/drivers/rlm_sql_oracle/configure to pastebin (please don’t post it as part of a comment), so I can check patch has been applied successfully.

  • Hi Alex, tnx for responding.

    Yes i applied both patches and installed instant client same path as you.

    here my configure file http://pastebin.com/04zJ9ydz

    those are the steps i did, all asa root user:
    mkdir /opt/oracle
    unzip -d /opt/oracle/ instantclient-basic-linux32-11.2.0.2.0.zip
    unzip -d /opt/oracle/ instantclient-sdk-linux32-11.2.0.2.0.zip
    cd /opt/oracle/instantclient_11_2/
    ln -s libclntsh.so.11.1 libclntsh.so
    ldconfig
    cd
    tar xzf freeradius-server-2.1.10.tar.gz
    tar zxf freeradius-oracle.tar.gz
    cd freeradius-server-2.1.10
    cp ../freeradius-oracle/freeradius-oracle.* debian/
    patch -p0 < ../freeradius-oracle/debian.oracle_enabled.patch
    patch -p0 < ../freeradius-oracle/oracle_versionlibs.patch
    ./autogen.sh
    dpkg-buildpackage -b -uc

    tnx again

    • Hello, for some reasons, it seems ./autogen.sh did *not* regenerated the configure files. You can force this by changing to the directory src/modules/rlm_sql/drivers/rlm_sql_oracle and run `autoreconf`. Then go back to the root of the freeradius source tree and re-run dpkg-builpackage -blablabla.

      I think it should do the trick

  • Works 🙂 tnx a lot

    it’s too much to ask you a howto to do the same on a ubuntu server 10.04 ?
    i tried but receive:

    checking for ldap_init in -lldap_r… ./configure: line 2857: ac_fn_c_try_link: command not found
    ./configure: line 2934: ac_fn_c_try_link: command not found
    ./configure: line 2934: ac_fn_c_try_link: command not found
    no
    checking for ldap.h… yes
    configure: error: set –without-rlm_ldap to disable it explicitly.
    configure: error: ./configure failed for src/modules/rlm_ldap
    make: *** [config.status] Error 1
    dpkg-buildpackage: error: debian/rules build gave error exit status 2

    i installed same package of Preparing the compil theater and did all same procedure

    i tried to install debian build packages on ubuntu but recieve:
    dpkg: dependency problems prevent configuration of freeradius:
    freeradius depends on libssl0.9.8 (>= 0.9.8m-1); however:
    Version of libssl0.9.8 on system is 0.9.8k-7ubuntu8.6.

    tnx a lot for your time 🙂

    • Yes am sure you can’t install the debian packages on ubuntu.
      I don’t really have time for this right now. However, you error message seems related to ldap… whereas the configure process correctly detect ldap.h (which suggest you installed libldap2-dev)
      maybe you have a probelm with the version of autconf/automake… which is quite a pain o get rid of…
      Maybe later I’ll try to write something about ubuntu…
      Anyway I would recommend you run debian servers instead of ubuntu.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.