Authentificationlinuxldapgroupe2

Préambule

Notre projet est basé sur deux machines virtuelles installées sur VirtualBox:

  • Un Serveur 2000 ou 2003 de Windows.
  • Un Client Linux ( Ubuntu 10.4 LTS).

Notre Serveur 2000 sera le contrôleur de domaine (DC) qui utilise Kerberos pour crypter les mots de passe. Il permettra à un client Linux de pouvoir ouvrir n'importe quelle session utilisateur si celui-ci est présent dans l'annuaire du DC.

Nota Bene:
Certains paramètres de fichier de configuration, présents par défaut, n'ont pas tous été affichés et ce volontairement.
Seuls ceux qui sont explicites ou qui ont été modifiés seront présentés.

1. Les outils nécessaires

  • Un Serveur 2000 Windows.
  • Un Client Linux Ubuntu 10.4 LTS
  • Un Serveur Kerberos (serveur 2000)
  • Un client Kerberos (krb5-user sous linux)
  • Un Serveur NTP (serveur 2000)
  • Un Serveur DHCP (serveur 2000)
  • Installation de paquets : samba et winbind.
  • Une multitude de fichiers à configurer sur le client Linux représentés ci -dessous:
/etc
   |     /hosts
   |       |      
   |     /resolv.conf
   |      |
   |     /default
   |       |       -ntpdate
   |       | 
   |     /samba
   |       |       -smb.conf
   |       |
   |     /krb5.conf
   |       |                       
   |     /nsswitch.conf
   |       |
   |     /pam.d
   |       |      -common-account
   |       |      -common-auth
   |       |      -common-password
   |       |      -common-session
   |       |      -sudo

2. Réalisation du projet

2.1 Serveur 2000

A l'installation de Windows, il sera le DC du domaine et réagira aussi en tant que serveur Kerberos. Il servira de serveur NTP que l'on indiquera au client Linux pour que ce dernier synchronise son heure. Il sera aussi le serveur DHCP, (nous mettons à disposition un lien décrivant la configuration du serveur DHCP dans notre bibliographie).

  • Ip du serveur: 192.168.1.254
  • nom du Domaine: test.com
  • nom du DC: SERVER2000
  • nom NetBios: server2000
  • FQDN: server2000.test.com (=nom de domaine complet du DC)

2.2 Client Linux

2.2.1 Configuration du fichier "hosts" et "resolv.conf"

==> root@ubuntu10:/# vim /etc/hosts
Ce fichier contient une liste d'association de "nom de machine - adresse IP" permettant ainsi la résolution de nom DNS pour notre réseau local si par exemple aucun serveur DNS n'est présent. Il est typiquement utilisé pour renseigner des noms de machines locales. Nous y indiquons: le nom de notre machine local linux et celui du serveur 2000.

127.0.0.1       ubuntu10.test.com      localhost     ubuntu10     
192.168.1.254   server2000.test.com

==> root@ubuntu10:/# vim /etc/resolv.conf
Ce fichier se fait automatiquement, mais il faut le vérifier pour être sûr qu'il contacte bien le serveur 2000 et son domaine, si des requêtes DNS plus globale sont nécessaires.

nameserver 192.168.1.254 
domain test                              
search test

Vérification

A ce stade on doit pouvoir pinger le server 2000 avec son nom DNS:

==> root@ubuntu10:/# ping server2000.test.com

PING bytes from server2000.test.com (192.168.1.254)    56(84) bytes of data.                                                        
 64 bytes from server2000.test.com (192.168.1.254) : icmp_seq=1  ttl=128  time=0.371 ms                                       
 64 bytes from server2000.test.com (192.168.1.254) : icmp_seq=2  ttl=128  time=0.385 ms

2.2.2 Configuration du client NTP

NTP (Network Time Protocole) est un protocole pour synchroniser l’heure des machines entre elles. Comme le serveur 2000 utilise Kerberos, et que ce dernier nécessite un réglage optimal de l’heure : moins de 5 minutes d’écart entre le client linux et le contrôleur de domaine, il est alors impératif que nos 2 machines se synchronisent sur la même heure car la validité d'un ticket Kerberos dépend de l'heure.

