<h2>But de ce document</h2>
<p class="spip">Ce document me sert de mémo pour intégrer un poste bureautique sous Debian Testing dans un domaine contrôlé par un serveur Windows NT.</p>

<p class="spip">Le but de ce document est d’arriver à se connecter sur le poste Debian avec un utilisateur quelconque du domaine. De plus, il est prévu de monter automatiquement les dossiers partagés par les serveurs du domaine en fonction des droits de l’utilisateur qui se connecte.</p>

<h2>Pré-requis</h2>
<p class="spip">Avoir installé une Debian de Base : <a href="http://www.coagul.org/article.php3?id_article=158" class="spip_out">http://www.coagul.org/article.php3 ?id_article=158</a></p>

<p class="spip">Avoir installé KDE : <a href="http://www.coagul.org/article.php3?id_article=159" class="spip_out">http://www.coagul.org/article.php3 ?id_article=159</a></p>

<h2>Installation de Winbind</h2>
<p class="spip">Winbind permet d’intégrer les utilisateurs et les groupes du domaine au poste Linux.</p>

<p class="spip">Paquet à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'># apt-get install winbind</code></p>

<p class="spip">Si samba n’est pas installé, Winbind demandera son installation. La configuration de Winbind se fait avec le fichier de configuration de samba (smb.conf).</p>

<p class="spip"><strong class="spip">Remarque </strong> : Pour ce mémo, Il n’est pas obligatoire d’installer la partie serveur de Samba (le paquet « samba-client » suffit). Si des questions sont posées lors de l’installation des paquets, il faut laisser les réponses par défaut.</p>

<h2>Configuration de /etc/nsswitch.conf</h2>
<p class="spip">Ce fichier permet d’indiquer le programme qui s’occupe de la gestion des utilisateurs :</p>

<p class="spip">Il faut simplement ajouter <strong class="spip">winbind</strong> et <strong class="spip">wins</strong> comme indiqué dans l’exemple ci-dessous :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>passwd:     compat winbind<br />
group:      compat winbind<br />
shadow:     compat<br />
hosts:      files dns wins<br />
networks:   files<br />
protocols:  db files<br />
services:   db files<br />
ethers:     db files<br />
rpc:        db files<br />
netgroup:   nis</code></div>
<h2>Configuration de /etc/samba/smb.conf</h2>
<p class="spip">Le fichier « <strong class="spip">smb.conf</strong> » est utilisé pour configurer <strong class="spip">Samba</strong> mais également <strong class="spip">Winbind</strong>.</p>

<p class="spip">A chaque modification du fichier <strong class="spip">smb.conf</strong>, il faut recharger la configuration de <strong class="spip">Samba </strong> :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/samba reload</code></p>

<p class="spip">Si la partie concernant <strong class="spip">Winbind</strong> est modifiée, il faut redémarrer <strong class="spip">Winbind </strong> :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/winbind restart</code></p>

<p class="spip">Même si le poste Linux ne propose pas de dossier partagé, il est nécessaire de configurer Samba pour pouvoir joindre le domaine Windows, récupérer les utilisateurs et se connecter avec un utilisateur du domaine.</p>

<p class="spip">Voici le début de mon fichier <strong class="spip">smb.conf </strong> :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[global]<br />
   workgroup    = NomDuDomaine<br />
   netbios name = NomDuServeur<br />
   security     = DOMAIN<br />
   # Adresse IP du serveur Wins<br />
   wins server  = 192.168.0.1 </code></div>
<p class="spip">La suite du fichier <strong class="spip">smb.conf</strong> permet de configurer <strong class="spip">Winbind</strong>. Il faut donc redémarrer <strong class="spip">Winbind</strong> à chaque modification de cette partie :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/winbind restart</code></p>

<p class="spip">Le premier paramètre permet d’indiquer le caractère à utiliser comme séparateur entre le nom du domaine et le nom de l’utilisateur (J’ai choisi / car c’est le caractère utilisé par Windows) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>   winbind separator = /</code></p>

