SAMBA
●
Objectif:
– partager des fichiers sous Linux par un protocole compatible Microsoft
●
Contenu:
– Configuration et administration d'un serveur SAMBA sur un serveur Unix avec des clients Windows/Unix:
● partage des systèmes de fichiers
● partage d'imprimante
● contrôleur de domaine Windows 2000/NT
● serveur WINS (Windows Internet Name Service)
– Configuration d'un client SAMBA et montage distant
●
Durée:
– ½ journée
protocole SMB
● SMB (Server Message Block) est un protocole de communication
implémenté par IBM et modifié par Microsoft (qui l'a renommé en CIFS):
permet de partager diverses ressources (fichiers, imprimantes, etc.) entre ordinateurs équipés de Windows.
● SAMBA est l'implémentation libre de ce protocole:
– smbd est un daemon qui prend en charge le partage de fichiers, d'imprimante, et l'authentification des clients SMB
– nmbd est un daemon qui supporte les services NetBios et WINS
● SAMBA peut également agir comme Contrôleur Principal de Domaine
● Le développement de la version 4 implémente un serveur Active Directory
NetBIOS
● Le protocole (1984 par IBM) est une simple API qui permet aux
applications de se connecter et de partager des données entre elles de manière rudimentaire.
● Lorsqu'un ordinateur se connecte, il effectue une requête d'enregistrement de son nom NetBIOS, soit auprès d'un NetBIOS Name Server, soit par broadcast auprès de chaque ordinateur du réseau
● Il utilise les ports :
– 135: Service de localisation pour les appels de procédure à distance
– udp 137: netbios-ns - NETBIOS Name Service
– udp 138: netbios-dgm - NETBIOS Datagram Service
– tcp 139: netbios-ssn - NETBIOS Session Service
– 445: versions récentes de Windows : 2000, XP, Vista
NetBIOS (suite)
● NetBIOS indique aussi le type de service fourni en ajoutant un 16ème octet à la fin du nom de machine (maxi 15 caractères)
– 00: workstation service name
– 01: MSBROWSE : machine collectant les infos de ses voisines
– 03: messenger service name
– 1B: domain master browser name
– 1C: domain group name (contrôleur de domaine)
– 1D: network master browser name (ou serveur WINS)
– 1E: normal group name (workgroup)
– 20: server service name (serveur de fichiers)
– BE: network monitor agent
– BF: network monitor utility
● nmblookup -S « nom de machine »
Exploration du domaine
●
l'exploration se fait d'abord par diffusion (ne passe pas les routeurs):
– nmblookup -B 192.168.0.255 « * », ou findsmb (ne trouve pas les postes XP)
●
une machine est élue « Maître Explorateur » (master browser) pour tenir à jour la liste des machines sur le groupe de travail (code 0x1D)
●
toutes les 12 minutes, les ordinateurs annoncent leur présence au nom NetBIOS <domaine>[1D] (cf note1), c'est à dire au maître explorateur
●
l'exploration du voisinage réseau par un client se fait par découverte des maîtres explorateurs pour ensuite les interroger directement
●
le maître explorateur du Domaine fusionne les listes d'exploration de
chaque sous-réseau en une seule grande liste (Contrôleur de Domaine
ou serveur WINS)
Élection du maître explorateur
●
paramètres jouant sur les élections de maître explorateur ou permettant à un serveur Samba de servir des listes d'exploration
– announce version = 4.2 par défaut. Win2K s'annonce à 5.0, on peut donc avoir besoin de le rendre supérieur.
– local master = Yes par défaut. permet de rendre Samba éligible.
– os level = 33 par défaut. WinNT Server vaut 32, WinNT Station vaut 16, Win9x et WfWg valent 1
– prefered master = No par défaut. La positionner à Yes provoquera une élection à chaque démarrage du démon smbd.
– domain master = No par défaut. À positionner À Yes UNIQUEMENT si le serveur Samba est Contrôleur Principal de Domaine, et qu'il doit donc aussi être le maître explorateur du domaine. À éviter absolument s'il
existe déjà un autre CPD sur le domaine.
– browse list = Yes par défaut. Permet à Samba de distribuer des listes d'exploration.
serveur WINS
●
Le serveur WINS est un autre moyen, centralisé, de résoudre les noms
●
# Windows Internet Name Serving Support Section:
– wins support = yes : indique à nmbd de devenir serveur WINS
– wins server = w.x.y.z : indique à nmbd de devenir un client WINS du serveur spécifié:
– ATTENTION: ne peut être les 2 à la fois !
– dns proxy = no : empêche nmbd de résoudre les noms NetBIOS par DNS
– name resolve order = lmhosts host wins bcast : liste des services de noms à utiliser dans l'ordre pour résoudre les noms en adresse IP
●
On peut diffuser l'adresse sur serveur WINS par dhcp:
– option netbios-name-servers w.x.y.z; dans dhcpd.conf
● /etc/samba/lmhosts
est une alternative statique au serveur WINS
Lenteurs du voisinage réseau
●
une machine allumée n'apparaît pas immédiatement dans le voisinage réseau, ou une machine qu'on éteint ne disparaît pas immédiatement non plus. Il y a plusieurs explications:
– une élection de maître explorateur a peut-être eu lieu, et toutes les listes d'explorations sont à refaire.
– les ordinateurs viennent peut-être tous d'envoyer leur nom NetBIOS au maître explorateur, il va donc s'écouler 12 minutes avant qu'il ne reçoive la mise à jour comportant l'allumage de la machine.
– avant de considérer un ordinateur comme éteint et avant de le supprimer de la liste d'exploration, le maître explorateur attend 3 mises jours de cette liste (elles ont lieu en moyenne toutes les 12 minutes).
– éteindre proprement l'ordinateur n'accélère pas les choses. Il n'y a que dans le cas où la résolution se fait par WINS que l'ordinateur notifie son serveur WINS qu'il va se déconnecter
Installation
● samba: LanManager-like file and printer server for Unix.
● samba-common: Samba common files used by both the server and the client.
● smbclient: LanManager-like simple client for Unix.
● swat: Samba Web Administration Tool
● samba-doc: Samba documentation.
● smbfs: Mount and umount commands for the smbfs
● libpam-smbpass: pluggable authentication module for SMB password database
● libsmbclient: Shared library that allows applications to talk to SMB servers
● libsmbclient-dev: libsmbclient shared libraries
● winbind: Service to resolve user and group information from WinNT servers
● python2.4-samba: Python bindings that allow access to various aspects of Samba
Démarrage
● Pour démarrer Samba, il suffit de lancer smbd et nmbd
– en utilisant init et un script de démarrage des deux daemons
– en utilisant xinetd:
● /etc/services contient les services netbios
● /etc/xinetd.d gère les 2 démons
● démarrer xinetd
● permet de démarrer Samba par xinetd uniquement lorsqu'un client tentera de se connecter au serveur
● Il ne faut utiliser xinetd que pour les serveurs ayant une faible charge
Configuration
● /etc/samba/smb.conf contient la configuration de Samba
● par défaut Samba vérifie son fichier de configuration toutes les 60 secondes et active immédiatement les changements
● divisé en différentes sections, chacune contenant des paramètres:
– La section [global] définit la configuration de base du serveur
– La section [homes] définit les répertoires partagés des utilisateurs
– La section [printers] permet de partager les imprimantes
– Les autres sections définissent les autres répertoires partagés
● syntaxe:
– Les commentaires commencent par # ou ;
– [nom_de_section]
– parametre = valeur
– parametre2 = valeur2
section [global]
●
Exemple:
netbios name = kiwi
workgroup = LABO-UNIX
server string = jewom-samba-server log file = /var/log/samba/%m.log lock directory = /var/lock/samba
●
autres paramètres principaux:
– hosts allow : classes d'IP autorisées à se connecter
– encrypt passwords = true
– guest account = nobody
– invalid users = root
– passdb backend = {smbpasswd | tdbsam | ldapsam}[:path]
la directive security
●
détermine le mode de connexion des clients
●
security = share, user, domain, server, ads
– share: tous les utilisateurs ont les mêmes droits, un mot de passe est éventuellement associé à chaque ressource
– user (défaut): à chaque ressource est associée une ACL qui définit les permissions de chaque utilisateur et groupe à la ressource
– domain: indique que l'authentification est réalisée par un contrôleur de domaine (autre). NE REND PAS LE SERVEUR SAMBA
CONTRÔLEUR DE DOMAINE.
– server: indique que l'authentification est réalisée par un autre serveur Samba ou NT
– ads: samba se comporte comme un serveur membre d'une forêt ADS.
Kerberos doit être installé et samba doit être joint à la forêt ADS. NE
REND PAS LE SERVEUR SAMBA SERVEUR ACTIVE DIRECTORY
partages de répertoires
●
Partage de répertoires utilisateurs:
[homes]
comment = Home Directories browseable = no
read only = yes guest ok = no
– Chaque utilisateur ayant un compte sur la machine aura donc accès à son répertoire.
●
Partages d'autres répertoires:
[public]
comment = Public Stuff path = /home/samba public = yes
writable = yes
section [printers]
●
permet de partager les imprimantes:
[printers]
comment = All Printers path = /var/spool/samba browseable = no
guest ok = no writable = no printable = yes
●
il faut ajouter quelques paramètres dans la section [global] :
– load printers = yes permet de charger la liste des imprimantes pour ne pas avoir à les définir manuellement
– printcap name = cups indique l'emplacement de la liste des imprimantes
– printing = CUPS définit le système d'impression utilisé
Gestion des Utilisateurs
●
Les utilisateurs doivent avoir un compte unix sur le serveur
●
Samba gère sa propre liste de mots de passe chiffrés
●
Pour ajouter un utilisateur Samba, il faut donc le recréer
●
La commande smbpasswd:
– lancée par root: créer des utilisateurs
– lancée par un utilisateur: change son mot de passe
●
La commande mksmbpasswd transforme les entrées passwd en entrées smbpasswd:
– cat /etc/passwd | mksmbpasswd > /etc/samba/smbpasswd
Permissions des Utilisateurs et Groupes
●
admin users: users who will be granted administrative privileges
●
force group: Specifies a UNIX group name that will be assigned as the default primary group
●
force user: Specifies a UNIX username that will be assigned as the default user
●
guest ok: if set no password is required. Privileges of the guest account.
●
invalid users: users not be allowed to connect
●
read list: users that are given read-only access
●
valid users: users that should be allowed to login to this service.
●
write list: users that are given read-write access
●
on peut spécifier des groupes unix en les préfixant de @
Définition du Contrôleur de Domaine
●
modifications de la section [global] du fichier smb.conf :
domain logons = yes # active le service PDC security = user
domain master = yes local master = yes
preferred master = yes os level = 65
time server = yes
●
script de connexion
logon script = logon.bat
●
cas win 95/98/Me
logon home = \\%L\profiles\%U logon drive = H:
●
cas NT/2000/XP
logon path = \\%L\profiles\%U
partages du Contrôleur de Domaine
●
nouveaux partages à placer après la section [global] :
[netlogon]
path = /var/lib/samba/netlogon writable = no
browsable = no write list = admin
[profiles]
path = /var/lib/samba/profiles browsable = no
writable = yes
create mask = 0600 directory mask = 0700
[homes]
read only = no browsable = no guest ok = no
map archive = yes
permissions
●
création d'un compte d'administration pour joindre les machines Windows au domaine:
– smbpasswd -a root
●
le répertoire netlogon peut appartenir à root:root en lecture seule pour tout le monde
●
le répertoire profiles doit être en lecture-écriture aux utilisateurs samba:
il peut donc appartenir à root:smb et 775 où les utilsateurs sont membres du groupe smb
●
exemple de logon.bat:
REM pour monter le home de user sur H:
NET USE H: \\%L\homes
REM exécuter des clés de registre regedit /s \\%L\netlogon\aqs.reg
joindre les machines au domaine
●
Pour participer à un domaine, un système WinNT/2000/XP doit être membre de ce domaine
●
L'appartenance d'une machine à un domaine s'implémente en utilisant des comptes machine:
– semblables à des comptes utilisateurs
– permettent au contrôleur de domaine de reconnaître les machines pouvant s'authentifier sur le domaine
– useradd -g machines -c Machine -s /dev/false -d /dev/null 'nom_machine$'
– smbpasswd -m -a 'nom_machine$'
●
section [global] de /etc/smb.conf
– add machine script = /usr/sbin/useradd -g machines -c Machine -d /dev/null -s /bin/false %u
modification de la base de registres
●
pour un client Windows 98:
– [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Vx D\VNETSUP]
– "EnablePlainTextPassword" = dword:00000001
●
pour un client WindowsNT4:
– [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
Rdr\Parameters]
– "EnablePlainTextPassword" = dword:00000001
●
pour un client Windows XP PRO (SP1):
– [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Netl ogon\Parameters]
– "requiresignorseal"= dword:00000000
Commandes
● winbindd, démon pour autoriser des utilisateurs dont le compte est stocké dans une base Windows NT/2000
● findsmb, cherche toutes les ressources Samba d'un réseau
● net, administre à distance des serveurs Samba.
● nmblookup, trouver l'adresse IP d'une machine dont on connaît le nom NetBios
● pdbedit, gére les comptes d'une base de donnée SAM
● smbcacls, définit ou scrute les ACLs sur un système de fichier windows NT
● smbclient, est client FTP-like pour partages Samba:
– smbclient -L nom-de-machine
– smbclient //nom-de-machine/ressource
● smbgroupedit, mappe des groupes NT avec des groupes UNIX
● smbmount/smbumount, monte / démonte des partages Samba
● smbpasswd, change les mots de passe des utilisateurs de Samba
● smbsh, fonctionne comme un shell dans un système de fichier distant.
● smbspool, envoie des travaux d'impression à une imprimante partagée
● testparm, vérifie la syntaxe du fichier de configuration de Samba