Installation et configuration de Samba en mode "ADS" (Authentification sur un serveur AD)

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search

1 Introduction

Samba est un logiciel libre sous licence GPL supportant le protocole SMB/CIFS. Ce protocole est employé par Microsoft pour le partage de diverses ressources (fichiers, imprimantes, etc.) entre ordinateurs équipés de Windows. Samba permet aux systèmes Unix d'accéder aux ressources de ces systèmes et vice-versa.

Auparavant, les PC, équipés de DOS et des premières versions de Windows, devaient parfois installer une pile TCP/IP, et un ensemble de logiciels d'origine Unix : un client NFS, FTP, telnet, lpr, etc. Cela était lourd et pénalisant pour les PC de l'époque, et il obligeait par ailleurs leurs utilisateurs à contracter un double jeu d'habitudes, ajoutant celles d'UNIX à celles de Windows. Samba adopte donc la démarche inverse.

Son nom provient du protocole de partage et d'impression de fichiers d'IBM et réutilisé par Microsoft nommé SMB (Server message block), auquel ont été ajoutées les deux voyelles a : « SaMBa ».

Samba a été développé à l'origine par Andrew Tridgell,dès 1991 , et reçoit aujourd'hui les contributions d'une vingtaine de développeurs originaires du monde entier sous sa coordination. Celui-ci lui donna ce nom, en choisissant un nom voisin de SMB en interrogeant un dictionnaire Unix, par la commande grep :

grep "^s.*m.*b" /usr/dict/words

Lorsque les deux systèmes de partage de fichiers (NFS, Samba) sont installés pour comparaison, Samba se révèle moins performant que NFS au niveau des taux de transferts.

Néanmoins, une étude a montré que Samba 3 était jusqu'à 2,5 fois plus rapide que l'implémentation SMB de Windows serveur 2003 Voir l'information sur LinuxFr

Toutefois, samba n'est pas compatible avec IPv6

Le mode "ADS" permet d'utiliser un serveur LDAP sur un MS Windows en AD (Active Directory) afin d'authentifier les utilisateur pour accéder aux partages Samba. Cette solution est assez complexe à mettre en oeuvre mais assure une sécuritée accrue (authentification via Kerberos) pour votre serveur.

Notes : Il est impératif d'avoir mis en place les ACL avant de continuer.

Active Directory est au coeur des systèmes Microsoft Windows, c'est lui qui est en charge de la gestion des comptes utilisateurs, des authentifications, mais aussi d'un grand nombre d'informations sur les machines.