<p class="spip">Les deux paramètres suivants permettent d’indiquer la plage des numéro à utiliser pour les utilisateurs ou les groupes. Ces deux lignes sont obligatoires au bon fonctionnement de Winbind. <strong class="spip">ATTENTION</strong> : Une fois que le poste Linux sera connecté au domaine, il ne faudra surtout pas changer la plage des numéro, car cela peut poser de gros problèmes de connexion.</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>   winbind uid = 10000-20000<br />
   winbind gid = 10000-20000</code></div>
<p class="spip">Pour pouvoir se connecter sur le poste Linux avec un compte du domaine Windows, il est obligatoire d’indiquer l’adresse du shell à utiliser :</p>

<p class="spip"><code class='spip_code' dir='ltr'>   template shell     = /bin/bash</code></p>

<p class="spip">La ligne suivante permet d’indiquer le chemin où seront enregistrés les profils des utilisateurs du domaine (%D = Nom du domaine et %U = Login de l’utilisateur). Le dossier et le profil seront créés automatiquement lors de la première connexion.</p>

<p class="spip"><strong class="spip">Attention</strong> : Il faut créer manuellement le dossier racine correspondant au nom du domaine (%D). Car s’il est créé automatiquement lors de la connexion du premier utilisateur, les autres utilisateurs ne pourront plus se connecter pour des problèmes de droits sur ce dossier. En cas de problème, il faut regarder les logs dans auth.log</p>

<p class="spip"><code class='spip_code' dir='ltr'>  template homedir   = /home/%D/%U</code></p>

<p class="spip">La ligne suivante permet d’éviter de saisir le nom du domaine devant le nom de l’utilisateur pour pouvoir se connecter. Sans cette ligne, il faut utiliser le login « NomDuDomaine/NomDuLogin » et avec cette ligne il suffit juste de saisir comme login « NomDuLogin ».</p>

<p class="spip">La commande « <strong class="spip">wbinfo -u</strong> » permet de voir l’influence de cette ligne une fois que tout est correctement configuré.</p>

<p class="spip">De plus, cette ligne est obligatoire pour arriver à faire fonctionner  libpam-mount pour monter automatiquement des partitions avec des utilisateurs du domaine.</p>

<p class="spip"><code class='spip_code' dir='ltr'>  winbind use default domain = yes</code></p>

<p class="spip">Voici un exemple complet et fonctionnel de fichier smb.conf :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>[global]<br />
   workgroup    = NomDuDomaine<br />
   netbios name = NomDuServeur<br />
   security     = DOMAIN<br />
   wins server  = 192.168.0.1 <br />
<br />
   #** Début de la configuration de Winbind ***<br />
   winbind separator = /<br />
   winbind uid = 10000-20000<br />
   winbind gid = 10000-20000<br />
   template shell     = /bin/bash<br />
   winbind use default domain = yes<br />
   #** Fin de la configuration de Winbind *****<br />
</code></div>
<p class="spip"><strong class="spip">Remarque</strong> : Cet exemple de configuration ne contient aucun dossier partagé, car la partie serveur de Samba n’est pas installée et n’est pas nécessaire.</p>

<h2>Ajouter le serveur Samba au contrôleur de domaine Windows</h2>
<p class="spip">Il faut commencer par arrêter le serveur Samba et éventuellement Winbind :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>/etc/init.d/samba stop<br />
/etc/init.d/winbind stop</code></div>
<p class="spip">Voici la commande pour ajouter le serveur Samba au gestionnaire de serveurs du contrôleur de domaine Windows (l’utilisateur root, doit avoir l’autorisation d’ajouter des serveurs au domaine) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>net rpc join -U root</code></p>

<p class="spip">Et si tout se passe bien, le message suivant doit apparaître :</p>

