Objectif
L’objectif de ce tutoriel est de mettre en place un serveur de fichiers (sous Ubuntu/Debian) et que des postes client (Linux et Windows) puissent y avoir accès, le tout de manière sécurisée.
Les postes client sous Windows auront accès au partage en passant par Samba et les postes client sous Linux utiliseront le partage NFS.
Environnement utilisé dans ce tutoriel
Serveurs / Ordinateurs
Le serveur de fichiers sera nommé ServeurA, le client Windows ClientB et le client Linux ClientC
Utilisateurs
Alice et Bob sont deux utilisateurs du système, ils possèdent leur propre compte d’authentification
Charlie est un visiteur – il ne possède pas de compte dans le système
Partages
Plusieurs espaces seront partagés avec des niveaux d’accès différents
- un répertoire Public, libre d’accès en lecture / écriture pour tous, ainsi qu’aux visiteurs /mnt/public
- un répertoire Commun, disponible en lecture / écriture seulement pour les utilisateurs du système (Alice et Bob) /mnt/commun
- un répertoire Ressources, disponible en lecture seule pour tout le monde sauf pour Alice qui a les droits d’écriture /mnt/ressources
- un répertoire Home, personnel à chaque utilisateur en lecture / écriture /home/alice et /home/bob
Installation des logiciels nécessaires
Avant tout, il faut installer les services SAMBA et NFS
# apt-get install samba nfs-kernel-server
Nous pouvons maintenant passer à la configuration
Configuration préliminaire du ServeurA
Création des utilisateurs
Si les utilisateurs existent déjà, vous pouvez passer directement à la configuration de SAMBA
Pour ajouter les utilisateurs Alice et Bob, lancer les commandes suivantes:
# adduser alice Ajout de l'utilisateur `alice' ... Ajout du nouveau groupe `alice' (1003) ... Ajout du nouvel utilisateur `alice' (1003) avec le groupe `alice' ... Création du répertoire personnel `/home/alice'... Copie des fichiers depuis `/etc/skel'... Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully Changing the user information for smbguest Enter the new value, or press ENTER for the default Full Name []: Alice Room Number []: Work Phone []: Home Phone []: Other []: Ces informations sont-elles correctes ? [O/n] # adduser bob Ajout de l'utilisateur `bob' ... Ajout du nouveau groupe `bob' (1004) ... Ajout du nouvel utilisateur `bob' (1004) avec le groupe `bob' ... Création du répertoire personnel `/home/bob'... Copie des fichiers depuis `/etc/skel'... Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully Changing the user information for smbguest Enter the new value, or press ENTER for the default Full Name []: Bob Room Number []: Work Phone []: Home Phone []: Other []: Ces informations sont-elles correctes ? [O/n]
Il faut également ajouter un compte supplémentaire, utilisé par Samba pour les connexions anonymes
# adduser --no-create-home smbguest Ajout de l'utilisateur `smbguest' ... Ajout du nouveau groupe `smbguest' (1005) ... Ajout du nouvel utilisateur `smbguest' (1005) avec le groupe `smbguest' ... Le répertoire personnel `/home/smbguest' n'a pas été créé. Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd: password updated successfully Changing the user information for smbguest Enter the new value, or press ENTER for the default Full Name []: Samba Visitor Account Room Number []: Work Phone []: Home Phone []: Other []: Ces informations sont-elles correctes ? [O/n]
Création des groupes
Après avoir défini les utilisateurs, il faut à présent ajouter les groupes nécessaires:
- un groupe smbcommun pour les utilisateurs ayant accès au répertoire commun
- un groupe smbressources pour les utilisateurs ayant accès au répertoire ressources
# addgroup smbcommun # addgroup smbressources
puis ranger les utilisateurs dans les groupes correspondant à la stratégie définit au début du tutoriel.
# adduser alice smbcommun # adduser alice smbressources # adduser bob smbcommun # adduser bob smbressources
Création et attribution des droits sur les répertoires
# mkdir -p /mnt/public /mnt/commun /mnt/ressources # chown smbguest:smbguest /mnt/public ; chmod 777 /mnt/public # chown alice:smbcommun /mnt/commun ; chmod 770 /mnt/commun # chown alice:smbressources /mnt/ressources ; chmod 750 /mnt/ressources
Configuration du service SAMBA (pour les clients Windows)
Configuration générale
La configuration de Samba se trouve dans le fichier /etc/samba/smb.conf
La première chose à faire est de déterminer le niveau de sécurité de Samba. Il existe 2 niveaux share et user
- Le niveau share permet de faire du partage simple de fichiers, imprimantes, sans authentification
- Le niveau user mieux sécurisé, force l’envoi d’informations d’authentification de la part du client. Cela permet de mettre en place un stratégie de droits d’accès. C’est ce niveau qui sera utilisé dans ce tutoriel.
Le niveau de sécurité se définit par l’option suivante:
security = user
Dans les dernières version de Samba, il est définit par défaut.
Il faut ensuite renseigner le nom du Groupe de Travail windows (WORKGROUP) ainsi que le nom de la machine
workgroup = KNS7 server string = %h
Le groupe de travail (qui devrait être le même entre les postes windows et le serveur) sera dans cet exemple KNS7 et le nom du serveur, celui correspondant au hostname (variable %h)
Afin de sécuriser l’envoi de mots de passe, il faut les chiffrer
encrypt passwords = true
Le paramètre suivant va permettre de synchroniser les mots de passe UNIX et Samba pour les utilisateurs
unix password sync = yes
Afin qu’un utilisateur anonyme ne soit pas rejeté, mais vu par samba comme un compte invité, on va mapper le compte smbguest (créé plus haut) avec un utilisateur invité.
map to guest = bad user
voici le récapitulatif de la configuration globale
[global] workgroup = KNS7 server string = %h security = user encrypt passwords = true unix password sync = yes map to guest = bad user
Configuration des Partages
Partage public
Le partage public sera accessible par tous, en lecture / écriture, même pour les visiteurs
[public] comment = Espace public path = /mnt/public browseable = yes read only = no guest ok = yes force group = smbguest create mask = 0666 directory mask = 0777
Le premier paramètre comment permet simplement de définir une description au partage. C’est juste informel.
Le second paramètre, path définit le chemin physique du partage.
Le paramètre browseable indique si le partage est visible depuis l’explorateur (windows ou linux)
Le paramètre read only, définit à no autorise les utilisateurs à écrire dans ce répertoire
Le paramètre guest ok, définit à yes autorise les connexions anonymes sur ce partage
Les 3 derniers paramètres permettent de définir comment vont être créés les répertoires et fichiers. Ils auront comme propriétaire l’utilisateur l’ayant créé/copié, comme groupe propriétaire smbguest et comme droits:
- rw-,rw-,rw- pour les fichiers
- rwx,rwx,rwx pour les répertoires
Ainsi, les répertoires et fichiers auront toujours les mêmes propriétaires et le mêmes droits à la création. Il seront accessible aux autres utilisateurs.
Partage commun
Le partage commun sera seulement accessible par le groupe smbcommun en lecture / écriture
[commun] comment = Espace commun path = /mnt/commun browseable = yes read only = no guest ok = no force group = smbcommun create mask = 0760 directory mask = 0770 valid users = @smbcommun write list = @smbcommun
Sur ce partage commun, l’utilisateur anonyme n’est plus autorisé (guest ok = no) et deux autres paramètres supplémentaires ont été ajouté:
valid users qui définit qui a le droit d’accès sur ce partage et write list qui définit qui a les droits d’accès en écriture. Dans ce cas précis, le groupe smbcommun a été autorisé (un groupe commence par un @)
Partage ressources
Le partage ressources sera accessible par les membres du groupe smbressources en lecture seule et seulement par Alice en lecture / écriture
[ressources] comment = Ressources path = /mnt/ressources browseable = yes read only = no guest ok = no force user = alice force group = smbressources create mask = 0740 directory mask = 0750 valid users = @smbressources read list = @smbressources write list = alice
Sur ce partage ressources, l’utilisateur n’a pas non plus de droits d’accès. La différence avec Commun, c’est qu’Alice sera autorisée à écrire alors que les membres du groupe smbressources ne pourront que lire le contenu. Pour cela:
valid users est définit au groupe smbressources
les droits de lecture read list est donné au groupe smbressources
et les droits d’écriture write list à l’utilisatrice alice
Partage du répertoire personnel (Home)
Le partage du répertoire personnel n’est accessible que par l’utilisateur concerné. Les autres n’ont aucun droit d’accès. Pour plus de sécurité, ceux-ci ne seront pas visible.
Samba fournit un partage spécifique pour les répertoires personnels. Il suffit de créer un partage [homes]
[homes] comment = Répertoire personnel browseable = no read only = no create mask = 0640 directory mask = 0750 valid users = %S
Afin de mapper directement le bon utilisateur avec son répertoire personnel, le paramètre valid users a comme valeur %S (qui sera automatiquement remplacé par l’utilisateur correspondant)
Configuration du service NFS (pour les clients Linux)
Il existe pour les clients Linux un outil de partage très perfomant (plus que Samba) qui se nom NFS (Network File System). La version du protocole utilisée dans ce tutoriel est la 4 (la plus actuelle, perfomante et sécurisée).