Client Samba avec Python

J’utilise Debian 10 Buster et Python 3.7.3

Dans cet exemple, j’installe une bibliothèque pour Python 3 (un client Samba) afin de pouvoir accéder à un partage réseau Windows.

Installation des paquets nécessaires à la mise en place des bibliothèques pour Python 3, en administrateur (root pour Debian ou sudo pour Ubuntu, Mint). Pip est un gestionnaire de paquets :

apt-get install python-pip python3-pip

Installation de la bibliothèque pysmbclient ( client samba) pour Python 3 avec pip :

pip3 install pysmbclient

Grâce à cette installation, je vais pouvoir accéder aux partages réseau depuis Python.

Dans mon script Python j’ajoute la ligne suivant pour utiliser la bibliothèque pysmbclient :

import smbclient

Prérequis :

J’ai installé également les paquets samba et smbclient pour Linux  (en root ou avec sudo) pour pouvoir utiliser le client Samba :

apt-get install samba smbclient

Exemple :

#!/usr/bin/env python3.7
#-*- coding: utf-8 -*-
import smbclient
serveursmb = "PC-DOM"
partagesmb = "Partage-Diaporama"
utilisateur = "dominique"
mot_de_passe = "motdepasse"
domaine = "WORKGROUP"
fichier_diaporama = "Diaporama.odp"
smb = smbclient.SambaClient(server=serveursmb, share=partagesmb, username=utilisateur, password=mot_de_passe, domain=domaine)
#Afficher des informations sur le fichier
informations = smb.info(fichier_diaporama)
print(informations)
#Afficher les fichiers contenus dans le dossier partagé
test = smb.listdir("/")
print(test)
'''Pour télécharger le fichier distant \\PC-DOM\Partage-Diaporama\Diaporama.odp
vers vers le dossier courant - chemin absolu /home/Dominique/Documents/Diaporama.odp'''
local_path = "./" + fichier_diaporama
smb.download(fichier_diaporama, local_path)

Raspberry PI 2 Raspbian et Samba.

J’ai décidé de créé un partage Samba sur mon Raspberry PI 2 pour y avoir accès depuis mon PC sous Windows.

Installation de Samba depuis un terminal :

sudo apt-get install samba

Pour sauvegarder le fichier original de configuration de Samba depuis un terminal administrateur :

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig

Pour ensuite éditer un nouveau fichier de configuration avec Nano :

sudo nano /etc/samba/smb.conf

Mon fichier de configuration de Samba sous /etc/samba/smb.conf

[global]
        netbios name = SERVEUR
        server string = Serveur WORKGROUP
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        idmap config * : backend = tdb

[homes]
        comment = Home Directories
        read only = No
        create mask = 0755

[Partage]
        comment = Input
        path = /samba/partage
        force group = users
        read only = No
        guest ok = Yes

On crée le répertoire partagé (pas les répertoires utilisateurs, ils existent déjà, ce sont ceux dans /home). À noter l’option -p qui permet de créer à la fois un répertoire et un sous-répertoire de ce répertoire :

sudo mkdir -p /samba/partage

On donne ensuite les droits en écriture à tout le monde pour partage :

sudo  chmod 777 /samba/partage

Une fois Samba installé sur mon Raspberry PI 2 sous Raspbian, je constate que la commande smbpasswd qui sert à créé les utilisateurs Samba ne fonctionne pas.

En fait, il faut installer au préalable le paquet samba-common-bin à l’aide de la commande suivante :

sudo apt-get install samba-common-bin

Ensuite, on peut créer l’utilisateur Samba (qui doit déjà exister sous Linux). La commande suivante crée l’utilisateur pi (utilisateur par défaut sous Raspbian) :

sudo smbpasswd -a pi

L’installation de ce paquet permet également l’utilisation de la commande testparm :

pi@raspberrypi /etc/samba $ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[Partage]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

Pour redémarrer Samba et prendre en compte toutes les modifications.

sudo /etc/init.d/samba restart

Les processus de Samba

Il n’y a pas de processus samba qui tourne en tâche de fond pour le serveur, mais des processus : smbd qui s’occupe des partages et de l’authentification, et nmbd qui s’occupe de la résolution des noms NetBIOS.

Exemples en lignes de commande pour lister les processus Samba :

ps aux | grep smbdps 

ou

ps -ale | grep -e TTY -e smbd

Les ports liés au partage de fichiers par les protocoles SMB et CIFS

135 TCP et UDP Localisateur de services RPC

137 TCP et UDP NetBIOS Name Service (nbname)

138 UDP NetBIOS Datagram Service (nbdatagram)

139 TCP NetBIOS Session Service (nbsession)

445 TCP et UDP Service de dossiers partagés Windows


Plus d’informations sur l’installation de Samba sous Debian :

Partages avec Samba sous Debian 7

Partages avec Samba sous Debian 7.

