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 didacticiel, 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
Configuration logicielle requise et conventions utilisées
Catégorie | Exigences, conventions ou version du logiciel utilisée |
---|---|
Système | Red Hat Enterprise Linux 8 |
Logiciel | Packages Samba, coreutils et policycoreutils-python-utils |
Autre | Autorisation d'exécuter la commande avec les privilèges root. |
Conventions | # - nécessite que les commandes linux données soient exécutées avec les privilèges root soit directement en tant qu'utilisateur root, soit en utilisant sudo commande$ – 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 la GPL
licence, qui nous permet de partager des fichiers et des services d'impression en utilisant le SMB/CIFS
protocole.
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 smb
et le nmb
dé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 le NetBIOS
ré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 via tous les ports nécessaires à un service, en référençant le 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 --permanent
switch afin de rendre notre changement persistant. Nous avons également supposé le default
zone à utiliser. Si nous voulions spécifier une autre zone sur laquelle l'action doit être appliquée, nous aurions utilisé le --zone
option, et a 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 lançant :
$ sudo firewall-cmd --list-services cockpit dhcpv6-client http samba ssh
Encore une fois, 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 par les invités
Disons que nous voulons partager un répertoire via samba, et nous voulons laisser libre accès à ce répertoire aux utilisateurs invités, sans qu'ils aient à fournir un mot de passe. Pour obtenir le résultat souhaité, nous devons apporter quelques modifications au /etc/samba/smb.conf
fichier, et ajoutez une « strophe » pour notre partage. Ouvrez le fichier avec votre éditeur préféré, et dans le [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
Le map to guest = bad user
l'instruction, 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/shared
répertoire, sans 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 le 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 aux 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
Le -M
l'option passée à la commande est la forme courte de --no-create-home
, ce qui est assez explicite ; le -s
option, à 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 de définir un mot de passe 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 le smbpasswd
commande :
$ 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 le testparm
commande :
$ 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 le smb
et nmb
démons pour 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é le chcon
commande avec le -t
option, pour changer le TYPE
section du contexte SELinux vers samba_share_t
. Nous avons également utilisé le -R
commutateur 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 stratégie. Nous pouvons le faire en utilisant le semanage
commande :
$ sudo semanage fcontext -a -t samba_share_t "/mnt/shared(/.*)?"
Puisque nous avons utilisé le (/.*)?
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 politique en répertoriant les libellés utilisés sur notre système :
$ sudo semanage fcontext -l | grep /mnt/shared /mnt/shared(/.*)? all files 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 le setsebool
commande :
$ 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.