6. Configuration de Samba (Serveur 2, pdc.martymac.com)

6.1. Configurer Samba

La configuration de Samba se fait via le fichier smb.conf. Celui-ci comporte une description du comportement général du serveur (section [global]), ainsi qu'une énumération des partages qui seront créés sur la machine (les autres sections). Le PDC offira le partage netlogon, que l'on ne peut pas déporter sur le BDC, ainsi que le partage d'une imprimante. Le BDC, quant à lui, offrira les autres partages de données (répertoire home, profils, et autres partages divers).

- Edition du fichier /etc/samba/smb.conf :

[global]
   ; le nom de notre domaine
   workgroup = MARTYMAC
   ; notre nom de machine netbios
   netbios name = MARTYMAC-PDC
   ; le nom complet
   server string = Martymac PDC Server
   encrypt passwords = Yes

   ; Synchro pass Unix
   passwd program = /usr/local/sbin/smbldap-passwd.pl -o %u
   passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
   unix password sync = Yes

   ;  Ajout de machine via smbldap-tools
   add user script = /usr/local/sbin/smbldap-useradd.pl -w %u
   domain admin group = " @"Domain Admins" "

   ; Logs
   log file = /var/log/samba/%m.log
   log level = 2
   max log size = 5000

   ; Quelques options réseau
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

   ; On contrôle les logons, on est DC
   domain logons = Yes
   ; Master browser, browser pour le domaine (un seul par domaine)
   domain master = Yes
   ; Force élections en tant que master browser + donne un avantage
   preferred master = Yes
   ; Poids lors des élections de master browser
   os level = 65
   ; Local master browser (browser pour le sous réseau)
   local master = Yes

   dns proxy = No
   ; Serveur Wins actif (un seul par reseau)
   wins support = Yes
   security = user

   ; LDAP
   ldap suffix = dc=martymac,dc=com
   ldap admin dn = cn=Manager,dc=martymac,dc=com
   ldap port = 389
   ldap server = ldap1.martymac.com
   ldap ssl = No

   ; Impression
   load printers = yes
   printing = cups
   printcap name = cups

   ; Prise en charge du francais
   character set = iso8859-1

; Répertoire scripts
[netlogon]
   comment = Network Logon Service
   path = /export/samba/netlogon
   guest ok = Yes

; Partage d'imprimantes
[printers]
   comment = All Printers
   path = /var/spool/samba
   printable = Yes
   browseable = No
   writable = no
   guest ok = yes
   public = yes
   printer admin = printadmin

; Partage des drivers d'imprimantes
[print$]
   comment = Printer Drivers
   path = /etc/samba/drivers
   browseable = yes
   guest ok = no
   read only = yes
   write list = printadmin