Une procédure simplifiée pour monter son serveur de fichiers sous Linux dans un environnement Windows.On peut bien sûr aller plus loin avec une gestion plus poussée des utilisateurs et des droits d’accès. Vous pouvez également multiplier le nombre de partages.

Les tests ont été effectués sous Debian 7. Quand le prompt est # c’est que vous êtes dans un terminal administrateur. Sous Ubuntu pour être administrateur vous devez préfixer votre commande par sudo. On partage le « home » de l’utilisateur et un dossier « partage » créé pour l’occasion.

Installation de Samba depuis un terminal administrateur :

# apt-get install samba

Pour sauvegarder le fichier original de configuration de Samba depuis un terminal administrateur :

# mv /etc/samba/smb.conf /etc/samba/smb.conf.orig

Pour ensuite éditer un nouveau fichier de configuration avec Nano :

# nano /etc/samba/smb.conf

Remarque :

Si l’on veut manipuler des fichiers (copier-coller,etc.) en graphique on peut lancer Nautilus, le gestionnaire de fichiers, depuis un terminal administrateur.

Le contenu du nouveau fichier de configuration /etc/samba/smb.conf :

[global]

workgroup = WORKGROUP

netbios name = Serveur

server string = Serveur WORKGROUP

log file = /var/log/samba/log.%m

max log size = 1000

syslog = 0

log level = 0

security = user

encrypt passwords = true

unix password sync = no

[homes]

comment = Home Directories

browseable = yes

writable = yes

create mask = 0755

directory mask = 0755

[Partage]

comment = Input

browsable = yes

path = /samba/partage

public = yes

writable = yes

force group = users

Exemple de fichier smb.conf plus complet au format PDF

Toutes les explications liées au fichier précédent

Avant de relancer Samba pour prendre en compte notre fichier, nous allons valider notre configuration avec la commande suivante depuis un terminal administrateur :

# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Processing section "[Partage]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

L’avant-dernière manœuvre consiste à créer les répertoires partagés (pas les répertoires utilisateurs, ils existent déjà, ce sont ceux dans /home). À noter l’option -p qui permet de créer à la fois un répertoire et un sous-répertoire de ce répertoire :

# mkdir -p /samba/partage

On donne ensuite les droits en écriture à tout le monde pour partage :

# chmod 777 /samba/partage

Nous pouvons enfin créer les utilisateurs Samba. Attention pour ce faire, l’utilisateur doit déjà exister sous Linux ! Pour créer un utilisateur sous Linux (# adduser <identifiant>). Supposons donc que l’utilisateur dominique existe sous Linux, pour l’ajouter à Samba il suffit de taper :

# smbpasswd -a dominique

Saisir ensuite deux fois le mot de passe que l’on désire lui attribuer (J’ai utilisé le même mot de passe que celui de l’utilisateur sous Linux).

Redémarrer au paravent Samba pour que toutes les modifications soient prises en compte.

Exemple sur Debian 7 :

# /etc/init.d/samba restart

Sur Ubuntu pour redémarrer Samba :

$ sudo service smbd restart

Tests sous Windows

Il est temps maintenant de tester la connexion depuis un poste Windows et de voir si nos attentes sont remplies. Pour cela, le plus simple consiste à saisir dans la barre de recherche de menu Démarrer l’adresse de notre serveur, qui est dans mon cas \\<adresse_ip_du_serveur>, ce qui va nous ouvrir la boîte de dialogue de connexion. Vous y saisissez le nom de l’utilisateur Samba que vous venez de créer et le mot de passe Samba correspondant.

Vous ignorez l’adresse ip de votre serveur sous Debian? Tapez ifconfig dans un terminal administrateur. Vous êtes en DHCP (ip attribuée par votre box ou un serveur) et vous voulez passer en IP fixe. Consultez l’article suivant :

Debian – Configuration manuelle d’une interface réseau


Les processus de Samba

Il n’y a pas de processus samba qui tourne en tâche de fond pour le serveur, mais deux processus : smbd qui s’occupe des partages et de l’authentification, et nmbd qui s’occupe de la résolution des noms NetBIOS.

Exemples en lignes de commande pour lister les processus Samba :

ps aux | grep smbd
ps -ale | grep -e TTY -e smbd

Les ports liés au partage de fichiers par les protocoles SMB et CIFS

135 TCP et UDP Localisateur de services RPC

137 TCP et UDP NetBIOS Name Service (nbname)

138 UDP NetBIOS Datagram Service (nbdatagram)

139 TCP NetBIOS Session Service (nbsession)

445 TCP et UDP Service de dossiers partagés Windows


Prendre la main à distance sur le serveur

Une chose à laquelle il faut penser est que, à un moment ou à un autre, vous aurez besoin d’accéder à distance à votre serveur. Pour cela, il est fortement conseillé d’installer un serveur SSH dessus.

Installation d’openssh avec aptitude sous Debian 7