Samba est un logiciel libre et une implémentation du protocole propriétaire SMB/CIFS sous GNU/Linux, initialement développée par l'australien Andrew Tridgell. Il est sous licence GNU GPL 31. Son nom provient du protocole SMB (Server message block), le nom du protocole standard de Microsoft, auquel ont été ajoutées les deux voyelles a : « SaMBa ».
À partir de la version 3, Samba fournit des fichiers et services d'impression pour divers clients Windows et peut s'intégrer à un domaine Windows Server, soit en tant que contrôleur de domaine principal (PDC) ou en tant que membre d'un domaine. Il peut également faire partie d'un domaine Active Directory. Il fonctionne sur la plupart des systèmes Unix, comme GNU/Linux, Solaris, AIX et les variantes BSD, y compris Apple, Mac OS X Server (qui a été ajoutée au client Mac OS X en version 10.2). Samba fait partie intégrante de presque toutes les distributions GNU/Linux.
Toute la configuration de SAMBA y repose.
Lorsque SAMBA ne trouve pas les directives dans ce fichier,
il utilise les valeurs par défaut. Il est divisé en sections :
Comportement général de SAMBA.
Partage des répertoires utilisateurs, sans les énumérer nominativement.
Partage des imprimantes Unix sans avoir à les énumérer.
Partage créé pour l'utilisation de scripts de connexion pour les utilisateurs.
SAMBA permet l'utilisation de variables dont les valeurs seront posées pour chaque connexion.
Il est donc possible d'utiliser ces variables dans le smb.conf pour constituer certaines options :
| %a | architecture du client |
|---|---|
| %I | adresse IP du client |
| %M | nom DNS du client |
| %m | nom NETBIOS du client |
| %u | identité de l'utilisateur |
| %U | identité souhaité par l'utilisateur |
| %H | répertoire de connexion de l'utilisateur |
| %g | groupe principal de l'utilisateur |
| %S | nom du partage |
| %P | répertoire racine du partage |
| %d | PID du processus courant |
| %h | nom DNS du serveur SAMBA |
| %L | nom NETBIOS du serveur SAMBA (%N aussi) |
| %v | version de SAMBA |
| %T | date et heure système |
| %var | valeur de la variable var |
testparm -sv
Il existe avec Samba plusieurs niveaux de sécurité concernant les connexions aux ressources partagées.
L'option security du fichier smb.conf permet de gérer le niveau de sécurité.
Par défaut, “security = user”.
Les principales directives de partages de fichiers :
| PARAMETRES | VALEUR PAR DEFAUT | DESCRIPTION |
|---|---|---|
| path = | chemin du répertoire à partager | |
| comment = | texte visible dans le voisinage réseau | |
| guest ok = yes/no | no | partage en accès libre sans authentification |
| valid users = | tous | liste des users autorisés à se connecter à la ressource |
| printable = true/false | false | partage un service d'impression et non de répertoire |
| writeable = yes/no | no | permet ou non l'écriture sur le répertoire (contraire de read only) |
| write list = | tous les utilisateurs | liste des users autorisés à écrire |
| browseable = yes/no | yes | visibilité du partage par tous, même les users non autorisés |
| create mode/mask = | 0744 | droits max accordés à un fichier créé dans la ressource (AND avec le UMASK) |
| directory mode/mask = | 0755 | droits max accordés à un repertoire créé dans la ressource (AND avec le UMASK) |
| force directory mode = | 000 | droits imposés lors de la création du répertoire |
| force group = | impose un groupe propriétaire à la création de fichiers (pas de @ devant le groupe) | |
| hide dot files = | yes | cache les fichiers cachés Linux (commençant par un point) |
| hide files | permet de cacher des fichiers (* et ? sont utilisables, la casse doit être respecter) | |
| hosts allow/deny = | allow=toutes deny=aucune | filtrage IP |
| max connections = | 0 | nombre de connexions à la ressource (0=illimité) |
[homes] comment = répertoire personnel # commentaire affiché dans l'explorateur browseable = no # partage caché writable = yes # accès en écrite create mode = 600 # permissions positionnées à la création
[public] path = export/public # répertoire partagé (droits 777 pour écriture de tous) public = yes # partage accessible de tous users authentifiés writeable = yes # accessible en RW create mode = 0755 # fichiers créés en RO sauf pour le propriétaire
[compta] path = /export/compta # répertoire partagé (droits 770 pour écriture groupe) public = no # partage non accessible de tous valid users = @compta # @ spécifie un groupe Unix mais les users doivent être dans la base samba writeable = yes # accessible en RW pour les users autorisés create mode = 0640 # permissions par défaut des nouveaux fichiers
[global] security = share [test] path = /export/test # Les utilisateurs pourront guest ok = no # accéder à la ressource valid users = @compta # en validant le mot de passe writeable = yes # de user1 users = user1 #
Pour créer un compte utilisateur Samba, le compte système doit impérativement existé (/etc/passwd)
useradd test pdbedit -a test smbpasswd test
pdbedit -Lv test
aptitude install smbfs
Exemple de montage de ressource partagée:
mount -t cifs -o user=test,pass=PASSWORD,iocharset=utf8,uid=test //srv-lan/public /mnt/public
smbclient -L srv-lan -U root
Fichier smb.conf configuré pour :
#======================= Global Settings ======================= [global] workgroup = aldebaran server string = srv-lan.aldebaran.local netbios name = srv-lan domain master= yes wins support = yes domain logons = yes time server= yes logon path = \\%h\%U\%U logon script = start.bat nt acl support = yes #### Networking #### interfaces = 192.168.0.1/24 eth0 #### Debugging/Accounting #### # This tells Samba to use a separate log file for each machine # that connects # log file = /var/log/samba/log.%m # Cap the size of the individual log files (in KiB). # max log size = 1000 # If you want Samba to only log through syslog then set the following # parameter to 'yes'. syslog only = yes syslog = 3 panic action = /usr/share/samba/panic-action %d ####### Authentication ####### security = user encrypt passwords = true passdb backend = tdbsam map to guest = bad user usershare allow guests = yes #======================= Share Definitions ======================= [distrib] comment = Dossier distrib (public en ro) browseable = yes path = /export/distrib guest ok = yes guest only = yes read only = yes writeable = no #create mask = 0700 [admin] path = /export/admin comment = Dossier admin (privé en rw) browseable = yes public = no force group = admin valid users = @admin writeable = yes create mask = 0660 #force directory mode = 750 [homes] path = /export/homes/ comment = Home Directory NT browseable = no read only = no writeable = yes create mask = 0600 directory mask = 0700 profile acls = yes [netlogon] path = /export/netlogon comment = Network Logon Service guest ok = yes browseable = no writeable = no read only = yes