Active Directory repose sur différents protocoles réseaux :

  • DNS (résolution de noms)
  • LDAP (interrogation de l'annuaire)
  • Kerberos V (authentification, distribution de tickets)
  • NTP (synchronisation date et heure des machines)
  • SMB/CIFS (partage des ressources)

2 Introduction à la gestion des utilisateurs UNIX

La gestion des comptes utilisateur LINUX est réalisée à l'aide de différents composants conformément à la philosophie UNIX (un programme fait une seule chose et la fait bien). Parmi ces différents acteurs, on trouve :

Les PAM (Pluggable Authentification Modules) permettent entre autres de sélectionner différentes procédures et sources d'authentification (ex: Authentification par cartes à puces, Bases de données, Annuaires...)

NSS (Name Services Switch) permet de fournir à Unix des services de correspondances entre noms, de toutes sortes (noms de machines et noms d'utilisateurs), et les identifiants de ces mêmes objets pour la machine (adresses IP et uid/gid) en utilisant diverses sources (Fichiers, Annuaires...).

3 Intégration d'un serveur Samba dans un domaine Active Directory

L'intégration d'un serveur Samba dans un domaine Active Directory nécessite la configuration d'un client Kerberos sur la machine Samba. Kerberos est un système d'authentification qui permet aux serveurs d'authentifier les utilisateurs et de communiquer en sécurité. Afin de réaliser l'intégration du serveur LINUX au domaine AD des composants additionnels sont requis.

3.1 Kerberos

Il est nécessaire de configurer un client Kerberos afin de valider l'identité du serveur LINUX dans le réseau Microsoft. Celui dialoguera avec le serveur AD pour effectuer des demandes de "tickets" au KDC qui seront utilisés pour assurer l'authenticité et la sécurité des communications.

3.1.1 Synchronisation du temps

Il faut etre sur dans un premier temps que notre AD et notre serveur Samba soient bien à la meme heure. Pour cela, il n'y a qu'a synchroniser l'heure avec un serveur NTP :

apt-get install ntpdate
ntpdate ntp.ciril.fr

3.1.2 Installation du client Kerberos

Il faut maintenant installer l'authentification par Kerberos :

apt-get install krb5-clients krb5-user 

3.1.3 Configuration du client Kerberos

Veuillez éditer le fichier /etc/krb5.conf :

[libdefaults]
	    default_realm = EXAMPLE.COM
 
[realms]
EXAMPLE.COM = {
	    kdc = ad.example.com
	    admin_server = ad.example.com
}
[domain_realms]
	    .example.com = EXAMPLE.COM

Voici les correspondances :
IMPORTANT : Il est impératif de respecter la casse pour tous les noms.

  • EXAMPLE.COM : Nom DNS de l'AD
  • ad.example.com : Nom FQDN

3.1.4 Vérification de la connexion Kerberos

kinit [email protected]
klist
kdestroy

4 Samba

Pour accéder aux ressources partagées (SMB/CIFS) du domaine Windows, une installation de Samba est requise sur le serveur Linux qui jouera principalement le role de client SMB/CIFS.
Samba permettra également à l'aide de commandes MSRPC de dialoguer avec le serveur AD pour effectuer diverses opérations : ajout des informations sur le serveur LINUX dans l'annuaire, lister les comptes/groupes utilisateur, transmettre les demandes d'authentification...

4.1 Installation

Pour installer samba :

apt-get install samba smbclient

4.2 Configuration

Pour configurer samba, éditez le fichier /etc/samba/smb.conf :

#======================= Global Settings =====================================
[global]
        server string = Samba # Nom du serveur Samba
        socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 # Optimisation du socket
        realm = EXAMPLE.COM # REALM Kerberos
        workgroup = workgroup # Nom du Domaine
        os level = 80 # Niveau du serveur Samba
 
        ## Restrictions ##
        hosts deny = ALL # On interdit tout le monde
        hosts allow = 192.168.0.0/255.255.255.0 127.0.0.1 10.8.0.0/255.255.255.0 # On autorise seulement les demande venant de ces IP
        bind interfaces only = yes
        interfaces = eth0 # On autorise seulement les demandes venant de cette interface réseau
 
        ## Encoding ## Affichage Europeen avec accents
        dos charset = 850
        display charset = UTF8
 
        ## Name resolution ## Resolutions des noms
        dns proxy = no
        wins support = no
        name resolve order = lmhosts host wins bcast
 
        ## Logs ##
        max log size = 50
        log file = /var/log/samba/%m.log
        syslog only = no
        syslog = 0
        panic action = /usr/share/samba/panic-action %d
 
        ## Passwords ##
        security = ADS # Active Directory Server gère la sécurité des ressources partagées
        encrypt passwords = true # Active Directory n'accepte pas les mots de passe en clair
        unix password sync = no
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n .
        invalid users = root # Ne pas autoriser ces utilisateurs.
 
        ## Restrictions ##
        hide special files = no # Cacher les fichiers spéciaux
        hide unreadable = no # Cacher les fichiers non lisible
        hide dot files = no # Cacher les fichiers cachés (commencant par un ".")
 
        ## Resolve office save problems ##
        oplocks = no # Résoud des problèmes de compatibilité avec les version > MS Office 2002
 
        ## ACL SUPPORT ##
        nt acl support = yes
        acl compatibility = auto
        acl check permissions = yes
        acl group control = yes
 
#======================= Share Definitions =======================
 
[Homes]
        comment = Home Directories
        browseable = yes # Permet de parcourir une arborescence
        read only = no # Pas de lecture seule
        writable = yes # Autorise l'écriture
        create mask = 0777 # Droits sur la création de fichiers
        directory mask = 0777 # Droits sur la création de dossiers
        veto files = /.DS_Store/.fuse_*/ # Ne pas affichier les objets : ".DS_Store" et ".fuse_*"
        dos filemode = yes
        inherit acls = yes
        inherit permissions = yes
 
[netlogon]
        comment = Network Logon Service
        path = /mnt/test
        read only = no
        dos filemode = yes
        inherit acls = yes
        inherit permissions = yes
        browseable = yes
        writable = yes
        create mask = 0777
        directory mask = 0777
        valid users = @"EXAMPLE.TEST+users"
        admin users = @"EXAMPLE.TEST+administrators"
 
[Sauvegardes]
        comment = Sauvegardes
        path = /saves # Dossier de partage
        browseable = yes
        writable = yes
        veto files = /.DS_Store/.fuse_*/

Adaptez tout ceci pour votre configuration. Ensuite redémarrez Samba :

/etc/init.d/samba restart

4.3 Création du compte machine pour le serveur Samba dans Active Directory

Ceci va ajouter la machine Samba dans AD :

net ads join -U Administrateur (pour quitter 'net ads leave')

4.3.1 Vérification d'accès via Kerberos aux ressources partagées du serveur "AD"

kinit [email protected]
smbclient -L //AD -k
kdestroy

4.3.2 Vérification du "montage" d'une ressource partagée

mkdir /mnt/test
mount -t cifs -o username=Administrateur //ad/Public /mnt/test

Voir également les commandes :

net ads info

et

net ads status -U Administrateur

5 Authentification unifiée UNIX / Windows

Le composant Winbind de Samba permet de résoudre les problèmes d'authentifications unifiées. Il permet principalement à l'aide de PAM (Pluggable Authentication Modules) et d'NSS (Name Service Switch) de faire apparaître des utilisateurs d'un domaine Windows comme des comptes UNIX.

5.1 Installation

apt-get install winbind

5.2 Configuration

La configuration de Winbind se fait dans le fichier de configuration de Samba. Editez donc /etc/samba/smb.conf :

        ## Integration Winbind in AD ##
        idmap uid = 10000-20000 # Correspondances des uids entre le serveur Linux et Active Directory
        idmap gid = 10000-20000 # Correspondances des gids entre le serveur Linux et Active Directory
        winbind enum users = yes # Lister les utilisateurs au démarrage de Winbind
        winbind enum groups = yes # Lister les groupes au démarrage de Winbind
        winbind separator = + # Caractère de séparation domaine/nom d'utilisateur (ex: DOMAINE+utilisateur)
        winbind use default domain = yes # Si le domaine n'est pas spécifié on utilise celui par défaut
        template shell = /bin/bash # Shell par défaut
        template homedir = /home/win2k3/%D/%U # Répertoire home par défaut

5.3 Vérification du fonctionnement de Winbind

Adaptez tout ceci pour votre configuration. Ensuite redémarrez Samba et Winbind:

/etc/init.d/samba restart
/etc/init.d/winbind restart 
  • Interrogation des comptes utilisateur: wbinfo -u
  • Interrogation des groupes: wbinfo -g

5.4 Ajout du support Winbind à NSS

Editez le fichier /etc/nsswitch.conf :

passwd: compat winbind
group:  compat winbind

Adaptez ces lignes à votre configuration.

5.5 Vérification du fonctionnement NSS+Winbind

Ceci devrait vous afficher un mix entre votre configuration locale des utilisateurs (/etc/passwd), des groupes (/etc/group) et des comptes qui se trouvent dans l'AD :

getent passwd
getent group

5.6 Ajout du support Winbind à PAM

5.6.1 Debian

Pour tout ce qui suit, il faut adapter à votre configuration. Editez /etc/pam.d/common-auth :

auth    sufficient      pam_winbind.so
auth    required        pam_unix.so nullok_secure

Ensuite éditez /etc/pam.d/common-account :

account sufficient      pam_winbind.so
account required        pam_unix.so

Maintenant éditez /etc/pam.d/common-session :

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0077

Si vous n'avez pas ces fichiers, il est possible que tout ce trouve dans /etc/pam.d/system-auth.

5.6.2 Red-Hat

Pour tout ce qui suit, il faut adapter à votre configuration. Editez /etc/pam.d/login :

auth       required     pam_securetty.so
auth       sufficient   pam_winbind.so
auth       sufficient   pam_unix.so use_first_pass
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    sufficient   pam_winbind.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth
session    optional     pam_console.so

6 Vérification de l'authentification PAM+Winbind

Créons un dossier :

mkdir -p /home/win2k3/EXAMPLE0

Il est possible de se logger sur une console avec un compte déclaré dans l'AD :

  • 1 ère fois essaye de s'authentifier sur l'AD.
  • 2 ème mot de passe pour le système local.

On peut également faire un ssh, mais d'abord, il faut faire un restart du service :

/etc/init.d/ssh restart
ssh [email protected]

Plus besoin de créer de comptes POSIX ni Samba pour les partages :

/etc/init.d/samba restart
smbclient -L localhost -U utilisateurAD

7 Connection

7.1 Windows

Pour vous connectez depuis windows, dans une fenetre de liens, tapez ceci :

\\IP_du_serveur_samba\Nom_du_partage

Vous accéderez directement au partage

7.2 Unix (Linux/Mac...)

Vous devez avoir smbfs d'installer avant de continuer :

apt-get install smbfs

Ensuite, il suffit de créer un dossier et de monter le partage dedans :

mkdir saves
mount -t cifs -o username=user,password=mot_de_passe //192.168.0.1/saves ./saves

8 Références

Samba : http://www.samba.org
Documentation ADS
Documentation Samba ADS sous CentOS