Vous êtes sur la page 1sur 6

Comment installer et configurer

samba sur RHEL 8 / CentOS 8


Samba fournit des logiciels serveur et client pour permettre le partage de fichiers entre les
machines Linux et Windows. L'installer et le configurer sur RHEL 8 / CentOS 8 est assez
simple. Continuez à lire pour savoir comment partager un répertoire avec samba et
comment lui appliquer le contexte SELinux approprié.
Dans ce tutoriel, vous apprendrez :
 Comment installer samba sur RHEL8
 Comment activer et démarrer les démons smb et nmb
 Comment créer un partage Samba
 Comment configurer le pare-feu pour autoriser l'accès au partage Samba
 Comment configurer le bon contexte SELinux pour que samba fonctionne
correctement

Partages Samba sur RHEL 8 / CentOS 8

Configuration logicielle requise et conventions


utilisées
Configuration
logicielle requise et
conventions de
ligne de
commande Linux

Catégorie Exigences, conventions ou version du logiciel utilisée


Système Red Hat Enterprise Linux 8
Logiciel Paquets Samba, coreutils et policycoreutils-python-utils
Autre Autorisation d'exécuter la commande avec les privilèges root.
# - nécessite que les commandes linux données soient exécutées
avec les privilèges root soit directement en tant qu'utilisateur root,
Conventions soit en utilisant la sudocommande
$ - nécessite que les commandes linux données soient exécutées en
tant qu'utilisateur normal non privilégié
Présentation de Samba
Samba, comme indiqué sur la page d'accueil du projet, est un logiciel open source, publié
sous GPLlicence, qui nous permet de partager des fichiers et des services d'impression à
l'aide du SMB/CIFSprotocole.
Le projet fournit à la fois un logiciel serveur et un logiciel client pour permettre
l'interopérabilité avec les machines Windows, ce qui représente la solution idéale dans les
environnements mixtes. Dans ce didacticiel, nous verrons comment installer Samba sur
Red Hat Enterprise Linux 8, comment configurer un partage Samba, comment configurer
le pare-feu pour autoriser l'accès aux ressources partagées et comment appliquer le
contexte SELinux approprié.
Installation
La première chose que nous devons faire est d'installer samba sur notre machine. Le
package et les bibliothèques nécessaires sont disponibles dans les référentiels officiels
RHEL 8 / CentOS 8, nous pouvons donc les installer simplement en utilisant yum ou
dnf. Dans cette version de RHEL/CentOS, la première commande n'est qu'un "lien" vers
la seconde :
$ sudo dnf install samba samba-client
Le package samba-client n'est pas strictement nécessaire, mais les utilitaires qu'il fournit
peuvent être utiles. Une fois les packages installés, nous devons démarrer et activer
le smbet les nmbdémons au démarrage. Le premier est le démon qui s'occupe d'effectuer les
transferts proprement dits et les opérations de partage, tandis que le second effectue
les NetBIOSrésolutions de noms, permettant aux ressources d'apparaître lors de la
navigation sur le réseau sous Windows. Nous pouvons maintenant activer et démarrer les
deux services systemd avec une seule commande :
$ sudo systemctl enable --now {smb,nmb}
Configuration du pare-feu
La prochaine étape est la configuration du pare-feu. Nous devons ouvrir les ports
appropriés, afin que les ressources partagées par samba soient accessibles depuis d'autres
machines. Le logiciel de gestion de pare-feu par défaut sur RHEL 8 / CentOS 8
est firewalld .
Heureusement pour nous, il n'est pas nécessaire d'ouvrir les ports manuellement : il suffit
d'ajouter le service « samba » à notre zone. Un "service" est juste une abstraction qui nous
permet d'autoriser le trafic à travers tous les ports nécessaires à un service, en faisant
référence au nom du service, au lieu d'avoir à configurer (et à mémoriser) chaque port
utilisé par celui-ci. Dans le cas où nous voulons recueillir des informations sur un
« service », nous pouvons exécuter :
$ sudo firewall-cmd --info-service samba
samba
ports: 137/udp 138/udp 139/tcp 445/tcp
protocols:
source-ports:
modules: netbios-ns
destination:
D'après la sortie de la commande, nous voyons que le service autorisera le trafic via les
ports 173/udp, 138/udp, 139/tcp et 445/tcp. Pour ajouter définitivement le service à la
zone par défaut, nous pouvons exécuter :
$ sudo firewall-cmd --permanent --add-service=samba
Lors de l'exécution de la commande, nous avons utilisé le --permanentcommutateur afin
de rendre notre modification persistante. Nous avons également supposé que
la defaultzone était utilisée. Si nous voulions spécifier une autre zone sur laquelle
l'action doit être appliquée, nous aurions utilisé l' --zoneoption et fourni le nom de la zone
comme argument (par exemple –zone=external). Comme notre changement est défini
comme permanent, pour qu'il devienne effectif, nous devons recharger la configuration du
pare-feu :
$ sudo firewall-cmd --reload