Il ne faut pas oublier de créer les répertoires partagés :
- Création du répertoire /export/samba/netlogon pour le stockage des scripts de connexion.
- De /var/spool/samba : répertoire de spool, qui contiendra les données en cours d'impression
(Gestion des droits sur ce répertoire : chmod 775 /var/spool/samba)
- Création enfin de /etc/samba/drivers qui contiendra nos drivers d'imprimante (partagés par print$)
(y copier les drivers de l'imprimante)

- Enfin, il reste à à indiquer à Samba le mot de passe de l'administrateur LDAP (rootdn) : smbpasswd -w secret
Samba va créer le fichier /var/lib/samba/secrets.tdb. Attention, ce fichier n'est pas chiffré !

Notre PDC dispose désormais de 3 partages : netlogon, printers et print$ et est prêt à authentifier nos utilisateurs sur le domaine. Le partage netlogon contiendra les scripts de connexion des utilisateurs (scripts batch exécutés au logon de l'utilisateur), le partage printers contient les imprimantes, tandis que le partage print$ va contenir leurs drivers.

6.2. L'Impression

Pour pouvoir imprimer depuis notre serveur GNU/Linux, nous allons utiliser CUPS (Common Unix Printing System). Samba va utiliser ces outils pour rediriger les requêtes d'impression vers l'imprimante.

- Installation de CUPS : apt-get install cupsys cupsys-client cupsys-bsd cupsomatic-ppd cupsys-driver-gimpprint
- Configuration de CUPS (édition de /etc/cups/printers.conf ou via http://localhost:631/admin)

Nous allons utiliser samba comme un serveur de spool uniquement, ce qui signifie qu'il ne fera aucune conversion de données, il n'agira que comme une mémoire tampon d'impression/gestionnaire de file d'attente. En d'autres termes, il faudra que chaque client envoie le type de données attendues par l'imprimante, et donc, dispose du driver approprié. Celui-ci sera disposé dans le partage samba print$.

- Modification de /etc/cups/mimes.types et /etc/cups/mimes.convs pour décommenter les lignes application/octet-stream en fin de fichier. Ceci va permettre à cups de gérer l'impression 'brute' que l'on va utiliser.
- Tester enfin cups pour voir si l'impression fonctionne ; ceci peut se faire via le web : http://localhost:631/admin.

Samba devrait désormais pouvoir imprimer. Testons la mise au domaine d'une machine...

6.3. Test : Joindre une machine au domaine

Nous disposons maintenant d'un domaine complet, sur lequel nous allons joindre une machine, préalable nécessaire à la connexion d'un utilisateur depuis cette machine. Nous allons utiliser ici notre client Windows XP.

Note : Pour pouvoir contacter le contrôleur de domaine, la station a trois possibilités (dans l'ordre) :
- Elle contacte le serveur Wins indiqué dans les propriétés Tcp/Ip pour obtenir des informations sur le contrôleur de domaine
- Elle recherche les informations dans le fichiers lmhosts local (C:\winnt\system32\drivers\etc\lmhosts)
- Elle broadcast sa demande


Pour effectuer la jonctions au domaine, vous avez donc le choix. Pour éviter les problèmes, je vous conseille plutôt d'utiliser une station Windows sur le même réseau IP que le PDC (afin d'utiliser la méthode du broadcast), cependant, vous pouvez aussi indiquer le serveur Wins (non testé ! - ici notre serveur Samba) en le configurant dans les propriétés Tcp/Ip du poste, ou bien encore la méthode du fichier statique, dont voici un exemple :

#Fichier lmhosts
192.168.1.12    MARTYMAC-PDC            #PRE    #DOM:MARTYMAC
192.168.1.12    "MARTYMAC-PDC   \0x1C"  #PRE
192.168.1.12    "MARTYMAC-PDC   \0x1B"  #PRE

Attention, le nom netbios précédant "\0x1C" ou "\0x1B" doit faire exactement 15 caractères... ("\0x1B" déclare un PDC, et "\0x1C" un contrôleur de domaine). Pour recharger le cache netbios de notre machine Windows, il suffit ensuite d'exécuter la commande nbtstat -R, puis pour vérifier le cache : nbtstat -c.

Avant de joindre la machine au domaine, vérifions une dernière fois la conformité de notre configuration :

- Redémarrage de samba : /etc/init.d/samba restart
- Exécution de 'testparm' pour tester le fichier smb.conf
- Test du serveur samba : 'nmblookup MARTYMAC-PDC' et 'smbclient -N -L MARTYMAC-PDC', le nom netbios est normalement trouvé et les partages affichés.

Pour joindre le domaine, il faut disposer d'un compte machine autorisé dans LDAP, si toutefois ceci n'était pas le cas, samba l'ajouterait automatiquement grâce à l'option : add user script = /usr/local/sbin/smbldap-useradd.pl -w %u du fichier smb.conf. Cependant l'ajout automatique peut poser problème dans certains cas, provocant des erreurs côté Windows. J'ai en effet été confronté à ce problème : lors de la jonction au domaine, la machine est correctement créée, mais une erreur survient ; il faut alors à nouveau rejoindre le domaine avec le compte machine créé pour que tout fonctionne correctement. Mieux vaut ajouter manuellement la machine :

- smbldap-useradd.pl -w XP-CLIENT$

XP-CLIENT correspond au nom netbios de la machine Windows, le $ ajouté en fin de nom signifie que cet "utilisateur" est une machine. Si cette commande pose problème, peut-être avez-vous oublié de modifier les smbldap-tools ou de les configurer ? (voir précédemment).

A ce stade, il n'est pas encore possible de rattacher la machine au domaine, car on ne dispose pas d'un utilisateur ayant ce droit (uid=0, gid=0). Nous allons le créer.

- Ajout d'un utilisateur 'rootadmin' pour ajouter une machine au domaine :
  - smbldap-useradd.pl -a -m -g 200 rootadmin
  - smbldap-usermod.pl -u 0 -g 0 rootadmin
  - smbldap-passwd.pl rootadmin

Attention à ne pas créer un utilisateur nommé 'root', pour éviter conflits avec le vrai root local !!! La machine peut maintenant rejoindre le domaine grâce à l'utilisateur rootadmin.

6.4. Test : Se connecter au domaine avec un utilisateur

Cette fois, la machine fait partie du domaine, nous allons avoir besoin d'un compte utilisateur pour se connecter.

Nous ajoutons un utilisateur au domaine :
- smbldap-useradd.pl -a -m -g 221 utilisateur
- smbldap-passwd.pl utilisateur

Cet utilisateur pourra se "logger" avec son compte sous GNU/Linux ET Windows ; si l'on veut qu'il ne puisse pas se "logger" sous GNU/Linux, il faut préciser un home "/dev/null" et un shell "/bin/false", en le créant ainsi : smbldap-useradd.pl -d /dev/null -s /bin/false -a -m -g 221 utilisateur, ou bien tout simplement ne pas installer la gestion de LDAP pour pam sur la machine GNU/Linux.

Remarquez que, par défaut, l'utilisateur créé dispose du répertoire "home" et "profile" spécifiés dans la configuration des smbladp-tools. Pour l'instant, nous ne gérons pas ces deux partages (quasiment indispensables). C'est notre BDC qui va les prendre en charge (voir ci-dessous).

Vérifier que l'utilisateur n'ait pas trop de droits sur /export/samba/netlogon :
- chmod 550 /export/samba/netlogon et chmod 400 sur chaque script du répertoire (si vous en avez).

On peut désormais se "logger" avec cet utilisateur sur le domaine depuis notre machine Windows XP. Il n'aura pas encore accès à son répertoire home, ni à son profil.

6.5. Test : Imprimer

- Connectez-vous sur le poste client Windows en administrateur local et ajoutez l'imprimante partagée
- Vous pouvez maintenant imprimer à partir de n'importe quel utilisateur du domaine