Samba

De Wiki doc


Samba est une implémentation libre des protocoles SMB/CIFS de Microsoft. Il est utilisé pour mettre à disposition des ressources sur un réseau local et il comprend l'usage d'une dizaine de services ainsi que d'une douzaine de protocoles. Il permet entre autre les usages suivants:

  • Partage de fichiers
  • Partage d'imprimantes
  • Service Active Directory comprenant une version modifiée de:
    • Kerberos
    • LDAP
  • NetBIOS sur TCP/IP (NBT)
  • Protocole d'appel distant DCE/RPC, MSRPC
  • Serveur WINS aussi appelé NetBIOS Naming Service (NBNS)
  • Les protocoles d'un domaine NT:
    • L'ouverture d'une session NT
    • Une base de données Security Account Manager (SAM)
    • Un service Local Security Authority (LSA)
    • Un service d'impression (Spoolss)
    • NTLM

Le gros plus de cette solution étant sont extrême interopérabilité tant de plateformes que de régions linguistiques puisque géré par les systèmes Linux, BSD, Mac OS X et Windows avec un support des encodages UTF-8.

Ce projet est rendu possible par un accord d'information technique signé par Microsoft le 20 décembre 2007 faisant suite à un procès perdu contre l'Union européenne.

INFORMATION

Cette documentation se base sur une Linux Debian 9.

Ports utilisés:

  • 137 udp
  • 138 udp
  • 138 tcp
  • 139 tcp

Installation

apt install samba 

Configuration

Nous allons partir d'un fichier vierge. Il faut donc renommer l'ancien pour ne pas qu'il soit utilisé

mv /etc/samba/smb.conf /etc/samba/smb.conf.old

Création d'un nouveau fichier

vim /etc/samba/smb.conf
[global]
server string = SAMBA-YCHARBI
workgroup = LAB
netbios name = SAMBA-YCHARBI
public = yes
encrypt passwords = true
guest ok = yes
map to guest = Bad User
dos charset = CP850
unix charset = UTF8
unix extensions = no
time server = yes
log file = /var/log/samba/log.%m
log level = 2
#Valeur en KB
max log size = 500
#force user = nobody
#force group = nogroup
server min protocol = SMB3
min protocol = SMB3

name resolve order = lmhosts wins bcast host

[Musiques]
path = /home/toto/Musiques
public = yes
read only = yes
writeable = no
browseable = yes
valid users = toto, titi, nobody
comment = Mes musiques

[Documentation]
path = /home/toto/Documentation
public = no
read only = yes
writeable = no
browseable = yes
valid users = toto
#force user = toto
#force group = toto
comment = Ma documentation

[Programmation]
path = /home/toto/Programmation
public = no
read only = yes
writeable = no
browseable = yes
valid users = toto
comment = Mes programmes

[Vidéos]
path = /home/toto/Vidéos
public = yes
read only = yes
writeable = no
browseable = yes
valid users = toto, titi, nobody
comment = Mes vidéos

[Logiciels]
path = /home/toto/Logiciels
public = yes
read only = no
writeable = yes
browseable = yes
valid users = toto, titi, nobody
comment = Mes logiciels

[Partage]
path = /home/toto/Partage
public = yes
read only = no
writeable = yes
browseable = yes
valid users = toto, titi, nobody
comment = Partage commun
#create mask = 0777
#force user = nobody
#force group = nogroup

[Windows]
path = /home/toto/Windows
public = yes
read only = yes
writeable = no
browseable = yes
valid users = toto, nobody
comment = Installation de Windows

[Titi]
path = /home/titi
public = no
read only = no
writeable = yes
browseable = yes
valid users = titi
comment = Fichiers de Titi

Comme nous pouvons le constater, un partage est défini par une section commençant par son nom entre crochets. Les accents sont supportés (pour le montage dans fstab, il faut utiliser la syntaxe décrite dans le document dédié) et il est possible de définir des paramètres personnalisés à chacun d'eux.

ATTENTION

Il faut bien penser à créer les répertoires des partages pour que le démon puisse s'exécuter correctement.

Redémarrer le démon

systemctl restart smbd.service

Création d'un utilisateur

Pour qu'un utilisateur puisse accéder aux partages, il faut qu'il existe au préalable en tant qu'utilisateur POSIX et SAMBA. Nous désactiverons la possibilité de connexion POSIX et définirons un mot de passe dédié aux seuls utilisateurs SAMBA (afin qu'une connexion sur le shell du serveur soit impossible par ce biais). Enfin, il faudra gérer les droits d'accès aux fichiers du serveur.

