real = son.kerberos.REALM
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 d'intéropérabilité, suite à 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'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.
Prenons, pour exemplifier une configuration simple, une machine virtuelle sur laquelle il a été installé un serveur Debian.
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.
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.
echo $USER
hypathie
addgroup --system sharing
adduser --system sharing --ingroup sharing
passwd sharing
mkdir /home/sharing/public
chown -R sharing:sharing /home/hypathie/
chmod -R 770 /home/sharing/
Pour donner les droits récursivement à /home/sharing/public
apt-get update
apt-get install samba
cd /etc/samba/ && ls</code <code>dhcp.conf gdbcommands smb.conf
Le fichier de configuration est smb.conf
.
mv smb.conf smb.conf-OLD
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
/etc/samba/smb.conf
est constitué par section.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 sursecurity
: 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 modedomain
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 “realm”1) et le mot de passe du serveur d'authentification 2)
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 avecread 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 dessouswrite 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
etforce 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
Variables de substitution du fichier de configuration smb.conf
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 :
testparm smb.conf
service restart 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
smbpasswd -L
smbpasswd - d utilisateur
smbpasswd - x utilisateur
Démarrer → clic droit sur “Ordinateur” → “Propriétés”
On voit : Groupe de travail : WORKGROUP
Démarrer → Panneau de configuration → Centre réseau et partage → Groupe résidentiel → Modifier les paramètre de partage avancé…
→ Activé le partage réseau
→ Autoriser Windows à gérer les connexions des groupes résidentiels.
→ Activé la découverte du réseau
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”.
ls /home/hypathie/public/ coucou-samba.txt
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
cupsaddsmb -v -U root -a
On peut utiliser le logiciel smbclient sur un système linux.
smbclient [-L nom-netbios | IP-du-serveur] [-W mon-workgroup] [-U Nom-du-Compte]
La connexion ressemble à une connexion ftp.
-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
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
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 !.
:)