« LINUX:Samba » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(11 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 70 : | Ligne 70 : | ||
passdb backend = tdbsam | passdb backend = tdbsam | ||
admin users = root | admin users = root | ||
guest account= | 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 90 : | 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'''= | ** '''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 | ** '''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 142 : | 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 " | 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 161 : | 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. | 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. | ||
---- | ---- | ||
[famille] | [famille] | ||
comment = Espace Famille | comment = Espace Famille | ||
path=/produc/ | path=/produc/utilisateur/famille | ||
browseable = yes | browseable = yes | ||
read only = no | read only = no | ||
Ligne 216 : | Ligne 214 : | ||
===Groupes=== | ===Groupes=== | ||
Suivant notre exemple, nous avons besoin | 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": | ||
---- | ---- | ||
smbusers:x:1001: | |||
---- | ---- | ||
Et dans le fichier "/etc/gshadow": | Et dans le fichier "/etc/gshadow": | ||
---- | ---- | ||
smbusers::: | |||
---- | ---- | ||
Ligne 234 : | 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 | ||
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 246 : | Ligne 243 : | ||
===Utilisateurs=== | ===Utilisateurs=== | ||
Suivant notre exemple, nous avons besoin de quelques utilisateurs qui appartiennent au groupe défini ci-dessus (GID= | 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: | smbguest:x:1000:1001:Invite SMB:/dev/null:/sbin/nologin | ||
albert:x:1002: | smbuser:x:1001:1001:Utilisateur SMB:/dev/null:/sbin/nologin | ||
monique:x:1003: | albert:x:1002:1001:Albert:/produc/utilisateur/albert:/sbin/nologin | ||
francoise:x:1004: | monique:x:1003:1001:Monique:/produc/utilisateur/monique:/sbin/nologin | ||
eric:x:1005: | francoise:x:1004:1001:Françoise:/produc/utilisateur/francoise/sbin/nologin | ||
eric:x:1005:1001:Eric:/produc/utilisateur/eric:/sbin/nologin | |||
---- | ---- | ||
Ligne 266 : | 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"). | ||
Et dans le fichier "/etc/shadow": | Et dans le fichier "/etc/shadow": | ||
---- | ---- | ||
smbguest:!::::::: | |||
smbuser:!::::::: | smbuser:!::::::: | ||
albert:!::::::: | albert:!::::::: | ||
Ligne 284 : | 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 308 : | Ligne 306 : | ||
* d'accès | * d'accès | ||
=== | |||
===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 315 : | Ligne 329 : | ||
En ligne de commande, on utilise "'''chown'''". | En ligne de commande, on utilise "'''chown'''". | ||
Par exemple, on | |||
chown -R 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: | Pour le service partagé "[famille]": | ||
Dans le dernier cas, dans la configuration Samba, l'utilisateur est "smbuser" ("force user") et pour que tous les | 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 334 : | 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 343 : | 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 350 : | 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 | Autre exemple, pour le service partagé "[famille]": | ||
Ici dans la configuration Samba, l'utilisateur est "smbuser" ("force user") et pour que tous les | 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 370 : | 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 388 : | Ligne 492 : | ||
==Paramétrage de WSDD== | ==Paramétrage de WSDD== | ||
Les options de lancement peuvent être ajoutées dans le fichier "'''/etc/ | 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 432 : | 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 |