SSI-LDAP VS FREERADIUS Hamrouni Makram : hamrou_m Poissenot Thomas : poisse_t Roux Nicolas : roux_n
1... Maquette LDAP Installation :... 3 Initialisation de l annuaire LDP :... 4 Installation du client LDAP:... 5 Configuration du client LDAP:... 5 Installation et configuration de l authentification Unix:... 5 Client LDAP :... 6 Configuration du serveur LDAP pour communiquer avec le serveur Samba:... 7 Installation du serveur Samba :... 7 Configuration du serveur Samba :... 7 Installation des scripts smbldap-tools :... 8 Génération des clefs et certificats :... 9 Mise en place côté serveur :... 9 Mise en place côté client :... 10 Mise en place côté Serveur Samba :... 10 2 Maquette Radius... 11 Installation :... 12
1 Maquette LDAP 1.1 Authentification de l utilisateur par LDAP 1.1.1 Présentation de LDAP LDAP (Lightweight Directory Access Protocol) est un protocole d'accès à un annuaire. Un annuaire électronique est une base de donnée spécialisée, dont la fonction première est de retourner un ou plusieurs attributs d'un objet grâce à des fonctions de recherche multicritères. 1.1.2 Architecture des machines 1.1.3 Installation et configuration du serveur LDAP Installation : $ apt-get install slapd ldap-utils Configuration du fichier du serveur LDAP: Le fichier de configuration est : /etc/ldap/slapd.conf La ligne suivante donne la racine de la base LDAP :
suffix "dc=domain,dc=local" Ajouter cette ligne : rootdn "cn=admin,dc=domain,dc=local" On spécifie le mot de passe crypté par la commande suivante : $ slappasswd On copie la sortie de cette commande dans le fichier de configuration : rootpw <Sortie de la commande slappasswd> Paramétrage de l accès en écriture de la base. Il faut indiquer le bon login et la racine de la base : access to attribute=userpassword by dn="cn=admin,dc=domain,dc=local" write by anonymous auth by self write by * none Paramétrage de l accès en lecture seule de la base. Il faut indiquer le bon login et la racine de la base : access to * by dn="cn=admin,dc=domain,dc=local" write by * read Démarrer le serveur : $ /etc/init.d/slapd start Initialisation de l annuaire LDP : Créer un fichier temporaire base.ldif: dn: ou=people, dc=domain, dc=local objectclass: top objectclass: organizationalunit ou: people description: Branche gens dn: ou=etudiants, ou=people, dc=domain, dc=local objectclass: top objectclass: organizationalunit ou: etudiants description: Branche etudiants Ajouter le contenu à la base de l annuaire : $ ldapadd -x -f base.ldif -W -D cn=admin,dc=domain,dc=local Une fois initialisé on peut ajouter des utilisateurs à notre annuaire :
dn: uid=toto, ou=etudiants, dc=domain, dc=local objectclass: top objectclass: posixaccount objectclass: person objectclass: organizationalperson objectclass: inetorgperson uid: dupont cn: Mimi toto sn: Toto givenname: Mimi uidnumber: 1100 gidnumber: 1111 homedirectory: /home/aware/toto loginshell: /bin/bash userpassword: titi mail: toto@domain.local l: France 1.1.4 Installation du client LDAP Installation du client LDAP: $ apt-get install libnss-ldap Configuration du client LDAP: Le fichier de configuration /etc/ldap/ldap.conf doit ressembler à ça : BASE dc=domain, dc=local URI ldap://172.16.171.128 Installation et configuration de l authentification Unix: NSS : On ajoute un module à NSS qui lui permet d'interroger notre annuaire LDAP $ apt-get install libnss-ldap Le fichier /etc/libnss-ldap.conf doit ressembler à ça : base dc=domain,dc=local uri ldap://172.16.171.128/ ldap_version 3 binddn cn=admin,dc=domain,dc=local rootbinddn cn=admin,dc=domain,dc=local bind_policy soft PAM : On ajoute un module LDAP à PAM $ apt-get install libpam-ldap Le fichier de configuration de PAM /etc/pam_ldap.conf doit ressembler à ça : host 172.16.171.128
base dc=domain,dc=local uri ldap://172.16.171.128/ ldap_version 3 binddn cn=admin,dc=domain,dc=local rootbinddn cn=admin,dc=domain,dc=local bind_policy soft Il suffit d'indiquer maintenant au système d'aller interroger notre annuaire LDAP /etc/nsswitch.conf: passwd: compat ldap group: compat ldap shadow: compat ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis Le fichier /etc/pam.d/common-auth: auth sufficient pam_ldap.so auth sufficient pam_unix.so nullok_secure shadow use_first_pass Le fichier /etc/pam.d/common-account: account sufficient pam_ldap.so account sufficient pam_unix.so Le fichier /etc/pam.d/common-passwd: password sufficient pam_ldap.so password sufficient pam_unix.so Le fichier /etc/pam.d/common-session: session sufficient pam_ldap.so session sufficient pam_unix.so 1.1.5 Captures du réseau Client LDAP : L exécution de la commande getent passwd retourne : toto:x:1004:513:mimi toto:/home/toto:/bin/bash L exécution de la commande su toto : debian:~# su - toto reenter password: Pas de répertoire, connexion avec HOME=/
toto@debian:/$ 1.2 Ajout des services : Samba Configuration du serveur LDAP pour communiquer avec le serveur Samba: On ajoute le schéma Samba à l annuaire LDAP dans le fichier /etc/ldap/sldap.conf sur le serveur ldap : include /etc/ldap/schema/samba.schema Installation du serveur Samba : $ apt-get install samba smbclient smbfs Configuration du serveur Samba : Le fichier /etc/samba/smb.conf doit ressembler à celui-ci : [global] workgroup = samba netbios name = debian server string = Samba-LDAP PDC Server domain master = Yes local master = Yes domain logons = Yes os level = 40 #passwd program = /usr/sbin/smbldap-passwd?u %u ldap passwd sync = Yes passdb backend = ldapsam:ldap://172.16.171.128/ ldap admin dn = cn=admin,dc=domain,dc=local ldap suffix = dc=domain,dc=local ldap group suffix = ou=groups ldap user suffix = ou=users ldap machine suffix = ou=machines add user script = /usr/sbin/smbldap-useradd -m "%u" ldap delete dn = Yes delete user script = /usr/sbin/smbldap-userdel "%u" add machine script = /usr/sbin/smbldap-useradd -w "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" #delete group script = /usr/sbin/smbldap-groupdel "%g" add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u" logon path = \\%L\profile\%U logon drive = P: logon home = \\%L\%U socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 case sensitive = No default case = lower preserve case = yes
short preserve case = Yes #character set = iso8859-1 #domain admin group = @admin dns proxy = No wins support = Yes hosts allow = 192.168.0. 127. 172. winbind use default domain = Yes nt acl support = Yes msdfs root = Yes hide files = /desktop.ini/ntuser.ini/ntuser.*/ Installation des scripts smbldap-tools : Ces outils facilitent la création des comptes Samba et aussi ils ajoutent directement les comtes Unix dans l annuaire LDAP : Configurer le fichier /etc/smbldap-tools/smbldap_bind.conf : slavedn="cn=admin,dc=domain,dc=local" slavepw=<mot de passe en clair du serveur LDAP> masterdn="cn=admin,dc=domain,dc=local" masterpw=<mot de passe en clair du serveur LDAP> Changer les droitss sur le fichier pour des raisons de sécurité : $ chmod 600 /etc/smbldap-tools/smbldap_bind.conf Configurer le fichier /etc/smbldap-tools/smbldap.conf : slaveldap="172.16.171.128" slaveport="389" masterldap="172.16.171.128" masterport="389" ldaptls="0" verify="require" suffix="dc=domain,dc=local" usersdn="ou=users,${suffix" computersdn="ou=machines,${suffix" groupsdn="ou=groups,${suffix" idmapdn="ou=idmap,${suffix" sambaunixidpooldn="cn=nextfreeunixid,${suffix" scope="sub" hash_encrypt="ssha" crypt_salt_format="%s" userloginshell="/bin/bash" userhome="/home/%u" userhomedirectorymode="700" usergecos="user" defaultusergid="513" defaultcomputergid="515" skeletondir="/etc/skel" #Les mots de passe expirent dans 10ans
defaultmaxpasswordage="3650" with_smbpasswd="0" smbpasswd="/usr/bin/smbpasswd" with_slappasswd="0" slappasswd="/usr/sbin/slappasswd" On crée le mot de passe admin pour communiquer avec le serveur LDAP : $smbpasswd -w Pour vérifier si tout fonctionne : $ net getlocalsid SID for domain DEBIAN is: S-1-5-21-4015663717-3667952096-1045129424 Création de l architecture de l annuaire : $ smbldap-populate Ajout d un utilisateur à Samba : $ smbldap-useradd -a -c "Hamrouni Makram" -m -P mhamrouni Vérification de l ajout de l utilisateur dans l annuaire: Depuis un poste client la commande getent passwd retourne : mhamrouni:x:1006:513:hamrouni Makram:/home/mhamrouni:/bin/bash 1.3 Sécurisation des transactions Par défaut les communications avec notre serveur LDAP se font en clair. Il suffit de "sniffer" le réseau pour s'en rendre compte. Une personne mal intentionnée pourrait donc intercepter toutes les informations qu'elle désire, y compris les mots de passe de nos utilisateurs. Nous avons choisi une manière simple de sécuriser nos transactions est de passer par TLS (Transport Layer Security.) Génération des clefs et certificats : $ openssl genrsa -out serverkey.pem 1024 $ openssl req -new -key serverkey.pem -out servercert.req $ openssl genrsa -out cakey.pem 1024 $ openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365 $ openssl x509 -req -in servercert.req -out servercert.pem -CA cacert.pem - CAkey cakey.pem -days 365 Cacreateserial Mise en place côté serveur : Ajouter dans la section globale du fichier /etc/ldap/slapd.conf: TLSCertificateFile /etc/ldap/cert/servercert.pem TLSCertificateKeyFile /etc/ldap/cert/serverkey.pem TLSCACertificateFile /etc/ldap/cert/cacert.pem
Mise en place côté client : Copier le certificat cacert.pem dans le répertoire /etc/ldap/cert/. Editer le fichier /etc/ldap/ldap.conf et ajouter: TLS_CACERT /etc/ldap/cert/cacert.pem ssl start_tls tls_checkpeer yes tls_cacertfile /etc/ldap/cert/cacert.pem Mise en place côté Serveur Samba : Editer le fichier /etc/samba/smb.conf et ajouter: lldap ssl = start_tls ldap port = 389 1.4 Critique de l architecture LDAP 1.4.1 Avantages Centralisation des comptes De nombreuses applications sont capables d'interroger un même annuaire LDAP, Unix (pam_ldap) ou Windows (Samba) Les utilisateurs de tous ces services ne s'identifient alors qu'avec un seul identifiant pour tous ces services. Des mécanismes de réplication Apport de la sécurité avec le support du SSL TLS. S adapte à n importe quel structure de donnée. 1.4.2 Inconvénients Langage pauvre en requêtes d interrogation. Création laborieuse et demande un beaucoup de maintenance. La centralisation des comptes peut soulever des problèmes de sécurité évidente : il faut limites les droits pour les utilisateurs et cela peut être très laborieux. 1.4.3 Critique sur la montée en charge : LDAP supporte bien la montée en charge, le nombre de requêtes échangées entre le serveur et le client peuvent être diminuées par l installation d un système de cache tel que nscd.
Pour accélérer la recherche dans l annuaire on peut optimiser cela par l ajout d index dans l annuaire sur les objets les plus consultés. Cela n est pas négligeable dans le cas d un grand parc informatique. On peut utilise aussi des systèmes de cluster pour répartir la charge de travail. 1.5 Conclusion LDAP est une solution d authentification centralisé connu pour son adaptation à tout type de donnée. Elle présente une solution de sécurité suffisante et ne procure pas une sécurité forte. La configuration d une telle solution est laborieuse et difficile à maintenir. 2 Maquette Radius 2.1 Authentification de l utilisateur par Radius 2.1.1 Présentation de Radius Radius (Remote Authentication Dial-In User Service) est un protocole AAA (Authentication, Authorization, Accounting) normalisé à travers 2 RFCs, RFC 2865 (RADIUS authentication) et RFC 2866 (RADIUS accounting). Sa fonction première est d assurer le transport de l idenfication de l utilisateur entre le poste client et le serveur d identification. 2.1.2 Architecture des machines 2.1.3 Installation et configuration de freeradius
Installation : $ apt-get install freeradius Configuration du fichier du serveur Radius: La configuration de Radius est assez compliquée, mais la distribution propose un fichier de configuration préexistant. Il a suffit de comprendre le fonctionnement et enlever les choses non nécessaires à notre projet tell que l identification LDAP. Ci-dessous, voici le fichier de configuration principale et celui des clients permettant de déclarer leurs adresses IP et clé secrète. Le fichier de configuration est : /etc/freeradius/radiusd.conf prefix = /usr exec_prefix = /usr sysconfdir = /etc localstatedir = /var sbindir = ${exec_prefix/sbin logdir = /var/log/freeradius raddbdir = /etc/freeradius radacctdir = ${logdir/radacct # Location of config and logfiles. confdir = ${raddbdir run_dir = ${localstatedir/run/freeradius log_file = ${logdir/radius.log libdir = /usr/lib/freeradius pidfile = ${run_dir/freeradius.pid user = freerad group = freerad max_request_time = 30 delete_blocked_requests = no cleanup_delay = 5 max_requests = 1024 bind_address = * port = 0 hostname_lookups = no
allow_core_dumps = no regular_expressions extended_expressions = yes = yes log_stripped_names = no log_auth = no log_auth_badpass = no log_auth_goodpass = no usercollide = no lower_user = no lower_pass = no nospace_user = no nospace_pass = no security { max_attributes = 200 reject_delay = 1 status_server = no # PROXY CONFIGURATION proxy_requests = yes $INCLUDE ${confdir/proxy.conf # CLIENTS CONFIGURATION $INCLUDE ${confdir/clients.conf # SNMP CONFIGURATION snmp = no $INCLUDE ${confdir/snmp.conf # THREAD POOL CONFIGURATION thread pool { max_servers = 32 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 # MODULE CONFIGURATION modules { # Unix /etc/passwd style authentication #
unix { cache = no shadow = /etc/shadow radwtmp = ${logdir/radwtmp realm IPASS { format = prefix delimiter = "/" ignore_default = no ignore_null = no # 'username@realm' # realm suffix { format = suffix delimiter = "@" ignore_default = no ignore_null = no # 'username%realm' # realm realmpercent { format = suffix delimiter = "%" ignore_default = no ignore_null = no # # 'domain\user' # realm ntdomain { format = prefix delimiter = "\\" ignore_default = no ignore_null = no checkval { check-name = Calling-Station-Id preprocess { huntgroups = ${confdir/huntgroups hints = ${confdir/hints
with_ascend_hack = no ascend_channels_per_line = 23 with_ntdomain_hack = no with_specialix_jetstream_hack = no files { with_cisco_vsa_hack = no usersfile = ${confdir/users acctusersfile = ${confdir/acct_users preproxy_usersfile = ${confdir/preproxy_users compat = no detail { acct_unique { key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP- Address, NAS-Port" $INCLUDE ${confdir/sql.conf radutmp { filename = ${logdir/radutmp username = %{User-Name case_sensitive = yes perm = 0600 callerid = "yes" radutmp sradutmp { filename = ${logdir/sradutmp perm = 0644 callerid = "no" attr_filter { attrsfile = ${confdir/attrs counter daily { filename = ${raddbdir/db.daily key = User-Name count-attribute = Acct-Session-Time
reset = daily counter-name = Daily-Session-Time check-name = Max-Daily-Session allowed-servicetype = Framed-User cache-size = 5000 sqlcounter dailycounter { counter-name = Daily-Session-Time check-name = Max-Daily-Session sqlmod-inst = sql key = User-Name reset = daily sqlcounter monthlycounter { counter-name = Monthly-Session-Time check-name = Max-Monthly-Session sqlmod-inst = sql key = User-Name reset = monthly always fail { rcode = fail always reject { rcode = reject always ok { rcode = ok simulcount = 0 mpp = no expr { digest { exec { wait = yes input_pairs = request exec echo { wait = yes program = "/bin/echo %{User-Name" input_pairs = request output_pairs = reply
ippool main_pool { cache-size = 800 session-db = ${raddbdir/db.ippool ip-index = ${raddbdir/db.ipindex override = no maximum-timeout = 0 instantiate { expr authorize { files authenticate { unix preacct { preprocess files accounting { detail unix radutmp session { radutmp post-auth { Le fichier de configuration est : /etc/freeradius/client.conf client ip { secret = testing123 shortname = client 2.2 Critique de l architecture RADIUS 2.2.1 Avantages
Centralisation des comptes Simplicité d administration Les utilisateurs de tous ces services ne s'identifient alors qu'avec un seul identifiant pour tous ces services. 2.2.2 Inconvénients Ajout de service passe par l ajout de compte unix spécifiques La centralisation des comptes peut soulever des problèmes de sécurité évidente : il faut limites les droits pour les utilisateurs et cela peut être très laborieux. 2.2.3 Critique sur la montée en charge : Radius basé sur le fichier des utilisateur unix ne supporte pas bien la montée en charge, en effet, comme dit plus haut les utilisateurs sont stockées dans un fichier et non une base de données, il y aura donc un temps de latence suivant la position de l utilisateur dans le fichier. 2.2.4 Critique sur l ajout de services et la banalisation des postes: La banalisation des postes suppose un contrôle moins strict sur l accès aux services. L ajout de nouveaux services implique l ajout de nouvelles restrictions sur les services pour un utilisateur d où ajout des données dans la base RADIUS c est à dire dans un fichier. Cela implique une base de recherche plus importante et donc un temps d accès prolongé. Enfin, cela ralentit considérablement la solution RADIUS. 2.3 Conclusion Radius basé sur l authentification unix est don un bon moyen d authentification pour les petites structures, mais nous préfèrerons LDAP à celui-ci dans le cas de plus grosse structure pour une montée en charge nettement plus efficace.