====== Installer et configurer samba ======
* Objet : Mise en place d'un serveur samba pour le partage de fichiers avec un client Windows
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : Sur un LAN partage de fichiers entre différents OS
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
* Suivi : {{tag>obsolète}} - Pour choisir, voir les autres Tags possibles dans [[:atelier:#tags|l'Atelier]].
* Création par [[user>Hypathie]] 12/09/2014
* Testé par <...> le <...>
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?pid=248105#p248105 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
=====Introduction =====
====Qu'est-ce que samba ? ====
Samba est un logiciel libre sous licence GPL, permettant de supporter le protocole //SMB/CIFS// pour le partage de ressources réseau.\\
Le partage réseau a été développé par IBM en 1985 pour OS/2 et s'appelait alors LAN Manager. Il a ensuite été mis en avant par Microsoft sous le nom de //SMB// pour en faire un tout nouveau protocole de partage. Il a été appelé aussi //CIFS// (Common Internet File System ) entre 1998 et 2006, et a encore été renommé sous le nom de //SMB2// pour la sortie de Windows Vista et conserve ce nom jusqu'à Windows 8.\\
Ces termes sont à connaître car ils apparaissent pour certains points de la configuration de samba, qui se charge de compatibilité avec ce protocole de partage réseau mais aussi avec différents produits Microsoft, comme NetBios (TCP/IP) et le nommage wins et maintenant DNS, et MSRPC (appel de procédure à distance), et il peut aussi être utilisé comme contrôleur de domaine "actif directory".
Le protocole //SMB/CIFS// est toujours un logiciel propriétaire, et ces spécifications étaient donc fermées au début. Mais pour des raisons [[http://fr.wikipedia.org/wiki/Interop%C3%A9rabilit%C3%A9|d'intéropérabilité]], suite à [[http://fsfe.org/activities/ms-vs-eu/ms-vs-eu.fr.html|un procès]], Microsoft a été contraint d'ouvrir certaines de ses spécifications qui ont été distribuées par le //MSDN// (open Specifications Developer Center).
Samba a donc été créé afin de rendre possible la communication entre différents systèmes d'exploitations d'un même réseau, mais on peut aussi l'utiliser pour le partage de Linux à Linux.\\
On le doit d'abord aux travaux de rétro-ingénierie d'[[http://fr.wikipedia.org/wiki/Andrew_Tridgell|Andrew Tridgel]] qui est son principal développeur. Depuis 2007, et la fermeture des spécifications //SMB// le développement et les performances de samba ne cessent de se développer.
**tuto Obsolète**
====La structure de samba ====
=== Comment se lance samba ?===
Il peut être lancé soit soit par des daemons directs, par inetd qui est le plus sécurisé mais avec un temps de latence plus long.
* Avec le daemon smbd (Server Message Block Daemon) :
Dans cas il s'agit du partage réseau.
* Avec nmbd (NetBios Name Service Daemon):
Dans ce cas il s'agit du serveur WINS.
===Les ports utilisés par samba===
* TCP et UDP 137 : NetBIOS Name Service
* UDP 138 : NetBios Datagram Service
* TCP 139 : NetBIOS Session Service
* TCP et UDP 445 : Services de dossiers partagés Windows
=====Mise en place d'un partage de fichiers =====
====Configuration générale du système sur lequel on installe samba====
Prenons, pour exemplifier une configuration simple, une machine virtuelle sur laquelle il a été installé un serveur Debian.
* __Le nom du système hôte sur lequel va être installé samba__ :
hostname
debian-1
>Attention à la confusion entre serveur (samba ou autre) installé sur un système qui reste malgré tout "l'hôte", on va dire de ce système.
* __L'utilisateur principal du système__ :
echo $USER
first-user
* __Son adresse IP__ :
ip a s eth0
ou mettez votre interface, exemple:
ip a enp2s0
<...>
inet 192.168.0.15/24 brd 192.168.0.255
<...>
>Il s'agit d'une machine virtuelle avec accès par pont dont l'adresse IP a été préalablement fixée par le serveur DHCP au niveau du FAI.
====Pré-requis à l'installation du serveur samba====
===Création d'un compte user pour le partage de fichier===
addgroup --system hypathie
===Création d'un utilisateur système correspondant à l'utilisateur samba ===
adduser --system hypathie --ingroup hypathie
===Création d'un fichier partageable ===
mkdir /home/hypathie/public
===Mise en place des droits sur le répertoire et ses fichiers partageable ===
chown -R hypathie:hypathie /home/hypathie/
> -R (récursivement) pour que le dossier déjà créé dans ce répertoire appartienne aussi à l'utilisateur et au groupe "hypathie".
> Voir : [[doc:systeme:chown]]
chmod -R 770 /home/hypathie/
> Pour donner les droits de lecture, écriture et exécution à l'utilisateur "hypathie" sur tous fichiers et dossiers créés dans ce dossier.
> On peut aussi donner les droits de lecture pour les "autres" 775.
> Voir [[doc:systeme:droits-unix]] et [[doc:systeme:droits-unix-bis]]
> Et [[doc:systeme:chmod]]
===== Installation de samba serveur=====
apt-get update
apt-get install samba
====Configuration simple pour partage de fichiers entre Windows et Debian====
===Les fichiers samba ===
ls /etc/samba
Le fichier de configuration est **''smb.conf''**.
===Sauvegarde de smb.conf ===
#Se placer dans le répertoire /etc/samba
cd /etc/samba
mv smb.conf smb.conf-OLD
===Édition de smb.conf ===
vim smb.conf
[global]
workgroup = WORKGROUP # par défaut et à laisser tel quel
netbios name = debian-1 # nom du serveur visible sur le poste client Windows
server string = %h server # nom du serveur samba
hosts allow = 192.168.0. 127. # ajouté et à modifier selon l'IP du réseau local
security = user # à décommenter
bind interfaces only = yes # mettre "yes" pour utiliser le choix des interfaces (ligne au dessous)
interfaces = 192.168.0.15/24 # Pour éviter le wifi, on peut mettre à la place de l'IP/masque, le nom de l'interface "eth0:0"
[hypathie] # ajouté et à modifier selon le répertoire de partage
path = /home/hypathie/ # créé sur le système lors de la création d'un nouvel utilisateur
read only = no
browseable = yes
writeable = yes
valid users = hypathie
write list = hypathie
create mask = 0700 # droits posix (octal = 0 devant 700): lecture, écriture, exécution pour l'utilisateur seulement
directory = 700
force user = nobody # surtout si on partage la racine
force group = nogroup
**__Le fichier ''/etc/samba/smb.conf'' est constitué par section.__**\\
Les sections principales sont :
* **[global]** : paramètres généraux (indiqué par un G dans le man).
Les paramètres obligatoires sont :
workgroup = MON-GROUPE
> Et il faut aller sur Windows créer un groupe du même nom
>ou utiliser WORKGROUP qui le nom par défaut sur Windows
netbios name = Nom-du-serveur-samba
server string = serveur %h
security = user # mise en place de la politique d'authentification
encrypt passwords = true
> À savoir sur **''security''** : Le mode "user" est le plus intéressant, mais il y a d'autres modes d'authentification que la mise en place d'un mot de passe utilisateur chiffré.
> Le mode **''domain''** passe par workgroup qui définit un contrôleur de domaine.
> Le mode "server" a été déprécié, il ne faut pas l'utiliser.
> Il y a aussi le ADS qui se base sur Active Directory. Il faut alors définir un "[[http://igm.univ-mlv.fr/~duris/NTREZO/20032004/Debon-Victor-Kerberos-v10.pdf|realm]]"((''real = son.kerberos.REALM'')) et le mot de passe du serveur d'authentification ((''passwd server = son.kerberos.server''))
* **[partage]** : nom d'un partage (tout les paramètres indiqués par un S dans le man, également compatibles avec la section global).
On l'a appelé dans l'exemple [hypathie]. Les paramètres essentiels sont :
path = /chemin/de_ce_répertoire/à_partager_sur_le_réseau
> Attention aux droits placés sur le répertoire et ses sous-répertoires et fichiers
> Il est bon pour la sécurité de mettre en place une politique de partage :
> **lecture / écriture** avec **''read only''** :
> No ou Yes pour ne pas permettre ou permettre l'écriture.\\ Restriction de l'écriture à un utilisateur ou une liste précisée avec\\ **''read only = Yes''** et en dessous **''write list = user1, user2, ...''**
> **Restriction de l'accès au partage à un ou plusieurs utilisateur ou à un groupe** :
>**''valid users = user1, user2, @group1101''**
> Pour forcer tous les utilisateurs à être reconnu comme un seul utilisateur du système : **''force user = nobody''**\\ et **''force group = nogroup''**.
> Comme cela si quelqu'un vient sur le partage, il a les droits de tout autre utilisateur, et ne peut aller à la racine.\\
> **Les droits au niveau de samba**:
> Les droits UNIX surchargent les droits samba, mais samba a besoin qu'on lui spécifie les droits appliqués par défaut sur les fichiers de partages créés.
> Droits à la création des **fichiers**
> Par exemple pour lecture, écriture, exécution pour utilisateur et son groupe, et lecture, exécution pour les autres :
create mask = 0775
> Droits (POSIX) à la création des **dossiers** \\ Rappel, pour se déplacer dans un répertoire, c'est l'exécution, pour créer, supprimer renommer un fichier d'un répertoire niveau dossier, c'est l'écriture, et la lecture c'est l'ouverture d'un fichier.
>Pour lecture, écriture, exécution pour utilisateur seulement:
create mask = 700
* **[printers]** et **[print$]** : partage d'imprimantes
* **[homes]** : partage du répertoire personnel des utilisateurs
**__Variables de substitution du fichier de configuration smb.conf__**\\
Le caractère **%** permet de substituer les variables.
* %U : Nom de l'utilisateur\\
* %G : Groupe de l'utilisateur\\
* %h : Nom du serveur Samba\\
* %m : Nom NetBIOS du client Samba\\
* %L : Nom NetBIOS du serveur Samba\\
* %M : Le nom internet du client\\
* %a : Type de la machine cliente\\
* %I : IP de la machine cliente\\
* %i : IP local de la machine cliente\\
* %T : Date et heure courante\\
* %D :Nom de domaine\\
* %I : IP de la machine cliente\\
Par exemple, si dans [global] de cet exemple on mettait :
server string serveur %h : samba %v
Il s'affichera "**serveur debian-1 : samba la version de samba**".
**__Références__** :\\
* Doc : [[http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html]]
* En français [[http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-fr-4/s1-samba-servers.html]]
* En anglais : [[http://www.mirabellug.org/docs/samba/c105.html]]
* Autre exemple expliqué : [[http://vpicot.fr/tutoriels/17-installation-et-configuration-de-samba-sur-debian-lenny]]
===Vérifier la syntaxe du fichier de configuration ===
testparm smb.conf
===Ré-initialisation de samba ===
Sur Wheezy et précédents:
service samba restart
Sur Jessie et suivant:
systemctl restart samba
===Ajout d'un compte user dans samba ===
Ce compte doit correspondre à un compte utilisateur existant du système debian. Il faut en créer pour des raison de sécurité.\\
La commande suivante se charge d'en créer un dans les données de samba.\\ Il faut donner un mot de passe pour le compte samba, qui est différent du mot de passe UNIX qui a été demandé quand on a utilisé la commande **''adduser nouvel-utilisateur''**.
smbpasswd -a hypathie
* Pour lister les utilisateurs samba :
smbpasswd -L
*Pour désactiver un utilisateur :
smbpasswd - d utilisateur
*Pour supprimer un utilisateur :
smbpasswd - x utilisateur
===== Côté client Windows =====
===Groupe de travail ===
* Sur le client windows :
Démarrer -> clic droit sur "Ordinateur" -> "Propriétés"\\
On voit : **''Groupe de travail : WORKGROUP''**
===Activer partage réseau===
Démarrer -> Panneau de configuration -> Centre réseau et partage -> Groupe résidentiel -> Modifier les paramètre de partage avancé...\\
* Résidentiel (doit être sélectionné) :
-> Activé le partage réseau\\
-> Autoriser Windows à gérer les connexions des groupes résidentiels.\\
* Public (doit être sélectionné) :
-> Activé la découverte du réseau\\
===Accéder au serveur samba ===
Démarrer -> Ordinateur -> Réseau\\
DEBIAN-1 apparaît\\
Double-clic sur debian-1 -> double-clic sur hypathie-partage -> double-clic sur ''public''.\\
Créer un fichier, par exemple "coucou-samba".
===Vérification ===
Sur le serveur samba le fichier créé depuis Windows est bien là. Et peut être édité depuis l'un ou l'autre poste.
ls /home/hypathie/public/
coucou-samba.txt