Il existe deux manières pour le faire (le 3ième point automatise la tâche):

  • 1°/ Soit on configure manuellement les 2 machines à la même heure mais au fil du temps elles vont se désynchroniser, ce qui n'est pas un bon choix.
  • 2°/ Soit on configure Linux, en temps que client NTP grâce au fichier /etc/default/ntpdate où on lui demande de contacter le serveur 2000 lorsque on tape la commande "ntpdate":

==> root@ubuntu10:/# vim /etc/default/ntpdate

# The settings in this file are used by the program ntpdate-debian, but not#                                     
# by the upstream program ntpdate.                                         
# Set to "yes" to take the server list from /etc/ntp.conf, from package ntp,                                 
#  # so you only have to keep it in one place.
NTPDATE_USE_NTP_CONF=yes
# List of NTP servers to use  (Separate multiple servers with spaces.)# 

# Not used if NTPDATE_USE_NTP_CONF is yes.
NTPSERVERS="server2000.test.com"

# Additional options to pass to ntpdate                                                                
# NTPOPTIONS="-u"

==> root@ubuntu10:/# ntpdate server2000.test.com

  • 3°/ Pour ne pas à devoir effectuer constamment cette commande ci-dessus, il est possible d'automatiser cette tâche, tous les jours ou toutes les semaines par exemple via cette commande:

==> root@ubuntu10:/# crontab -e
Ici, on demande d'effectuer la commande "ntpdate-debian" (celle-ci, ira chercher le serveur à contacter dans le fichier /etc/default/ntpdate) tous les Mardi à 18h:

#  m     h    dom   mon   dow           command
   00   18     *    *      2       /usr/sbin/ntpdate-debian

m = minute / h= heure / dom = jour du mois / mon = mois / dow = jour de la semaine

2.2.3 Configuration du client Kerberos

Kerberos est utilisé par Microsoft pour fournir une authentification solide pour des applications client/serveur en utilisant la cryptographie, une version Open source est disponible pour linux sous le nom de "krb5".
Ce protocole est assez complexe à présenter mais un lien est disponible dans notre bibliographie fournissant une très bonne explication et ce avec schémas. Nous pouvons tout de même dire, que Kerberos , ne fait jamais circuler le mot de passe de l'utilisateur sur le réseau grâce à un système de ticket qui est émis par le service TGS (Ticket-Granting Service). Ensuite, ce ticket sera authentifié par le serveur Kerberos appelé KDC ( Key Distribution Center).

==> root@ubuntu10:/# aptitude install krb5-user
On installe le paquet pour être client kerberos.

==> root@ubuntu10:/# vim /etc/krb5.conf
Configuration du client Kerberos en respectant la casse:

[libdefaults]                                               
         default_realm = TEST.COM            
         ticket_lifetime = 24000

# The following krb5.conf variables are only for MIT Kerberos.     
        krb4_config = /etc/krb.conf                                                  
        krb4_realms = /etc/krb.realms                     
        kdc_timesync = 1                         
        ccache_type = 4                    
        forwardable = true                          
        proxiable = true

[realms]                                   
       TEST.COM = {                                
                  kdc = SERVER2000.test.com                              
                  admin_server = SERVER2000.test.com                
                  default_domain = TEST.COM                                 
 }

[domain_realm]                         
      .test.com = TEST.COM                      
       test.com = TEST.COM

[login]                            
      krb4_convert = true                    
      krb4_get_tickets = false
  • default_realm = le nom du Royaume Kerberos où il doit opérer.
  • ticket_lifetime = durée de vie du ticket
  • kdc = le nom du serveur Kerberos.
  • admin_server = le DC du domaine

Vérification Kerberos

Les commandes qui suivent permettent de vérifier si le fonctionnement client/serveur Kerberos est opérationnel:

