« LINUX:Samba » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(13 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
----
''→ [[LINUX:Menu|retour au menu de Linux]]''
----
=But=
=But=
Samba est un serveur de fichiers et d'impression selon le protocole SMB. Ce protocole est utilisé principalement sous MS Windows.  
Samba est un serveur de fichiers et d'impression selon le protocole SMB. Ce protocole est utilisé principalement sous MS Windows.  
Ligne 67 : Ligne 70 :
     passdb backend = tdbsam
     passdb backend = tdbsam
     admin users = root
     admin users = root
     guest account=smbuser
     guest account = smbguest
  ; sécurité d'accès réseau, peut être fait via iptables
  ; sécurité d'accès réseau, peut être fait via iptables
     hosts allow = 127. 192.168.1.
     hosts allow = 127. 192.168.1.
Ligne 87 : Ligne 90 :
** '''security'''=user: type de sécurité choisi ci-dessus
** '''security'''=user: type de sécurité choisi ci-dessus
** '''passdb backend'''=tdbsam: type de base de données utilisée pour stocker les paramètres des utilisateurs
** '''passdb backend'''=tdbsam: type de base de données utilisée pour stocker les paramètres des utilisateurs
** '''guest account'''=smbuser: nom d'utilisateur Unix utilisé comme invité
** '''guest account'''=smbguest: nom d'utilisateur Unix utilisé comme invité (désactivé par défaut)
** '''admin users'''=root: nom d'utilisateur avec les droits administrateur; à utiliser avec précausions
** '''admin users'''=root: nom d'utilisateur avec les droits administrateur; à utiliser avec précautions
* Sécurité d'accès réseau
* Sécurité d'accès réseau
** '''hosts allow''': permettre l'accès aux machines des adresses IP fournies (127 ou 127.0.0.1 ou localhost) (192.168.1 ou 192.168.1.1 à 192.168.1.254). Ceci peut être défini au niveau du FireWall (voir ci-dessous)
** '''hosts allow''': permettre l'accès aux machines des adresses IP fournies (127 ou 127.0.0.1 ou localhost) (192.168.1 ou 192.168.1.1 à 192.168.1.254). Ceci peut être défini au niveau du FireWall (voir ci-dessous)
Ligne 139 : Ligne 142 :
* '''force user''': forcer le propriétaire Unix du fichier ou du répertoire au lieu de l'utilisateur nommé dans l'option "valid users"
* '''force user''': forcer le propriétaire Unix du fichier ou du répertoire au lieu de l'utilisateur nommé dans l'option "valid users"


Nous verrons à l'article suivant que l'utilisateur "smbuser" et les utilisateurs finaux, réellement attachés à une personne physique, appartiennent au même groupe Unix "users". Donc avec les droits Unix 0770, tous ces utilisateurs de ce groupe "users" ont un accès total ensemble.
Nous verrons à l'article suivant que l'utilisateur "smbuser" et les utilisateurs finaux, réellement attachés à une personne physique, appartiennent au même groupe Unix "smbusers". Donc avec les droits Unix 0770, tous ces utilisateurs de ce groupe "smbusers" ont un accès total ensemble.




Ligne 158 : Ligne 161 :




Ce service par contre, est ouvert à tous. Pour cette raison, les droits utilisateur Unix sont 0770 et pour faciliter la gestion, on force que ce soit l'utilisateur Unix "smbuser" qui en soit propriétaire. En cas de problème ou d'initialisation, deux commandes Unix peuvent régler le problème:
Ce service par contre, est ouvert à tous. Pour cette raison, les droits utilisateur Unix sont 0770 et pour faciliter la gestion, on force que ce soit l'utilisateur Unix "smbuser" qui en soit propriétaire. On initialiserons cet espace, ses droits d'accès et son propriétaire par la suite.
chmod -R 770 /produc/partage/famille
chown -R smbuser:users /produc/partage/famille
----
----
  [famille]
  [famille]
       comment = Espace Famille
       comment = Espace Famille
       path=/produc/partage/famille
       path=/produc/utilisateur/famille
       browseable = yes
       browseable = yes
       read only = no
       read only = no
Ligne 213 : Ligne 214 :


===Groupes===
===Groupes===
Suivant notre exemple, nous avons besoin d'un groupe qui regroupe tous nos utilisateurs concernés par Samba: le groupe "users". Habituellement ce groupe existe déjà.
Suivant notre exemple, nous avons besoin de créer un groupe qui regroupe tous nos utilisateurs concernés par Samba: le groupe "smbusers". Nous avons préféré séparer le groupe des utilisateurs SMB de celui par défaut de Linux "users" préexistant.


Voici son entrée dans le fichier "/etc/group":
Voici son entrée dans le fichier "/etc/group":
----
----
  users:x:100:
  smbusers:x:1001:
----
----


Et dans le fichier "/etc/gshadow":
Et dans le fichier "/etc/gshadow":
----
----
  users:::
  smbusers:::
----
----


Ligne 231 : Ligne 232 :
# la liste des noms d'utilisateurs qui appartiendraient à d'autres groupes que leur principal
# la liste des noms d'utilisateurs qui appartiendraient à d'autres groupes que leur principal


'''Attention''': si vous changez le n° de groupe déjà utilisé, vous devrez adapter les n° de groupe des utilisateurs concernés dans le fichier "/etc/passwd" et revoir tous les fichiers et répertoires de votre système pour adapter ce changement. A EVITER ou à faire en toute connaissance de cause; quand ce groupe a été créé par vous-même et a une utilisation réduite, c'est faisable.


Dans le fichier "gshadow", il y a 4 zones séparées par ":":
Dans le fichier "gshadow", il y a 4 zones séparées par ":":
Ligne 243 : Ligne 243 :


===Utilisateurs===
===Utilisateurs===
Suivant notre exemple, nous avons besoin de quelques utilisateurs qui appartiennent au groupe défini ci-dessus (GID=100).  
Suivant notre exemple, nous avons besoin de quelques utilisateurs qui appartiennent au groupe défini ci-dessus (GID=1001).  
Le premier est l'utilisateur général "smbuser"; ce nom peut être adapté. Suivent quatre utilisateurs comme exemple.
Le premier est l'utilisateur général "smbuser"; ce nom peut être adapté. Suivent quatre utilisateurs comme exemple.


Voici leurs entrées dans le fichier "/etc/passwd":
Voici leurs entrées dans le fichier "/etc/passwd":
----
----
  smbuser:x:1001:100:Utilisateur SMB:/dev/null:/sbin/nologin
smbguest:x:1000:1001:Invite SMB:/dev/null:/sbin/nologin
  albert:x:1002:100:Albert:/home/albert:/sbin/nologin
  smbuser:x:1001:1001:Utilisateur SMB:/dev/null:/sbin/nologin
  monique:x:1003:100::Monique/home/monique:/sbin/nologin
  albert:x:1002:1001:Albert:/produc/utilisateur/albert:/sbin/nologin
  francoise:x:1004:100:Françoise:/produc/utilisateur/francoise/sbin/nologin
  monique:x:1003:1001:Monique:/produc/utilisateur/monique:/sbin/nologin
  eric:x:1005:100:Eric:/produc/utilisateur/eric:/sbin/nologin
  francoise:x:1004:1001:Françoise:/produc/utilisateur/francoise/sbin/nologin
  eric:x:1005:1001:Eric:/produc/utilisateur/eric:/sbin/nologin
----
----


Ligne 263 : Ligne 264 :
# répertoire de base de l'utilisateur; usuellement, il se situe dans "/home"; pour exemple, vous en avons mis deux dans "/produc/utilisateur".
# répertoire de base de l'utilisateur; usuellement, il se situe dans "/home"; pour exemple, vous en avons mis deux dans "/produc/utilisateur".
# l'interpréteur de commande utilisé quand on se connecte sous Unix; habituellement on fait appel au shell "Bash"; dans notre cas, le login sous Unix est désactivé ("/sbin/nologin").  
# l'interpréteur de commande utilisé quand on se connecte sous Unix; habituellement on fait appel au shell "Bash"; dans notre cas, le login sous Unix est désactivé ("/sbin/nologin").  
'''Attention''': si vous changez le n° d'utilisateur ou le n° de groupe, vous devrez revoir tous les fichiers et répertoires de votre système pour adapter ce changement. A faire en toute connaissance de cause; quand cet utilisateur ou ce groupe ont été créés par vous-même et ont une utilisation réduite, c'est faisable.




Et dans le fichier "/etc/shadow":
Et dans le fichier "/etc/shadow":
----
----
smbguest:!:::::::
  smbuser:!:::::::
  smbuser:!:::::::
  albert:!:::::::
  albert:!:::::::
Ligne 281 : Ligne 280 :
# le mot de passe crypté; si cette zone est vide, il n'y a pas de mot de passe; si on a dans cette zone "!" ou "*", le login sous Unix n'est pas possible par mot de passe (voir la documentation pour plus de détails).  
# le mot de passe crypté; si cette zone est vide, il n'y a pas de mot de passe; si on a dans cette zone "!" ou "*", le login sous Unix n'est pas possible par mot de passe (voir la documentation pour plus de détails).  
# les champs suivants concernent la politique de validité et de renouvellement du mot de passe; comme le mot de passe n'est pas utilisé, cela ne nous concerne pas.
# les champs suivants concernent la politique de validité et de renouvellement du mot de passe; comme le mot de passe n'est pas utilisé, cela ne nous concerne pas.
'''Attention''': si vous changez le n° de groupe déjà utilisé, vous devrez adapter les n° de groupe des utilisateurs concernés dans le fichier "/etc/passwd" et revoir tous les fichiers et répertoires de votre système pour adapter ce changement. A EVITER ou à faire en toute connaissance de cause; quand ce groupe a été créé par vous-même et a une utilisation réduite, c'est faisable ou alors on s'aidera d'un script.




Ligne 305 : Ligne 306 :
* d'accès
* d'accès


===Propriété===
 
===Répertoires===
Auparavant l'arborescence des répertoires doit exister. On utilise la commande "mkdir" pour créer les répertoires nécessaires:
 
Si les répertoires parents n'existent pas encore, on les crée.
mkdir /produc
mkdir /produc/utilisateur
 
Nous devons donc créer un répertoire pour chaque utilisateur lié au service partagé "[home]" selon ce qui est mis dans le fichier "/etc/passwd".
Par exemple pour l'utilisateur "eric":
mkdir /produc/utilisateur/eric
 
De même pour le service partagé "[famille]":
mkdir /produc/utilisateur/famille
 
 
===Propriétés===
La propriété se passe à trois niveaux:
La propriété se passe à trois niveaux:
* l'utilisateur  
* l'utilisateur  
Ligne 312 : Ligne 329 :


En ligne de commande, on utilise "'''chown'''".
En ligne de commande, on utilise "'''chown'''".
Par exemple, on veut faire appartenir le répertoire "/produc/utilisateur/eric" à l'utilisateur "eric" et au groupe "users":
 
  chown -R eric:users /produc/utilisateur/eric
 
Pour chaque utilisateur lié au service partagé "[home]" selon ce qui est mis dans le fichier "/etc/passwd", on doit adapter la propriété. Par exemple pour l'utilisateur "eric", on lui fait appartenir son répertoire "/produc/utilisateur/eric" et à son groupe "smbusers":
  chown -R eric:smbusers /produc/utilisateur/eric
L'option "-R" pour récursif, change ce droit pour le répertoire et tout son contenu. Pour des fichiers, cette option est inutile.
L'option "-R" pour récursif, change ce droit pour le répertoire et tout son contenu. Pour des fichiers, cette option est inutile.


Autres exemples:
Autres exemples:
Pour le service partagé "[waterbear]" qui doit appartenir au service HTTPD géré par l'utilisateur "apache" par défaut:
  chown -R apache:apache /web/waterbear
  chown -R apache:apache /web/waterbear
  chown -R smbuser:users /produc/partage/famille
Pour le service partagé "[famille]":
Dans le dernier cas, dans la configuration Samba, l'utilisateur est "smbuser" ("force user") et pour que tous les utilsateurs liés à Samba doivent pouvoir y accéder et qu'ils font tous partie du groupe "users", il faut donner les droits à l'utilisateur et au groupe.
  chown -R smbuser:smbusers /produc/utilisateur/famille
Dans le dernier cas, dans la configuration Samba, l'utilisateur est "smbuser" (option "force user") et pour que tous les utilisateurs liés à Samba doivent pouvoir y accéder et qu'ils font tous partie du groupe "smbusers", il faut donner les droits à l'utilisateur et au groupe.




Ligne 331 : Ligne 354 :
# lecture (read ou r) ayant la valeur 4
# lecture (read ou r) ayant la valeur 4
# écriture (write ou w) ayant la valeur 2, il inclut la création, la modification et la suppression
# écriture (write ou w) ayant la valeur 2, il inclut la création, la modification et la suppression
# exécution (execute ou x) ayant la valeur 1, il permet l'exécution d'un script ou d'un programme
# exécution (execute ou x) ayant la valeur 1, il permet l'exécution d'un script ou d'un programme; pour la gestion du répertoire


Ces droits s'additionnent, si un de ces trois droits n'est pas choisi, sa valeur passe à 0; exemple pour le droit de lecture et d'exécution, la valeur finale est de 4+0+1=5; pour les droits totaux, la valeur passe à 7 et pour aucun droit, elle vaut 0.
Ces droits s'additionnent, si un de ces trois droits n'est pas choisi, sa valeur passe à 0; exemple pour le droit de lecture et d'exécution, la valeur finale est de 4+0+1=5; pour les droits totaux, la valeur passe à 7 et pour aucun droit, elle vaut 0.
Ligne 340 : Ligne 363 :
# droits du propriétaire utilisateur
# droits du propriétaire utilisateur
# droits du propriétaire groupe
# droits du propriétaire groupe
# droits pour tout le monde
# droits pour tout le monde; on le mettra à "0" pour ne pas ouvrir l'accès à tout utilisateur de la machine
 


En ligne de commande, on utilise "'''chmod'''".
En ligne de commande, on utilise "'''chmod'''".
Ligne 347 : Ligne 371 :
L'option "-R" pour récursif, change ce droit pour le répertoire et tout son contenu. Pour des fichiers, cette option est inutile.
L'option "-R" pour récursif, change ce droit pour le répertoire et tout son contenu. Pour des fichiers, cette option est inutile.


Autre exemple:
 
  chmod -R 770 /produc/partage/famille
Autre exemple, pour le service partagé "[famille]":
Ici dans la configuration Samba, l'utilisateur est "smbuser" ("force user") et pour que tous les utilsateurs liés à Samba doivent pouvoir y accéder et qu'ils font tous partie du groupe "users", il faut donner les droits à l'utilisateur et au groupe.
  chmod -R 750 /produc/utilisateur/famille
Ici dans la configuration Samba, l'utilisateur est "smbuser" ("force user") et pour que tous les utilisateurs liés à Samba doivent pouvoir y accéder et qu'ils font tous partie du groupe "smbusers", il faut donner les droits à l'utilisateur et au groupe.




Note: il existe des commandes plus spécifiques ou plus parlantes.
Note: il existe des commandes plus spécifiques ou plus parlantes.
==Service partagé avancé==
Nous allons maintenant créer un service partagé plus spécial qui joue sur les droits et propriétés Unix.
Le but est la création d'un service partagé que l'on nommera "[partage]" où tout le monde aura accès en lecture. Et chaque utilisateur y aura un répertoire propre où il aura tous les droits; ce répertoire et son contenu lui appartiendront; les autres utilisateurs y auront un droit de lecture. Par facilité, ce répertoire portera le même nom que celui de l'utilisateur. Cette structure permet de classer et de retrouver facilement ce qui appartient à un utilisateur donné alors qu'à l'opposé, le service partagé "[famille]" permet une organisation libre et totalement ouverte sans connaissance du créateur du fichier ou du répertoire (option "force user = smbuser").
Dans le fichier de configuration de Samba "/etc/samba/smb.conf" on ajoute la section:
----
[partage]
        comment = Partage
        path=/produc/utilisateur/partage
        browseable = yes
        writable = yes
----
Pour faciliter la création de l'arborescence, des accès et des propriétés, nous avons créé un script. En début de script, on crée les répertoires de base, les droits d'accès et de propriété. On fait de même pour la poubelle et pour chaque utilisateur. On analyse le fichier des utilisateurs "/etc/passwd" pour les repérés selon leur n° de groupe.
A la racine, les utilisateurs ne pourront créer ou détruire aucun fichier ou répertoire.
On peut donner le nom "partage.bat" à ce script. On adapte en début de script, les quelques paramètres selon nos besoins; ceux adoptés sont conformes à nos exemples:
----
#!/bin/bash
##########################################
# On adapte les paramètres suivant:
#
# CHEMIN: chemin de base de notre arborescence
# IDGROUP: n° ID du groupe smbusers
# GUESTSMB: nom d'utilisateur invité de SMB (s'il existe)
# USERSMB: nom d'utilisateur Unix de SMB
# GROUPESMB: nom de groupe de SMB
#
##########################################
CHEMIN=/produc/utilisateur
IDGROUP=1001
GUESTSMB=smbguest
USERSMB=smbuser
GROUPSMB=smbusers
#
# Création du répertoire de base, accès et propriété
#
if [ ! -d ${CHEMIN}/partage ]
then
  /usr/bin/mkdir ${CHEMIN}/partage
  /usr/bin/chmod 550 ${CHEMIN}/partage
  /usr/bin/chown ${USERSMB}:${GROUPSMB} ${CHEMIN}/partage
fi
#
# Création de la poubelle, ses accès et propriété
#
if [ ! -d ${CHEMIN}/partage/.recycle ]
then
  /usr/bin/mkdir ${CHEMIN}/partage/.recycle
  /usr/bin/chmod 770 ${CHEMIN}/partage/.recycle
  /usr/bin/chown ${USERSMB}:${GROUPSMB} ${CHEMIN}/partage/.recycle
fi
#
# Recherche des noms des utilisateurs SMB
#
LISTE=`/usr/bin/awk -F  ":" ' {if ($4 =='${IDGROUP}') printf("%s ",$1) }' /etc/passwd`
#
# Création des répertoires des utilisateurs, leurs accès et propriété; on évite des utilisateurs spéciaux smbuser et smbguest
#
for USER in $LISTE
do
  if [[ ${USER} != ${USERSMB} && ${USER} != ${GUESTSMB} ]] ;
  then
  if [ ! -d ${CHEMIN}/partage/${USER} ]
  then
    /usr/bin/echo $USER
    /usr/bin/mkdir ${CHEMIN}/partage/${USER}
    /usr/bin/chmod 750 ${CHEMIN}/partage/${USER}
    /usr/bin/chown ${USER}:${GROUPSMB} ${CHEMIN}/partage/${USER}
  fi
  fi
done
----
Ce script peut être réutilisé suite à l'ajout d'un utilisateur sans impacter ce qui existe.
Notons que ce script doit être adapté au niveau de la recherche des utilisateurs si ceux-ci sont gérés par Active Directory de Windows Server. En effet dans ce cas, les utilisateurs et groupes Windows sont ajoutés virtuellement à ceux de Linux et donc les droits d'accès et propriétés suivent les mêmes règles de Linux.




Ligne 367 : Ligne 474 :
Les ports TCP à ajouter sont 139 et 445. Dans l'exemple, l'adressage de notre LAN est 192.168.1.0 avec un masque de 255.255.255.0 ou de 24 bits. Nous utilisons IPTABLES; voici les lignes à ajouter:
Les ports TCP à ajouter sont 139 et 445. Dans l'exemple, l'adressage de notre LAN est 192.168.1.0 avec un masque de 255.255.255.0 ou de 24 bits. Nous utilisons IPTABLES; voici les lignes à ajouter:
----
----
  -A INPUT -p tcp -m tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 139 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 445 -s 192.168.1.0/24 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 445 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
----
----


Ligne 385 : Ligne 492 :


==Paramétrage de WSDD==
==Paramétrage de WSDD==
Les options de lancement peuvent être ajoutées dans le fichier "'''/etc/sysconfif/wsdd'''".
Les options de lancement peuvent être ajoutées dans le fichier "'''/etc/default/wsdd'''".
 
Anciennement les options se trouvaient dans le fichier "'''/etc/sysconfig/wsdd'''".
Voici un exemple de paramétrage:
Voici un exemple de paramétrage dans le cas du fichier "'''/etc/default/wsdd'''":
----
WSDD_PARAMS=" -4 -w HOME -v -i enp0s25 "
----
Dans le cas du fichier "'''/etc/sysconfig/wsdd'''", voici son contenu équivalent:
----
----
OPTIONS=" -4 -w HOME -v -i enp0s25 "
OPTIONS=" -4 -w HOME -v -i enp0s25 "
----
----
Explication de ces options:
Explication de ces options:
Ligne 429 : Ligne 540 :
Nous utilisons IPTABLES et au final,voici les lignes à ajouter:
Nous utilisons IPTABLES et au final,voici les lignes à ajouter:
----
----
  -A INPUT -p tcp -m tcp --dport 5357 -s 192.168.1.0/24 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 5357 -s 192.168.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
  -A INPUT -p udp -m udp --dport 3702 -s 192.168.1.0/24 -d 239.255.255.250 -m pkttype --pkt-type multicast -j ACCEPT
  -A INPUT -p udp -m udp --dport 3702 -s 192.168.1.0/24 -d 239.255.255.250 -m pkttype --pkt-type multicast -j ACCEPT
  -A INPUT -p udp -m udp --dport 1900 -d 239.255.255.250 -j DROP
  -A INPUT -p udp -m udp --dport 1900 -d 239.255.255.250 -j DROP
Ligne 467 : Ligne 578 :


----
----
''->[[LINUX:Menu|retour au menu de Linux]]''
''→ [[LINUX:Menu|retour au menu de Linux]]''
----
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]