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 reste à adhérer au domaine à partir des postes clients avec le compte root
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 wbinfo, interroge le daemon winbindd