==> root@ubuntu10:/# kinit administrateur
On fait une demande de ticket d'un utilisateur présent dans l'annuaire du serveur 2000 et un mot de passe nous est demandé. Nous avons choisi l'user "administrateur" car celui-ci est d'office présent:

Password for administrateur@TEST.COM:

==> root@ubuntu10:/# klist
Cette commande nous permet de voir, ceux à qui, un ticket a été attribué.
Ainsi, que l'émission du ticket par TGT et son expiration indiquant l'importance que Kerberos octroyé à une synchronisation de l'heure:

Ticket cache: FILE:/tmp/krb5cc_0                                           
Default principal: administrateur@TEST.COM

Valid starting              Expires                      Service principal                       
05/10/10 21:59:46        05/11/10 04:39:46                krbtgt/TEST.COM@TEST.COM

2.2.4 Configuration de Samba et installation de Winbind

==> root@ubuntu10:/# aptitude install winbind
On installe le paquet winbind. Winbind est un service qui va nous permettre de récupérer les informations sur les utilisateurs et groupes présent dans l'annuaire du serveur 2000.

==> root@ubuntu10:/# aptitude install samba
On installe le paquet du serveur Samba.

==> root@ubuntu10:/# vim /etc/samba/smb.conf
On configure le serveur Samba afin qu'il puisse communiquer avec notre serveur 2000 via "winbind" et être aussi compatible avec le système Kerberos:

[global]                                                                                                                                                                                   
               security = ADS                         
               realm = TEST.COM
                password server = SERVER2000.test.com                                                                                
               workgroup = TEST
                netbios name = ubuntu10
                winbind separator = +
               idmap uid = 10000-20000
               idmap gid = 10000-20000
               winbind enum users = yes
              winbind enum groups = yes
              template homedir = /home/%D/%U
              template shell = /bin/bash
              client use spnego = yes
              winbind use default domain = yes
  • ADS = permet à Samba d'utiliser Kerberos pour accepter des tickets.
  • realm = Royaume Kerberos.
  • password server = serveur Kerberos à contacter.
  • workgroup = domaine samba.
  • idmap = user et group présent dans l'annuaire du serveur 2000 qui auront leur ID compris entre 10000 et 20000 (voir plus loin à la sortie de la commande "getent").
  • winbind seperator = séparateur utilisé lors de requête "winbind" (voir plus loin avec "wbinfo -u").
  • template homedir = lors d'ouverture de session utilisateur, leur répertoire se place dans %D=nom du domaine et %U=user, c'est à dire le path: "/home/TEST/nom_user".

==> root@ubuntu10:/# mkdir /home/TEST
On crée ce répertoire et grâce à l'instruction "template homedir = /home/%D/%U" , les utilisateurs qui ouvrirons une session sur cette machine ("ubuntu10") aurons leur répertoire dans /TEST%D=le domaine et %U=l'utilisateur qui se connecte.
Il est important, par la suite, de donner les droits en écriture dessus à l'aide de la commande "chmod 777".
Notons que "/TEST" correspond a ce qui est indiquer lors de la création d'utilisateurs dans l'annuaire du serveur 2000 (voir plus loin).

==> root@ubuntu10:/# /etc/init.d/ winbind start
Démarrage du service winbind.

==> root@ubuntu10:/# /etc/init.d/ smbd start
==> root@ubuntu10:/# /etc/init.d/ nmbd start
Démarrage des services Samba.

==> root@ubuntu10:/# testparm
Cette commande permet de vérifier qu'il n'y aucune erreur dans smb.conf .
Elle doit nous renvoyer "loaded services file ok".

Load smb config files from /etc/samba/smb.conf                                          
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)

Loaded services file OK.  

winbind separator = +' might cause problems with group membership.              
Server role: ROLE_DOMAIN_MEMBER

Press enter to see a dump of your service definitions

