Samba (avancé)
Ce manuel explique la configuration samba pour
- un contrôleur de domaine
- et/ou un serveur de fichiers
Généralités
http://us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/
Configuration du serveur
La configuration du serveur Samba s’écrit dans le fichier /etc/samba/smb.conf. La commande testparm permet de vérifier la validité et le contenu de la configuration de smb.conf. La commande grep permet de vérifier la configuration de paramètres précis :
#testparm | grep security
- Les lignes peuvent être commentées par un point-virgule (;) ou dièse (#) devant la ligne.
Le fichier se décompose en une section « global » définissant les paramètres généraux suivie de sections pour chaque partage.
La section [global]
<licode file=/etc/samba/smb.conf> [global] netbios name=asteroide workgroup=WORKGROUP security=user log file=/var/log/samba/log.%m log level=1 encrypt passwords=yes hosts allow = 127. 192.168.10. </licode>
L’exemple de configuration ci-dessus définit :
- le nom netbios du serveur
- le nom du domaine ou groupe de travail
- le type d’authentification utilisé. Il existe trois types user, share et server.
Au cours d’une authentification « user », le client commence la session en envoyant un login et un mot de passe. Le serveur accepte (ou refuse) en fonction de l’adéquation login/password et du nom de machine du client. Le client peut alors monter tous les partages sans mot de passe supplémentaire.
L’ authentification « share » force le client a donner un mot de passe à chaque fois qu’il veut monter un partage.
L’authentification « server » est intéressante pour joindre le serveur à un domaine. Le client donne son login/mot de passe au serveur de fichiers qui s’en sert pour vérifier l’authentification auprès d’un serveur distant (ex PDC).
- la destination du fichier de logs (ici un fichier par machine d’où le %m)
- le niveau de debuggage désiré dans les logs (de 0 à 10)
- le cryptage des mots de passe
- le fichier de mot de passe
- l’option hosts allow permet de limiter les connexions à certaines adresses IPs.
Le manuel (man smb.conf) donne un description précise de chaque paramètre. On y trouve aussi la définition des variables utilisées par smb.conf :
- %m nom netbios de la machine qui se connecte
- %L nom netbios du serveur
- %u nom de l’utilisateur du partage
- %U nom de session de l’utilisateur sur le serveur
- %v numéro de version Samba
Le fichier de mot de passe
Le plus simple pour samba est d'utiliser la base d'authentification - utilisateur et machine - TDB (trivial database). L'utilisation de cette base est recommandée pour les systèmes qui n'ont pas besoin d'authentification LDAP, avec moins de 250 utilisateurs.
<licode file=/etc/samba/smb.conf>
passdb backend = tdbsam
</licode>
Pour connaître la liste des utilisateurs, taper:
#pdbedit -w -L
Les autres sections
Elles correspondent à différents types de partages
[netlogon] est utile pour une configuration en PDC
[home] définit automatiquement les répertoires utilisateurs (cf serveur de fichiers)
[partage] définit tous les autres partages (cf serveur de fichiers)
Commandes de vérification
Commandes Linux
Chercher une machine samba sur l’adresse 127.0.0.1:
#nmblookup –U 127.0.0.1 __SAMBA__
Rechercher sur tout le réseau local :
#nmblookup –B 192.168.10.255 __SAMBA__
Lister les partages :
#smbclient –L //serveur
Se connecter à un partage avec l’utilisateur user :
#smbclient //serveur/partage –U user
La commande smbmount monte les partages :
#smbmount //serveur/partage /mnt/partage –o ip=192.168.10.1, username=user
smbmount
smbmount //asteroide/Bureau /mnt/smb -o ip=192.168.111.1,username=chris smbmount //asteroide/Bureau /home/chris/smb/ smbclient //asteroide/Bureau -U chris -I 192.168.111.1
Avec smbfs dans fstab: <licode file=/etc/fstab> //home/chris /mnt/home_chris smbfs user,auto,rw,uid=chris,credentials=.home.cre 0 0 //home/data /mnt/data smbfs user,exec,gid=users,credentials=.home.cre,codepage=cp850,iocharset=iso8859-15,debug=4 0 0 </licode> ou avec cifs : <licode file=/etc/fstab> //home/usbdisk /mnt/usbdisk cifs user,exec,gid=users,credentials=.home.cre,iocharset=iso8859-15 0 0 </licode>
Attention cifs utilise le dns pour retrouver home
<licode file=.home.cre> username=xxx password=xxx </licode>
Commandes Windows
#nbtstat –A 192.168.10.12 donne les noms netbios enregistrés par une adresse IP
#net view donne les serveurs de fichiers sur le réseau
#net view \\serveur donne les partages disponibles sur une machine
#net use h: \\serveur\partage /user:chris connecte un partage au lecteur réseau H:
#net use * /d déconnecte tous les partages.
Serveur de fichiers
Création des utilisateurs (si pas de PDC)
Il faut créer un compte Unix et un compte samba par utilisateur :
#adduser utilisateur #smbpasswd –a utilisateur
- L’option –a permet de rajouter le mot da passe utilisateur au fichier smbpasswd.
Il ne faut pas oublier de créer le « home » de l’utilisateur avec les bons droits :
#mkdir /home/utilisateur #chown utilisateur.public /home/utilisateur -R
- L’utilisateur correspond à son « login » et le groupe public, correspond au groupe de partage.
#ls -l
drwxr-xr-x 3 cdelivois InterAct 4096 Dec 19 18:57 cdelivois
Configuration de partages
Le partage [homes]
- Le partage [homes] correspond au partage propre à chaque utilisateur qui correspond à son répertoire personnel définit dans /etc/password.
<licode file=/etc/samba/smb.conf> [homes] guest ok=no read only=no </licode> Le partage n’autorise pas l’accès aux invités et peut être utilisé en écriture.
Les partages « classiques »
<licode file=/etc/samba/smb.conf>
[Assistante]
browseable=Yes path=/home/assistante invalid users = root valid users = cdelivois,struttet writeable=yes create mask=0660 directory mask=0770 </licode>
Création des répertoires
Il faut créer les répertoires avec les bons droits. Par exemple pour le répertoire « films » :
#mkdir /home/films #chown root.public /home/films #chmod 770 /home/films
Remarque : Tous les utilisateurs doivent faire partie du même groupe (public en l’occurrence). Ils pourront alors accéder par l’explorateur windows aux fichiers du répertoire assistante s’ils sont référencés dans la ligne « valid users ».
Attention, cela veut dire que si ces utilisateurs ont un accès telnet ou ssh au système, ils peuvent récupérer tous les documents auxquels ils n’ont pas accès par l’explorateur. Si l’accès ssh est requis pour tous, le seul moyen est de créer un groupe d’accès par répertoire.
- Pour inscrire un utilisateur dans un groupe, il suffit d’éditer le fichier /etc/group et de mettre l’utilisateur, à la fin de la ligne. Ex :
<licode file=/etc/group> films::500:you,me </licode>
Permissions
Paramètres avancés
<licode file=/etc/samba/smb.conf> hide unreadable = Yes cache les fichiers qui ne sont pas accessibles veto files =/*.exe/*.dll/*.com/*.vbs/*.{*}/ hide files = /fichieracacher.txt/*.test/
veto oplock files = /*.mdb/*.MDB/ </licode>
- Op lock veut dire « Opportunist locking » : le client peut télécharger un fichier et le mettre en cache sur son disque dur pendant qu’il le modifie. Si un deuxième client veut accéder au fichier, le premier client est averti et met à jour la version sur le serveur. Cela améliore les performances mais l’oplock ne doit pas être utilisé lors de l’utilisation à plusieurs d’une base de données. Les oplocks peuvent être désactivés par les options oplocks et level2oplocks.
Autoriser la commande NET TIME \\SERVERNAME /SET /YES qui synchronise l’horloge client sur l’horloge du serveur. <licode>time server = Yes</licode>
Optimiser les performances du serveur avec socket options. <licode>socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192</licode>
Problèmes rencontrés
Le fichier docs/textdocs/DIAGNOSIS.TXT livré avec les sources de Samba permet de diagnostiquer les problèmes les plus courants.
Configuration avancée
http://us2.samba.org/samba/docs/man/Samba-HOWTO-Collection/passdb.html#id2554333
http://www.ofb.net/~jheiss/samba/ldap.shtml
LDAP
Configuration d'openldap
<licode file=/etc/openldap/slapd.conf> include /etc/openldap/schema/samba.schema
- Indices to maintain
- required by OpenLDAP
index objectclass eq
index cn pres,sub,eq index sn pres,sub,eq
- required to support pdb_getsampwnam
index uid pres,sub,eq
- required to support pdb_getsambapwrid()
index displayName pres,sub,eq
- uncomment these if you are storing posixAccount and
- posixGroup entries in the directory as well
- index uidNumber eq
- index gidNumber eq
- index memberUid eq
index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub </licode>
Create the new index by executing:
#/sbin/slapindex -f slapd.conf
Remember to restart slapd after making these changes:
#/etc/init.d/slapd restart
Before Samba can access the LDAP server you need to store the LDAP admin password into the Samba-3 secrets.tdb database by:
#smbpasswd -w secret
Configuration de samba
- On considère que les comptes sont dans les groupes User, Group, Computers (cf Ldap & Linux)
Il faut aussi installer les outils smbldap (cf Ldap & Linux)
smb.conf
Adapter smb.conf avec les paramètres suivant (expliqués dans man smb.conf) <licode file=/etc/samba/smb.conf>
- ldap
ldap admin dn = "cn=Manager,dc=livois,dc=com" ldap ssl = off #start tls|on|off passdb backend = ldapsam:ldap://ldap.livois.com ldap suffix = dc=livois,dc=com ldap user suffix = ou=Users ldap group suffix = ou=Groups ldap machine suffix = ou=Computers
- ldap filter = (&(objectclass=sambaSamAccount)(uid=%u))
- user & group management
add user script = /usr/sbin/useradd -d /dev/null -g workstation -s /bin/false -M %u add machine script = /usr/sbin/smbldap-useradd -w "%u" add user script = /usr/sbin/smbldap-useradd -m "%u" ldap delete dn = Yes
- delete user script = /usr/sbin/smbldap-userdel "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
- delete group script = /usr/sbin/smbldap-groupdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u" </licode>
Relancer samba.
Contrôleur de domaine
L’avantage de créer un contrôleur de domaine est le SSO (Single Sign On). Une fois que l’utilisateur est connecté au domaine, il n’a plus à donner son mot de passe pour se connecter à différentes applications. Le contrôleur de domaine le fait à sa place. Le contrôleur de domaine permet aussi d’imposer des paramètres de sécurité à chaque utilisateur.
Configuration du serveur
Configuration de base
<licode file=/etc/samba/smb.conf> [global] domain logon=yes workgroup=INTERACT domain admin group=@admins encrypt passwords=yes passwd program = /usr/bin/passwd </licode>
Les paramètres propres au PDC sont simples. Il faut indiquer que le serveur est un PDC (domain logon) ainsi que le groupe administrateur de domaine (admins). Il faut donc créer le group admins dans lequel on rajoutera l’utilisateur root :
#groupadd admins
puis éditer le fichier <licode file=/etc/group>admins:x:502:root</licode>
Indiquer aussi le nom du domaine et demander que les mots de passe soient cryptés.
Configuration avancée
Ajout automatique de machine (A FAIRE)
La ligne suivante dans /etc/samba/smb.conf crée automatiquement un compte Unix pour les machines qui se connecte au PDC. <licode file=/etc/samba/smb.conf> add user script = /usr/sbin/useradd –d /dev/null –g workstation –s /bin/false –M %u </licode>
Il faut créer au préalable le groupe workstation.
#groupadd workstation
Remarque : cette option ne sert pas pour les machines W95/W98. En effet cet système d’exploitation ne fournit aucune authentification machine.
Synchronisation des mots de passe SAMBA/UNIX (Echec)
La synchronisation de mots de passe SAMBA/UNIX a posé des problèmes. Son utilité est limité. Cependant, voici la théorie :
Dans la section global, rajouter les lignes : <licode file=/etc/samba/smb.conf> unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = "New SMB password:" %n\n "Retype new SMB password:" %n\n *changed* </licode>
La première ligne demande à samba de synchroniser les mots de passe à l’utilisation de la commande smbpasswd.
La deuxième ligne indique l’emplacement du programme passwd (/bin/passwd) par défaut.
La troisième ligne (la plus difficile à configurer) indique la syntaxe de smbpasswd.
Les espaces sont des délimiteurs entre chaque type de caractères.
L’* correspond à 0 ou plusieurs caractères de tout type.
Le %n correspond au nouveau mot de passe.
Le \n correspond à la touche entrée.
Exemple de syntaxe de smbpasswd sur Gentoo :
#smbpasswd cdelivois
New SMB password: Retype new SMB password: Password changed for user cdelivois. Password changed for user cdelivois.
Pour debugger : <licode file=/etc/samba/smb.conf> passwd chat debug = yes log level=100 </licode>
Pour plus d’info, se référer au livre « Using Samba », Chapitre 6.
Le partage NETLOGON
Le partage netlogon contient :
- les scripts de logon
- et les politiques systèmes utilisées à la connexion
Créer le répertoire netlogon :
#mkdir --mode=0775 /home/netlogon #chown root.admins /home/netlogon
Etant donné l’importance du contenu de ce répertoire, ses permissions sont critiques! <licode file=/etc/samba/smb.conf> [netlogon] path=/home/netlogon logon script=logon.bat read only=yes write list=@admins </licode>
Scripts de logon (TODO)
Politiques systèmes (TODO)
Création des utilisateurs
http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/passdb.html
Créer un groupe « public » :
#groupadd public
Il faut créer un compte Unix et Samba :
- pour tous les utilisateurs du domaine
#adduser utilisateur –s /dev/null –G public #pdbedit –a utilisateur
- Il ne faut pas oublier de créer le « home » de l’utilisateur avec les bons droits :
#mkdir /home/utilisateur #chown utilisateur.public /home/utilisateur –R #chmod 700 /home/utilisateur -R
- L’utilisateur correspond à son « login » et le groupe public, correspond au groupe de partage.
#ls -l
drwx------ 3 cdelivois interact 4096 Dec 19 18:57 cdelivois
Remarque : pour ajouter des utilisateurs à un domaine, il faut d’abord créer un utilisateur root pour samba (#smbpasswd -a root).
Remarque Gentoo: on peut imaginer le script suivant pour créer un nombre important d’utilisateurs
<licode file=script>
- !/bin/bash
USERS="user1 user2 you me" GROUP=mygroup
for USER in $USERS; do useradd $USER -g $GROUP -s /dev/null mkdir /home/$USER chown $USER.$GROUP /home/$USER -R chmod 700 /home/$USER -R done </licode>
- pour toutes les machines clientes du domaine
Cela doit être fait automatiquement en utilisant la commande add user script de smb.conf. Cependant, il est possible de créer le compte manuellement en ajoutant un « $ » à la fin du nom de machine :
#adduser –g workstation –d /dev/null –s /bin/false –n ‘nom_de_machine$’ smbpasswd –m –a machine
Jonction d’utilisateurs au domaine
Windows NT et 2000
Joindre la machine et un utilisateur au domaine
Vérifier que les services WINS et netbios sont lancés
- Cliquer avec le bouton droit sur l’icône de poste de travail puis cliquer sur :
propriétés -> Identification Réseau -> ID Réseau.
- Choisir les options pour se rattacher à un domaine (J’appartiens à un réseau d’entreprise) puis rentrer successivement :
- Information sur le domaine et le compte utilisateur (Les coordonnées du compte à créer sur l’ordinateur)
- Le domaine de l’ordinateur (son nom et le domaine à intégrer)
- Nom d’utilisateur et mot de passe pour le domaine (coordonnées de root pour le domaine)
Il faut ensuite redémarrer l’ordinateur.
Remarque : le compte samba root doit être créé au préalable.
Créer un profil et le laisser en local pour l’utilisateur.
- Une fois que le compte utilisateur est créé, il faut se connecter avec l’utilisateur pour créer un profile.
Ensuite on clique avec le bouton droit sur l’icône du poste de travail, on choisit « propriétés », et « Profil des utilisateurs » .
- Cliquer sur « Modifier le type » puis choisir « Profil local » pour laisser le profil en local sur la machine.
Windows 95/98
Panneau de configuration -> Réseau-> Client pour les réseaux Microsoft
- Si le client n’est pas installé, il faut l’installer avec un CDROM Windows.
Il se peut qu’un CD pour W95 soit nécessaire pour la configuration suivante. -> Propriétés
Cocher la case « ouvrir une session sur un domaine Windows NT »
Spécifier le nom du domaine.
Remarque : Si l’option connexion rapide est choisie, il est possible que les profiles Windows 95/98 ne soient pas copiés sur le serveur.
Migration des profils utilisateurs (NT)
Cas général
Attention aux données du profil (notamment les documents du bureau) qui sont rarement sauvegardées.
Se connecter en tant qu’administrateur du domaine (FIXME)
Afficher les fichiers cachés (explorer->outils->options des dossiers->Affichage).
Copier (et non pas déplacer !!!) l’ancien profil vers le nouveau
Note : les profils se trouvent dans C:\Documents and Settings\
En cas de problèmes
Mozilla
Localiser le profil sur la machine (exemple dans C:\Mozilla\Profiles\default)
Lancer le Profile Manager (en général dans le menu démarrer, sinon cela revient à lancer Mozilla avec l’option –ProfileManager).
Créer un nouveau profil et indiquer le chemin désiré.
Lancer mozilla et le tour est joué !
Remarque : 2 profiles ne peuvent pas avoir le même nom. Il faut parfois effacer un profile default. (Il existe une option laisser les fichiers dans la manip).
Office
Imprimantes
Problèmes rencontrés
Il est impossible de changer son mot de passe avec W95/W98. Ce n’est pas implémenté dans ces versions de Windows. Une possibilité est d’utiliser une interface Webmin/SWAT.
La configuration en serveur de fichiers est plus simple. On peut s’y restreindre pour un premier niveau de debuggage.
Migration et Restauration
La migration de profiles
(cf l’installation d’un contrôleur de domaine)
La restauration de sauvegardes (tar)
#cd /home
- Restauration de répertoire partagés
#tar zxvf sauvegarde.tgz #chown root.groupe rep1 rep2 ... repx –R #chmod 770 rep1 rep2 … repx –R
- Restauration de répertoire personnel
#tar zxvf sauvegarde.tgz #chown utilisateur.groupe rep1 rep2 ... repx –R #chmod 700 rep1 rep2 … repx –R
Annexes
Exemple de fichier de configuration smb.conf
<licode file=/etc/samba/smb.conf>
- Global parameters
[global]
workgroup = workgroup netbios name = biblio server string = Samba Server %v encrypt passwords = Yes log file = /var/log/samba/log.%m max log size = 50 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 printcap name = lpstat logon script = logon.cmd logon drive = H: logon home = \\Haribo\%u domain logons = Yes os level = 64 preferred master = Yes domain master = Yes dns proxy = No printing = cups domain admin group=@admins add user script=/usr/sbin/useradd -d /dev/null -g workstation -s /bin/false -M %u
[homes]
comment = Repertoire personnel read only = No browseable = No
[netlogon]
path = /home/netlogon write list = @admins read only=yes
[profiles]
path = /home/ntprofile read only = No create mask = 0600 directory mask = 0700
[Assistante]
comment = Echange de fichiers path = /home/films invalid users = root valid users = you,me public = no writable = yes printable = no create mask = 0770 directory mask = 0770 readonly = no
</licode>
Bibliographie
SAMBA Project Documentation
The Unofficial Samba HOWTO – David Lechnyr
Using Samba as a PDC – Andrew BARTLETT
Using Samba (Chapitre 6) – Robert Eckstein
Liste des options de smb.conf: http://us6.samba.org/samba/docs/using_samba/appb.html
Copyright
© 2007-2009 Christophe de Livois
Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL. |