<p class="spip"><code class='spip_code' dir='ltr'>Joined domain MonDomaine</code></p>

<p class="spip">Ensuite, il faut redémarrer le serveur Winbind et le serveur Samba :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>/etc/init.d/winbind start<br />
/etc/init.d/samba start</code></div>
<h2>Quelques commandes pour vérifier que tout fonctionne</h2>
<p class="spip"><strong class="spip">Remarque</strong> : Avant de saisir les commandes suivantes, il faut vérifier que le serveur Samba est correctement ajouté dans la liste des serveurs du « gestionnaire de serveurs » du contrôleur de  domaine Windows. Si ce  n’est pas le cas, il faut peut-être attendre quelques minutes pour que la mise à jour se fasse.</p>

<p class="spip">La commande suivante doit donner la liste des utilisateurs du domaine :</p>

<p class="spip"><code class='spip_code' dir='ltr'>wbinfo -u</code></p>

<p class="spip">Celle-ci la liste des groupes du domaine :</p>

<p class="spip"><code class='spip_code' dir='ltr'>wbinfo -g</code></p>

<p class="spip">Celle-ci permet de vérifier que les utilisateurs du domaine sont ajoutés à la liste des utilisateurs du serveur Linux avec les bons uid :</p>

<p class="spip"><code class='spip_code' dir='ltr'>getent passwd</code></p>

<p class="spip">La même chose avec les groupes d’utilisateurs :</p>

<p class="spip"><code class='spip_code' dir='ltr'>getent group </code></p>

<p class="spip">Cette commande permet de vérifier qu’un utilisateur particulier est correctement reconnu</p>

<p class="spip"><code class='spip_code' dir='ltr'>wbinfo -a MonDomaine/tony%LeMotDePasse</code></p>

<p class="spip">La commande suivante permet d’afficher les ressources partagées par le serveur Samba « pgdebian » pour l’utilisateur « tony » :</p>

<p class="spip"><code class='spip_code' dir='ltr'>smbclient -L //pgdebian -U tony</code></p>

<h2>Montage des partitions automatiquement en fonction de l’utilisateur</h2>
<p class="spip">Le paquet « <strong class="spip">libpam-mount</strong> », permet de monter et démonter des partitions automatiquement en fonction du login de l’utilisateur.</p>

<p class="spip">Paquet à installer :</p>

<p class="spip"><code class='spip_code' dir='ltr'>apt-get install libpam-mount</code></p>

<p class="spip">Autres paquets à installer pour monter des partitions samba :</p>

<p class="spip"><code class='spip_code' dir='ltr'>apt-get install smbfs smbclient</code></p>

<p class="spip">Le fichier « <strong class="spip">/etc/security/pam_mount.conf</strong> » est le principal fichier de configuration de « libpam-mount ». A la fin de ce fichier, il faut insérer une ligne du type :</p>

<p class="spip"><code class='spip_code' dir='ltr'>volume <user> [smbfs|ncp|nfs|local] <server> <partage> <mount point> <mount options> <fs key cipher> <fs key path></code>
<br /></p>
<li> <strong class="spip">user</strong> : Nom de l’utilisateur ou « * » pour tous les utilisateurs.
<br /><li> <strong class="spip">server</strong> : Nom ou adresse IP du serveur
<br /><li> <strong class="spip">partage</strong> : Nom du partage à monter. 
<br /><li> mount point : Point de montage du partage. Si ce dossier n’existe pas, il sera créé automatiquement
<br /><li> <strong class="spip">mount options</strong> : Options de montage correspondant au système de fichiers à monter (Les mêmes que pour /etc/fstab).  Mettre un tiret si ce paramètre n’est pas utilisé.
<br /><li> <strong class="spip">fs key cipher </strong> : Indique le type de clé à utiliser pour crypter (non testé). Mettre un tiret si ce paramètre n’est pas utilisé.
<br /><li> <strong class="spip">fs key path</strong> : Indique le chemin d’accès au fichier contenant la clé (non testé). Mettre un tiret si ce paramètre n’est pas utilisé.
<p class="spip"><strong class="spip">Remarque</strong> : Si « * » est utilisé pour le paramètre <user>,  le caractère « & » correspondra au login de l’utilisateur.</p>