Nous pouvons vérifier que le service "samba" fait maintenant partie de notre zone, en
exécutant :
$ sudo firewall-cmd --list-services
cockpit dhcpv6-client http samba ssh
Là encore, si aucune zone n'est spécifiée, la commande est appliquée à la zone par défaut.
Configuration d'un répertoire partagé accessible aux
invités
Disons que nous voulons partager un répertoire via samba, et que nous voulons laisser
libre accès à ce répertoire aux utilisateurs invités, sans qu'ils aient à fournir de mot de
passe. Pour obtenir le résultat souhaité, nous devons apporter quelques modifications
au /etc/samba/smb.conffichier et ajouter une "strophe" pour notre part. Ouvrez le fichier
avec votre éditeur préféré, et dans la [global]section, ajoutez le texte en surbrillance :
[global]
workgroup = SAMBA
security = user

passdb backend = tdbsam

printing = cups
printcap name = cups
load printers = yes
cups options = raw
map to guest = bad user
L' map to guest = bad userinstruction mappera les tentatives de connexion avec de
mauvais noms d'utilisateur à l'utilisateur invité par défaut, qui, par défaut, est nobody. Ceci
est nécessaire pour permettre un accès anonyme sans avoir à fournir de mot de passe.
Après ce changement, nous devons ajouter une nouvelle strophe dédiée à notre partage à
la fin du fichier. Nous nommerons la ressource partagée « linuxconfig » :
[linuxconfig]
path = /mnt/shared
guest only = yes
Avec la configuration ci-dessus, nous avons déclaré que nous voulions partager le contenu
du /mnt/sharedrépertoire, sans avoir besoin d'authentification de l'utilisateur. Cette
configuration est évidemment risquée et n'est présentée ici qu'à titre d'exemple : dans un
scénario réel, vous pouvez au moins refuser l'accès en écriture aux invités (vous pouvez le
faire en ajoutant l' writeable = no instruction). Pour que les modifications soient
effectives, nous devons redémarrer les démons :

$ sudo systemctl restart {smb,nmb}


Configurer un partage accessible uniquement par les
utilisateurs enregistrés
Pour protéger l'accès à une ressource avec une invite de connexion, lorsque samba
s'exécute en tant que serveur autonome, nous devons ajouter un utilisateur existant à la
base de données samba. Les informations d'identification de cet utilisateur seront
nécessaires pour accéder au répertoire partagé. Pour des raisons de sécurité, il est
recommandé de créer un utilisateur dédié à la tâche, en omettant la création de son
répertoire personnel, et en lui attribuant un faux shell :
$ sudo adduser -M sambauser -s /sbin/nologin
L' -Moption passée à la commande est la forme abrégée de --no-create-home, qui est
assez explicite ; l' -soption, à la place, spécifions un shell, dans ce cas un shell
volontairement invalide : /sbin/nologin. À ce stade, l'utilisateur n'a même pas besoin
d'avoir un mot de passe défini sur notre système.
Une fois l'utilisateur créé, nous devons l'ajouter à la base de données samba : nous
pouvons effectuer l'opération en utilisant la smbpasswdcommande :
$ sudo smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Added user sambauser.
Après avoir exécuté la commande, nous sommes invités à attribuer un mot de passe à
l'utilisateur, ainsi qu'à le confirmer : ce mot de passe ne sera valide que dans le contexte
samba, n'a rien à voir avec le compte d'utilisateur sur notre système. Pour restreindre le
partage que nous avons créé précédemment, nous devons apporter une petite modification
dans la section dédiée :
[linuxconfig]
path = /mnt/shared
guest ok = no
Nous pouvons vérifier que notre configuration est valide, en utilisant
la testparmcommande :

