Samba (avancé)

De wikilivois
Sauter à la navigation Sauter à la recherche


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]

  /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.


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.

  /etc/samba/smb.conf
 passdb backend = tdbsam


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:

  /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


ou avec cifs :

  /etc/fstab
//home/usbdisk  /mnt/usbdisk cifs  user,exec,gid=users,credentials=.home.cre,iocharset=iso8859-15 0 0


Attention cifs utilise le dns pour retrouver home

  .home.cre
username=xxx
password=xxx


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.
  /etc/samba/smb.conf
[homes]
guest ok=no
read only=no


Le partage n’autorise pas l’accès aux invités et peut être utilisé en écriture.

Les partages « classiques »

  /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


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 :
  /etc/group
films::500:you,me


Permissions

Paramètres avancés

  /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/


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.

time server = Yes


Optimiser les performances du serveur avec socket options.

socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192


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

  /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


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)

  /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"


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

  /etc/samba/smb.conf
[global]
domain logon=yes
workgroup=INTERACT
domain admin group=@admins
encrypt passwords=yes
passwd program = /usr/bin/passwd


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

  /etc/group
admins:x:502:root


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.

  /etc/samba/smb.conf
add user script = /usr/sbin/useradd –d /dev/null –g  workstation –s /bin/false –M %u


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 :

  /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*


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 :

  /etc/samba/smb.conf
passwd chat debug = yes
log level=100


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!

  /etc/samba/smb.conf
[netlogon]
path=/home/netlogon
logon script=logon.bat
read only=yes
write list=@admins


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

  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


  • 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

  /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


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

Tête de GNU 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.