==> root@ubuntu10:/# net join -U administrateur -S server2000.test.com
Cette commande va nous permettre d'intégrer Samba au domaine du serveur 2000 et permettre de faire apparaitre notre machine "ubuntu10" dans l'annuaire de ce dernier.
Après avoir introduit le mot de passe de l'administrateur du domaine "test.com", on peut voir que la machine "ubuntu10" à bien rejoint le domaine "test.com".
Cela est très important car le fonctionnement d'un serveur Windows autorise d'ouvrir des sessions d'utilisateurs que sur des machines connus.

Enter administrateur's password:
Using short domain name -- TEST 

Joined 'UBUNTU10' to realm 'test.com'

[2010/05/10 22:19:58,  0]   utils/net_ads.c:1080(net_update_dns_internal)

Vérification Samba et Winbind

Notre machine linux nomée "ubuntu10" est maintenant présent dans l'annuaire
Cliquer sur l'image pour l'agrandir
adsl001.bmp

==> root@ubuntu10:/# wbinfo -u
Cette commande "winbind" permet de récupérer les utilisateurs présents dans l'annuaire du serveur 2000. On peut voir "UBUNTU10+iepscf ""iepscf " est le user crée lors de l'installation et "+" est le séparateur "winbind" précisé dans smb.conf :

UBUNTU10+iepscf                                                               
administrateur                                                                                     
invité                                                                                            
tsinternetuser                                                                        
iusr_server2000                                                                
iwam_server2000                                              
ils_anonymous_user                                                                        
jaouad
giuseppe

==>root@ubuntu10:/# wbinfo -g
Cette commande "winbind" permet de récupérer les groupes présents dans l'annuaire du serveur 2000.

 ..............................                                                         
administrateur du schéma                                                                                  
éditeur de certificats                                                                                            
invités du domaine                                                                       
dnsadmins                                                                                    full                                                                                                                                                                   
...............................

Une explication plus complète, sur le rôle de NSS/PAM et leur fichier, a été préalablement abordé dans un projet antérieur, qui est celui de OpenLdap, que l'on peut lire via ce lien : http://actuel.wikidot.com/projets:heterogeneserveurldapgroupe2

2.2.5 NSS

Maintenant que notre machine est visible, il faut indiquer à celle-ci où aller chercher les informations sur les utilisateurs.
Ce sera le rôle de NSS:

==> root@ubuntu10:/# vim /etc/nsswitch.conf
On indique dans ce fichier de réunir les informations via "winbind" :

# /etc/nsswitch.conf  #
passwd:         compat  winbind                                                                  
group:           compat  winbind                                                                  
shadow:        compat

hosts:            files mdns4_minimal [NOTFOUND=return] dns mdns4           
networks:      files

protocols:      db files                                                                                
services:        db files                                                                                  
ethers:           db files                                                                                               
rpc:               db files 

netgroup:      nis

==> root@ubuntu10:/# getent passwd
On test si NSS couplé à "winbind" nous renvoie bien les informations.
On remarque que les uid des utilisateurs présent dans l'annuaire 2000 commencent à 10000 comme préciser dans smb.conf :
root:x:0:0:root:/root:/bin/bash                                                                   
daemon:x:1:1:daemon:/usr/sbin:/bin/sh                                                                                                                                                                            ........................................                                                          
iepscf:x:1000:1000:iepscf::/home/iepscf:/bin/bash    
administrateur:*:10000:10013::/home/TEST/administrateur:/bin/bash 
jaouad:*:10001:10013:jaouad ahdadi :/home/TEST/jaouad:/bin/bash 
giuseppe:*:10002:10013:giuseppe baldacchino:/home/TEST/giuseppe:/bin/bash 
ils_anonymous_user:*:10004:10013:ILS Anonymous 
Account:/home/TEST/ils_anonymous_user:/bin/bash 
invité:*:10005:10013::/home/TEST/invité:/bin/bash         
iusr_server2000:*:10006:10013:Compte Invité Internet:/home/TEST/iusr_server2000:/bin/bash                   
iwam_server2000:*:10007:10013:Démarrer le compte de l'invité Internet:/home/TEST/iwam_server2000:/bin/bash 
tsinternetuser:*:10010:10013:TsInternetUser:/home/TEST/tsinternetuser:/bin/bash 
UBUNTU10+iepscf:*:1000:10014:iepscf:/home/UBUNTU10/iepscf:/bin/bash