Utilisateur POSIX

Rappel, les fichiers gérants les utilisateurs utilisent un formatage sous forme de champ GECOS. Je ne vais pas revenir sur la compréhension de ce formatage proche du CSV.

Création POSIX

Création de l'utilisateur "toto"

adduser toto

On lui définit un mot de passe bidon que l'on va supprimer après.

Interdiction d’accès

Suppression du mot de passe

vim /etc/shadow

Il faut remplacer le hash du mot de passe après toto: par un astérisque. Voici le résultat:

toto:*:17368:0:99999:7:::

Changement du shell de connexion

Afin de garantir que cet utilisateur ne servira pas pour une session shell, nous allons lui donner le shell spécial "false":

vim /etc/passwd

Dans le dernier champ concernant notre utilisateur, lui donner /bin/false. Voici le résultat:

toto:x:1000:1000:,,,:/home/toto:/bin/false

Utilisateur SAMBA

Création de l'utilisateur

smbpasswd -a toto

Suppression d'un utilisateur

smbpasswd -a toto

Aide sur la commande

smbpasswd -h

Note: on peut aussi ce référer au manuel de la commande.

Lister les utilisateurs

pdbedit -L -v

Note: le -L permet de lister et le -v affiche des détails. Source ici.

Droits POSIX

Le truck le plus chiant avec Samba est la gestion des droits d’accès aux fichiers. En effet, sous les système basé sur les concepts UNIX, un utilisateur est propriétaire des fichiers qu'il crée et le UMASK du système de fichiers définit les autres droits à appliquer à celui-ci. Le problème que cela pose dans le cadre d'un partage commun entre plusieurs utilisateurs est que tout ce qui est créé par quelqu'un est en lecture seule pour les autres (vachement pratique...). Une solution que j'aime bien pour palier au problème est l'utilisation des ACL Linux.

Installation du paquet

apt install acl

Gestion des droits d'un répertoire

Par exemple, pour permettre l'accès en lecture/écriture aux utilisateurs toto et titi sur les fichiers qu'ils créent entre eux. j'utilise ceci sur le répertoire "Partage":

setfacl -Rm d:u:toto:rwx,d:u:titi:rwx,d:u:nobody:rwx,d:g:toto:rwx,d:g:titi:rwx,d:g:nogroup:rwx,d:o:rwx /home/toto/Partage/

Montage des volume

Ligne de commande

Sous Debian

mount

Installation du paquet

apt install cifs-utils

Note: ce paquet se nommait anciennement "smbfs" et le système de fichier à préciser avec "mount" portait le même nom.

Montage du partage

mount -t cifs -o username="anonymous",password="anonymous" //192.168.170.178/Logiciel /mnt/

Ici, la connexion s'effectue en anonyme (un alias de -o username et password est -o guest), il suffit bien entendu de remplacer ceci par les bons identifiants de connexion lorsque nécessaire.

Le volume se monte avec les droit de l'utilisateur ayant attaché ce volume (si renseigné dans le fstab, ce sera root). Pour octroyé les droits du volume à un utilisateur particulier, il faut préciser son UID et son GID dans la commande. Ici, notre utilisateur POSIX toto possède l'UID 1000 et appartient au GID 1000 (on le voit dans les fichiers /etc/passwd et /etc/shadow.

On peut par exemple monter le volume Partage en tant qu'utilisateur toto avec les droits de titi:

mount -t cifs -o username="toto",password="SonMotDePasse",uid=1001,gid=1001 //192.168.170.178/Partage

fstab

Le fichier de montage automatique au démarrage n'est pas en reste puisque les partages Samba peuvent également en faire partie. Une syntaxe particulière doit être utilisée pour les noms de partages comportant des accents.

Sous Windows

Voir ici.

Interface graphique

Avec une interface graphique à base de GNOME, le paquet gérant de manière générale les système de fichiers (et plus particulièrement SMB dans notre cas) dans Nautilus se nomme gvfs-backends. Il suffit donc de l'installer pour pouvoir les monter.

apt install gvfs-backends

Pour monter un répertoire Samba via Nautilus (alias "fichiers"), Caja ou autre fork, il faut taper dans la barre d'URL (généralement accessible via un <ctrl>+<l>, un chemin comme celui-ci: smb://192.168.170.178/Partage.

Les identifiants de connexion seront demandés à l'issue.

Sources