$ 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 "[printers]"
Processing section "[print$]"
Processing section "[linuxconfig]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Encore une fois, nous devons redémarrer les démons smbet nmbpour que nos modifications
soient effectives. Le répertoire partagé ne sera désormais accessible qu'après avoir fourni
les informations d'identification correctes.
Configurer SELinux pour samba
SELinux est souvent vu comme une complication, et tout de suite désactivé. Ce n'est pas
nécessaire : nous devons seulement apprendre à le configurer et profiter de l'amélioration
de la sécurité qu'il apporte. Pour que notre partage samba fonctionne lorsque SELinux est
en mode "application", nous devons attribuer le contexte approprié à notre répertoire et à
nos fichiers partagés :
$ sudo chcon -R -t samba_share_t /mnt/shared
Dans l'exemple ci-dessus, nous avons utilisé la chconcommande avec l' -toption pour
changer la TYPEsection du contexte SELinux en samba_share_t. Nous avons également
utilisé le -Rcommutateur pour rendre la commande récursive. Cette modification survivra
à un redémarrage, mais pas à un réétiquetage du système si une politique par défaut existe
pour notre répertoire et nos fichiers, car dans ce cas, la configuration par défaut serait
réappliquée.
Si nous voulons que notre modification survive à un événement de réétiquetage, nous
devons ajouter notre règle à la politique. Nous pouvons le faire en utilisant
la semanagecommande :
$ sudo semanage fcontext -l | grep /mnt/shared
/mnt/shared(/.*)?
all files system_u:object_r:samba_share_t:s0
Puisque nous avons utilisé la (/.*)?regex, la règle sera appliquée à tout le contenu du
répertoire "partagé", et au répertoire lui-même. Nous pouvons vérifier que notre règle a
été ajoutée à la stratégie en répertoriant les libellés utilisés sur notre système :
$ sudo semanage fcontext -l | grep /mnt/partagé
/mnt/partagé (/.*) ? tous les fichiers system_u:object_r:samba_share_t:s0
Nous devrions maintenant avoir une configuration de samba fonctionnelle. Pour peaufiner
davantage la configuration de samba, nous devrons peut-être également manipuler les
booléens SELinux. Par exemple, lors de l'ajout d'utilisateurs existants à samba, pour que
leurs répertoires personnels soient partagés, nous devons activer le booléen SELinux
dédié. Pour lister tous les booléens liés à la samba, nous pouvons exécuter :

$ sudo semanage boolean -l|grep samba


samba_create_home_dirs (off , off) Allow
samba to create home dirs
samba_domain_controller (off , off) Allow
samba to domain controller
samba_enable_home_dirs (off , off) Allow
samba to enable home dirs
samba_export_all_ro (off , off) Allow
samba to export all ro
samba_export_all_rw (off , off) Allow
samba to export all rw
samba_load_libgfapi (off , off) Allow
samba to load libgfapi
samba_portmapper (off , off) Allow
samba to portmapper
samba_run_unconfined (off , off) Allow
samba to run unconfined
samba_share_fusefs (off , off) Allow
samba to share fusefs
samba_share_nfs (off , off) Allow
samba to share nfs
sanlock_use_samba (off , off) Allow
sanlock to use samba
tmpreaper_use_samba (off , off) Allow
tmpreaper to use samba
use_samba_home_dirs (off , off) Allow
use to samba home dirs
virt_use_samba (off , off) Allow
virt to use samba
Dans la sortie ci-dessus, la deuxième colonne indique la valeur actuelle du booléen, tandis
que la troisième la valeur par défaut (les deux sont désactivées, dans ce cas). Le booléen
que nous voulons activer, pour permettre le partage des répertoires personnels,
est samba_enable_home_dirs. Nous pouvons effectuer l'opération en utilisant
la setseboolcommande :
$ sudo setsebool samba_enable_home_dirs=1
conclusion
Dans ce tutoriel, nous avons vu comment installer samba sur un système RHEL 8 /
CentOS 8. Nous avons également vu comment partager un répertoire, autoriser l'accès aux
invités ou le restreindre aux utilisateurs authentifiés. Nous avons également vu comment
configurer le pare-feu afin que le partage soit accessible depuis d'autres machines du
réseau.
Enfin, nous avons vu comment effectuer les modifications nécessaires afin d'avoir une
configuration de samba fonctionnelle avec SELinux en mode « application ». Si SELinux
vous intéresse, vous pouvez également lire notre article sur le sujet .

Vous aimerez peut-être aussi