Installation et configuration de Samba en mode "User" (Authentification sur un serveur OpenLDAP)

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 OpenLDAP 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.

Pour vous aider sur cette documentation vous pouvez également consulter : Installation et configuration de Samba en mode "ADS" (Authentification sur un serveur AD)

2 Informations

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 LDAP 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...

Le serveur tournera en mode autonome, avec le mode de sécurité user ou share. Avec ce mode les utilisateurs sont obligés de s'authentifier lorsqu'ils accèdent à un partage. Samba peut authentifier et gérer les permissions des fichiers en utilisant les comptes et les mots de passe contenus dans l'annuaire LDAP.

3 Samba

3.1 Installation

Pour installer samba :

Command apt-get
apt-get install samba smbclient

3.2 Configuration

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

3.2.1 Samba

Configuration File /etc/samba/smb.conf
#======================= Global Settings =======================
 
[global]
   workgroup = mydomain
   server string = %h server
   dns proxy = no
 
#### Debugging/Accounting ####
 
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0 
   panic action = /usr/share/samba/panic-action %d
 
####### Authentication #######
 
   security = user
 
   encrypt passwords = true
   obey pam restrictions = yes 
 
   guest account = Invite
   invalid users = root
 
   unix password sync = yes 
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
 
   pam password change = yes 
 
   passdb backend = ldapsam:ldap://myLDAP_IP_Server/
 
   ldap suffix = dc=openldap,dc=mydomain,dc=local
   ldap machine suffix = ou=Computers
   ldap idmap suffix = 
   ldap user suffix = 
   ldap group suffix = 
   ldap admin dn = "cn=admin,dc=openldap,dc=mydomain,dc=local"
   ldap passwd sync = yes 
   ldap ssl = no
   idmap backend = ldap:ldap://ldap.mydomain.local
   idmap uid = 40000-60000
   idmap gid = 40000-60000
 
   winbind use default domain = Yes 
   winbind trusted domains only = yes 
 
############ Misc ############
 
   socket options = TCP_NODELAY
   unix extensions = yes 
   case sensitive = yes 
   delete readonly = yes 
   ea support = yes 
 
   ### 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
        read only = no
        writable = yes
        create mask = 0700
        directory mask = 0700
        dos filemode = yes
        inherit acls = yes
        inherit permissions = yes

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

Command
/etc/init.d/samba restart

4 Intégration

4.1 Samba

Ensuite il va falloir mettre le mot de passe LDAP sinon nous allons avoir une erreur du type :

ldap_connect_system: Failed to retrieve password from secrets.tdb

Utilisons donc la commande smbpasswd pour créer le fichier /var/lib/samba/secrets.tdb :

Command smbpasswd
$ smbpasswd -w 'mypassowd'
Setting stored password for "cn=admin,dc=openldap,dc=mydomain,dc=local" in secrets.tdb

Vous pouvez vérifier via la commande smbpasswd. Si il vous demande un mot de passe, entrez le, c'est que ça marche. Sinon vous pouvez tenter de supprimer /var/lib/samba/secrets.tdb et de réessayer le processus.

4.2 OpenLDAP

Si vous êtes en mode LDAP, vous devez obtenir votre SSID sur le serveur Samba :

Command net
net getlocalsid
SID for domain MOONLIGHT is: S-1-5-21-2096052081-3008433157-1548381139-1339

Si vous ne pouvez pas vous connecter à la suite de cela, regardez les logs, vous devriez obtenir quelquechose comme ceci :

User pmavro with invalid SID S-1-5-21-2096052081-3008433157-1548381139-1319 in passdb

Vous devez alors regarder sur le serveur OpenLDAP comment il voit le serveur Samba (qui s'est normalement auto enregistré). Vous allez alors peut etre avoir le même bug que moi, c'est à dire un sambaSID différent (notament tronqué). 2 solutions s'offrent à vous :

  • Solution 1 :

Modifiez votre sambaSID sur votre machine afin qu'il soit le même que sur le serveur :

Command net
net setlocalsid S-1-5-21-2096052081-3008433157-1548381139

  • Solution 2 :

Modifiez sur le serveur OpenLDAP, le champ sambaSID du serveur samba (champ 'sambaDomainName') afin qu'il corresponde exactement au sambaSID via la commande "net getlocalsid".

4.3 Active Directory

Nous allons avoir besoin de Winbind pour que cela fonctionne :

Command apt-get
apt-get install winbind

et enregistrez votre machine dnas le domaine :

Command wbinfo
wbinfo --set-auth-user='Administrateur%SonMotDePasse'

ATTENTION : Le SID de la machine sur laquelle tourne samba doit être égale au SID du domaine. Pour vérifier, faites les commandes ci dessous :

Command net
net getlocalsid
net getdomainsid

Elles doivent retourner la même valeur !

Si ce n'est pas le cas, copier la valeur retournée par 'net getdomainsid' et faire :

Command net
net setlocalsid nouvelle_valeur_SID

Vérifier de nouveau et si les valeurs sont toujours différentes, modifier directement le SID de la machine dans l'annuaire LDAP.

5 Ressources