Installation et configuration de Samba en mode "ADS" (Authentification sur un serveur AD)
Contents
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 Administrateur@EXAMPLE.COM 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 Administrateur@EXAMPLE.COM 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 Administrateur@localhost
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