<p class="spip">Voici un exemple pour monter le dossier partagé « Utilisateurs » du serveur « pglinux » sur le point de montage «  /Reseau/pglinux » pour tous les utilisateurs (Le signe correspond au répertoire home de l’utilisateur) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>volume * smbfs pglinux Utilisateurs ~/Reseau/pglinux - - -</code></p>

<p class="spip">Voici le même exemple avec des options de montage :</p>

<p class="spip"><code class='spip_code' dir='ltr'>volume * smbfs pglinux Utilisateurs ~/Reseau/pglinux uid=&,gid=&,fmask=0700,dmask=0700,workgroup=VOTREDOMAINE,iocharset=iso8859-1,codepage=cp850 - -</code></p>

<p class="spip">Voici le même exemple valable uniquement pour l’utilisateur tony (Dans ce cas, le signe « & » n’est plus utilisable) :</p>

<p class="spip"><code class='spip_code' dir='ltr'>volume tony smbfs pglinux Utilisateurs ~/Reseau/pglinux uid=tony,gid=tony,fmask=0700,dmask=0700,workgroup=VOTREDOMAINE,iocharset=iso8859-1,codepage=cp850 - -</code></p>

<p class="spip">Débugage : La première ligne de ce fichier permet également d’activer le débugage pour comprendre ce qui ne fonctionne pas :</p>

<p class="spip"><code class='spip_code' dir='ltr'>debug 1</code></p>

<p class="spip">Si vous ne souhaitez pas que les points de montage soient créés automatiquement s’ils n’existent pas, il faut modifier la ligne suivante :</p>

<p class="spip"><code class='spip_code' dir='ltr'>mkmountpoint 0</code></p>

<p class="spip">Pour faire fonctionner « <strong class="spip">libpam-mount</strong> », il faut également configurer « pam » comme indiqué au chapitre suivant.</p>

<h2>Configuration de pam</h2>
<p class="spip">Pam est un système très complet et très modulaire permettant de gérer les connexions et les autorisations sur un poste Linux. Pam permet de gérer les connexions locales ou peux utiliser une base de données LDAP ou encore les utilisateurs d’un domaine Windows.</p>

<p class="spip"><strong class="spip">ATTENTION</strong> : Avant de modifier la configuration de pam, il est vivement conseillé d’ouvrir une console sous root (ALT+F1) et de ne pas la fermer tant que tout ne fonctionne pas correctement. <strong class="spip">Une mauvaise configuration de pam peut empêcher toute connexion même sous root</strong>.</p>

<p class="spip">Pam se configure à l’aide des différents fichiers du dossier « <strong class="spip">/etc/pam.d/</strong> ». Chaque application peux avoir sa propre méthode d’authentification et c’est pour cela que nous retrouvons dans ce dossier un fichier pour chaque type de programme nécessitant une authentification (cron, cupsys, kdm, login, su, ssh,...)</p>

<p class="spip">Dans le cadre de ce mémo, nous allons modifier uniquement le fichier « kdm », car je souhaite me connecter avec un utilisateur du domaine uniquement avec kdm et pas en ssh ou en console.</p>

<p class="spip">Donc, il suffit d’ouvrir le fichier « <strong class="spip">/etc/pam.d/kdm </strong> », de commenter toutes le lignes existantes et d’ajouter les lignes suivantes :</p>