2.2.5 PAM

PAM va indiquer comment effectuer l'authentification et qui il doit utiliser pour le faire.
Il y a 5 fichiers où il faudra commenter, ajouter ou vérifier certains paramètres:

………………………….1°/ ==> root@ubuntu10:/# vim /etc/pam.d/common-account

# /etc/pam.d/common-account - authorization settings common to all services#

#account        [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so                  
#account        [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so

account      sufficient        pam_winbind.so                                                                                               
account      sufficient        pam_unix.so

………………………….2°/ ==> root@ubuntu10:/# vim /etc/pam.d/common-auth

# /etc/pam.d/common-auth - authentication settings common to all services#

#auth   [success=2 default=ignore]      pam_unix.so nullok_secure                                                                                                              
#auth   [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass

auth    sufficient    pam_winbind.so                                                                                                                                                     
auth    sufficient    pam_unix.so

………………………….3°/ ==> root@ubuntu10:/# vim /etc/pam.d/common-password

# /etc/pam.d/common-password - password-related modules common to all services#
# 
#password       [success=2 default=ignore]      pam_unix.so obscure sha512                                                            
#password       [success=1 default=ignore]      pam_winbind.so use_authtok try_first_pass

password  required  pam_unix.so  nullok  obscure md5

………………………….4°/ ==> root@ubuntu10:/# vim /etc/pam.d/common-session
# /etc/pam.d/common-session - session-related modules common to all services#

#session        [default=1]                     pam_permit.so

session required   pam_unix.so                                                                                                                                              
session required   pam_mkhomedir.so   unmask=0022   skel=/etc/skel

………………………….5°/ ==> root@ubuntu10:/# vim /etc/pam.d/sudo

#%PAM-1.0 

@include common-auth                                                                                                                                                            
@include common-

auth    sufficient  pam_winbind.so                                                                                                                                             
auth    required    pam_unix.so  use_first_pass

3. Ajout dans l'annuaire

On ajoute l'utilisateur "uccle" et ensuite le mot de passe.
"TEST\" est le répertoire du user à l'ouverture de session, et c'est en se basant sur ces informations que l'on à crée le répertoire "/home/TEST" sur la machine Linux correspondant à %D et %U.

Cliquer sur l'image pour l'agrandir
adsl003.bmp
adsl004.bmp

4. Connexion sur Linux

On indique l'utilisateur "uccle" et ensuite, sont mot de passe:
Cliquer sur l'image pour l'agrandir
adsl005.bmp

La session de l'utilisateur "uccle" est ouverte et on peut voir qu'il s'est bien crée dans "/home/TEST":
adsl011.bmp

5. Bibliographie

http://www.laboratoire-microsoft.org/articles/network/conf_dhcp_win2k3/1/ (configuration DHCP sur AD)
http://irp.nain-t.net/doku.php/320kerberos:05_le_but (Explication du fonctionnement Kerberos)
http://doc.ubuntu-fr.org/tutoriel/comment_ajouter_machine_ubuntu_dans_domaine_active_directory
http://doc.ubuntu-fr.org/tutoriel/comment_integrer_machine_ubuntu_domaine_nt_samba
http://www.coagul.org/article.php3?id_article=178
http://www.gtrgrenoble.fr/projets/2007/sfu-samba/Samba-kerberos.html
http://www.supinfo-projects.com/fr/2006/integration_linux_ad/3/
http://www.linuxmail.info/troubleshooting-active-directory-centos-5/ (dépannage Kerberos)
http://lfs.traduc.org/view/blfs-5.1-fr/postlfs/mitkrb.html
http://ditwww.epfl.ch/SIC/SA/SPIP/Publications/spip.php?article843

Sauf mention contraire, le contenu de cette page est protégé par la licence Creative Commons Attribution-ShareAlike 3.0 License