====== 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 : //Contexte d'utilisation du sujet du tuto. //
* Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-)
=====Introduction =====
====Qu'est-ce que samba ? ====
Samba est un logiciel libre sous licence GPL, permettant de supporter le protocole //SMB/CIFS// 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.
====Configuration générale du serveur debian====
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-serveur
>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.
* __Son adresse IP__ :
ip a s eth0
<...>
192.168.0.14/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.
* __L'utilisateur principal du système__ :
echo $USER
hypathie
====Pré-requis ====
===Création d'un compte user pour le partage de fichier===
addgroup --system sharing
===Création d'un utilisateur système correspondant à l'utilisateur samba ===
adduser --system sharing --ingroup sharing
===Mot de passe système unix ===
passwd sharing
===Création d'un fichier partageable ===
mkdir /home/sharing/public
===Mise en place des droits sur le répertoire et ses fichiers partageables ===
chown -R sharing:sharing /home/hypathie/
chmod -R 770 /home/sharing/
> Pour donner les droits récursivement à /home/sharing/public
===== Installation de samba serveur=====
apt-get update
apt-get install samba
====Configuration simple pour partage de fichiers entre Windows et Debian====
===Les fichiers samba ===
cd /etc/samba/ && ls
dhcp.conf gdbcommands smb.conf
Le fichier de configuration est **''smb.conf''**.
===Sauvegarde de smb.conf ===
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-serveur # nom du serveur visible sur le poste client Windows
server string = %h SAMBA # nom du serveur samba
path = /home/sharing
valid user = sharing
#### Networking ####
interfaces = 192.168.0.14 eth0
hosts allow = 192.168.0. 127.
####### Authentication #######
security = user
encrypt passwords = true
########## Printing ##########
; printing = bsd
; printcap name = /etc/printcap
printing = cups
printcap name = cups
use client driver = yes
#======================= Share Definitions =======================
[homes]
comment = Home Directories
browseable = no
# next parameter to 'no' if you want to be able to write to them.
read only = yes
create mask = 0700
directory mask = 0700
# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# The following parameter makes sure that only "username" can connect
# to \\server\username
# This might need tweaking when using external authentication schemes
valid users = %S
[sharing]
path = /home/sharing/
browseable = yes
writeable = yes
valid users = sharing
write list = sharing
create mask = 0770
directory mask = 700
**__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__**\\
* %u. Nom d'utilisateur pour le service courant.
* %g. Nom du groupe primaire de l'utilisateur %u.
* %U. Nom d'utilisateur pour le service courant. Ceci est le nom demandé par l'utilisateur, pas forcement le nom utilisé par Samba (cf. mappage sur autre utilisateur)
* %G. Nom du groupe primaire de l'utilisateur %U.
* %H. Répertoire personnel (home) de %u.
* %v. Version de Samba.
* %S. Le nom du service courant (par exemple le nom du partage).
* %P. Le répertoire principal du service courant.
* %h. Le nom Internet de la machine (hostname) sur laquelle tourne Samba.
* %m. Le nom Netbios de la machine cliente.
* %L. Le nom Netbios du serveur Samba. C'est le nom utilisé par le client, peut être utile pour différencier le comportement de Samba avec plusieurs noms Netbios.
* %R. Niveau de protocole utilisé (CORE, COREPLUS, LANMAN1, LANMAN2 ou NT1).
* %d. Numéro de process du processus serveur courant.
* %a. Architecture du système client. Reconnait actuellement Samba, WfWg, WinNT et Win95. Le reste renvoie UNKOWN
* %I. Adresse IP de la machine cliente
* %T. La date et l'heure courante
* %$(envar). La valeur de la variable d'environnement envar.
* %N. Nom du serveur hébergeant le répertoire personnel (home) NIS.
* %p. Chemin du répertoire personnel NIS, obtenu à partir de l'entrée NIS auto.map.
**Le caractère % permet de substituer les variables.**\\
Par exemple, si dans [global] de cet exemple on met :
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 ===
service 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 sharing
* 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 à debian serveur samba ====
Démarrer -> Ordinateur -> Réseau\\
DEBIAN-1SERVEUR apparaît\\
Double-clic sur debian-1 -> double-clic sur sharing-partage -> double-clic sur ''public''.\\
Créer un fichier, par exemple "coucou-samba".
* Vérification depuis debian-serveur samba :
ls /home/hypathie/public/
coucou-samba.txt
=====Pour aller plus loin =====
====Partage d'imprimante avec samba ====
===Édition du fichier /etc/samba/smb.conf ===
Il doit ressembler à cela.
########## Printing ##########
; printing = bsd
; printcap name = /etc/printcap
printing = cups
printcap name = cups
use client driver = yes
[printers]
comment = All Printers
browseable = yes
printable = yes
writeable = no
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
writeable = no
read only = yes
guest ok = no
write list = root, @lpadmin
* Pour ajouter les imprimantes CUPS vers Samba :
cupsaddsmb -v -U root -a
==== Connexion d'un client Linux ====
===smbclient (mode texte) ===
On peut utiliser le logiciel smbclient sur un système linux.
* Syntaxe :
smbclient [-L nom-netbios | IP-du-serveur] [-W mon-workgroup] [-U Nom-du-Compte]
La connexion ressemble à une connexion ftp.
=== Les options ===
**''-L''** : lister les partages disponibles (pour un utilisateur -U)\\
**''-W''** : nom de domaine samba (correspond à celui déclaré dans /etc/samba/smb/conf)\\
**''-U''** : nom de l'utilisateur\\
* Exemple : pour visualiser tous les partages d'un serveur.
smbclient -L //192.168.0.14 -U sharing
Enter sharing's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (debian-serveur SAMBA)
sharing Disk
print$ Disk Printer Drivers
HP-Deskjet- Printer HP Deskjet 2540 series
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
Server Comment
--------- -------
CLIENT1 client1
DEBIAN-SERVEUR debian-serveur serverA
Workgroup Master
--------- -------
WORKGROUP DEBIAN-SERVEUR
===Accès au répertoire partagé du serveur ===
smbclient //192.168.0.14/sharing -U sharing
Enter sharing's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]
smb: \> help
? allinfo altname archive blocksize
cancel case_sensitive cd chmod chown
close del dir du echo
exit get getfacl geteas hardlink
help history iosize lcd link
lock lowercase ls l mask
md mget mkdir more mput
newer open posix posix_encrypt posix_open
posix_mkdir posix_rmdir posix_unlink print prompt
put pwd q queue quit
readlink rd recurse reget rename
reput rm rmdir showacls setea
setmode stat symlink tar tarmode
translate unlock volume vuid wdel
logon listconnect showconnect .. !
On peut alors avoir accès au dossiers partagés et y faire ce qu'on veut avec les commandes smbclient lister ci-dessus !.
:)