<div style='text-align: left;' class='spip_code' dir='ltr'><code>auth      required    pam_mount.so<br />
auth      sufficient  pam_winbind.so use_first_pass<br />
auth      required    pam_unix.so use_first_pass<br />
<br />
account   sufficient  pam_winbind.so<br />
account   sufficient  pam_unix.so<br />
<br />
password  required    pam_unix.so nullok obscure min=4 max=8 md5<br />
<br />
session   required    pam_unix.so<br />
session   optional    pam_mkhomedir.so<br />
session   optional    pam_mount.so</code></div>
<p class="spip">L’explication détaillée du fonctionnement de pam, dépasse très largement le cadre de ce mémo, mais voici quelques explications :
<br /></p>
<li> La première ligne permet de monter les partitions. Les deux lignes suivantes indiquent que la connexion avec un utilisateur du domaine (winbind) est suffisante, mais que si celui-ci n’est pas trouvé, il cherchera un utilisateur local (unix). Remarque : Le paramètre « use_first_pass » permet de récupérer le mot de passe saisi pour pam_mount pour éviter de le saisir une nouvelle fois pour les comptes winbind et unix.
<br /><li> La ligne avec « pam_mkhomedir.so » permet de créer automatiquement les répertoires homes et les répertoires des lecteurs réseaux s’il n’existent pas lors de leur première utilisation.
<br /><li> Le paramètre « optional » indique que la ligne n’est pas bloquante s’il elle n’aboutit pas (si le montage d’un lecteur réseau n’aboutit pas, cela n’empêchera pas l’utilisateur de se connecter)
<h2>Test de fonctionnement</h2>
<p class="spip">Pour tester le fonctionnement, il faut se connecter avec kdm avec un utilisateur existant en locale et faire un autre test avec un utilisateur du domaine. Il faut vérifier que les partitions sont correctement montés lors de la connexion et démontés lors de la déconnexion.</p>

<p class="spip">Si ça ne fonctionne pas, il faut penser à regarder les logs :</p>

<p class="spip"><code class='spip_code' dir='ltr'># tail -f /var/log/auth.log</code></p>

<p class="spip">Il faut peut-être aussi redémarrer kdm :</p>

<p class="spip"><code class='spip_code' dir='ltr'># /etc/init.d/kdm restart</code></p>

<h2>Problèmes rencontrés</h2>
<p class="spip">Problème de localisation -> Créer .xsession et choisir « Default » dans kdm.
<br /></p>
<li> cf mon article sur le sujet : <a href="http://www.coagul.org/article.php3?id_article=305" class="spip_out">http://www.coagul.org/article.php3 ?id_article=305</a>
<p class="spip">Il ne faut pas utiliser de majuscule pour se connecter avec un utilisateur du domaine.</p>

<h2>Autres articles sur le même sujet</h2>
<p class="spip">Installation de Winbind pour intégrer Samba dans un Domaine Windows :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=178" class="spip_out">http://www.coagul.org/article.php3 ?id_article=178</a>
<p class="spip">Monter automatiquement des partitions en fonction du login de connexion avec libpam-mount :
<br /></p>
<li> <a href="http://www.coagul.org/article.php3?id_article=297" class="spip_out">http://www.coagul.org/article.php3 ?id_article=297</a>
<h2>Historique des modifications</h2>
<table class="spip">
<thead><tr class='row_first'><th scope='col'><strong class="spip">Version</strong></th><th scope='col'><strong class="spip">Date</strong></th><th scope='col'><strong class="spip">Commentaire</strong></th></tr></thead>
<tbody>
<tr class="row_even"><td>0.1</td><td>13/06/05</td><td>Création par Tony GALMICHE</td></tr>
<tr class="row_odd"><td>0.2</td><td>15/06/05</td><td>Nombreuses modifications suite aux remarques de Piou</td></tr>
<tr class="row_even"><td>0.3</td><td>02/09/05</td><td>Correction bug de sécurité dans PAM </td></tr>
<tr class="row_odd"><td>0.4</td><td>23/03/07</td><td>smb devient smbfs dans libpam-mount</td></tr>
</tbody>
</table>