Samba
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
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.