<p>[Modification] J’ai depuis testé ceci avec la version finale de <em><strong>Ubuntu 10.04 Server (21/Mai/2010)</strong></em>.</p>
<p>J’ai configuré mon <em><strong>Ubuntu 10.04 Server LTS</strong></em> résidant sur un réseau Windows pour authentifier les connexions en utilisant Active Directory, puis monter un partage Windows pour servir de répertoire personnel.</p>
<p>Voici ce que j’ai fait en partant de l’installation initiale d’Ubuntu.</p>
<ul>
<li>
<p>Téléchargez et installez <a href="http://releases.ubuntu.com/releases/10.04/">Ubuntu Server 10.04 LTS</a></p>
</li>
<li></li>
</ul>
<p>Obtenez les mises à jour</p>
<p><code># sudo apt-get update && sudo apt-get upgrade</code></p>
<ul>
<li></li>
</ul>
<p>Installez un serveur SSH (<code>sshd</code>)</p>
<p><code># sudo apt-get install openssh-server</code></p>
<p>Certains diraient que vous devriez « sécuriser sshd » en désactivant les connexions root. Je pense que si vous êtes assez malin pour pirater une session SSH afin d’obtenir un mot de passe root, vous ne serez probablement pas arrêté par l’ajout de <code>PermitRootLogin no</code> dans le fichier <code>/etc/ssh/sshd_config</code>. Si vous êtes paranoïaque ou tout simplement pas convaincu, modifiez le fichier ou essayez ceci :</p>
<p><code># (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."</code></p>
<ul>
<li></li>
</ul>
<p>Installez les paquets requis</p>
<p><code># sudo apt-get install winbind samba smbfs smbclient ntp krb5-user</code></p>
<ul>
<li></li>
</ul>
<p>Effectuez un peu de nettoyage réseau de base en préparation des configurations spécifiques de paquets à venir.</p>
<ul>
<li></li>
</ul>
<p>Déterminez le nom de votre domaine Windows, le nom du serveur DNS et l’adresse IP du serveur Active Directory (pour Samba). Par commodité, j’ai défini des variables d’environnement pour le domaine Windows et le serveur DNS. Pour moi, c’était (mon adresse IP AD était 192.168.20.11) :</p>
<p><code># WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11</code></p>
<p>Si vous voulez découvrir quel est votre domaine et votre serveur DNS (j’étais prestataire et ne connaissais pas le réseau), consultez cette <a href="https://serverfault.com/questions/78089/find-name-of-active-directory-domain-controller/78093#78093">référence</a> utile.</p>
<ul>
<li></li>
</ul>
<p>Nous devons baptiser la machine Linux sur le nouveau réseau, cela se fait en modifiant le fichier hosts (remplacez le DNS par le FQDN du DNS Windows) :</p>
<p><code># sudo sed -ri "s/127.0.[01].1[ \t].*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts</code></p>
<ul>
<li></li>
</ul>
<p>Nous devons également indiquer aux services installés où trouver leur référent : certains réseaux auront des services de résolution de noms NetBIOS, mais par précaution, ajoutez une entrée explicite dans votre fichier <code>/etc/hosts</code>. Dans ma configuration, j’ai ajouté l’entrée à la troisième (3) ligne :</p>
<p><code># sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts</code></p>
<ul>
<li></li>
</ul>
<p>Les processus d’authentification et de partage de fichiers pour les machines Windows et Linux ont besoin que leurs horloges soient synchronisées. Faites-le avec un service NTP. Sur la version serveur d’Ubuntu, le service NTP est installé et configuré avec <em>un</em> (1) serveur NTP. Ajoutez le vôtre avant celui d’Ubuntu (ou remplacez-le entièrement). Le réseau que je rejoignais avait le serveur DNS qui fournissait également le service NTP.</p>
<p><code># sudo sed -ri "s/server[ \t]+(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf</code></p>
<p>Redémarrez le démon NTP :</p>
<p><code># sudo /etc/init.d/ntp restart</code></p>
<ul>
<li></li>
</ul>
<p>Configuration de Kerberos.</p>
<p>Les instructions qui suivent ne doivent pas être prises au pied de la lettre : les valeurs pour <code>MYDOMAIN.LOCAL</code> et <code>srv1.mydomain.local</code> doivent être remplacées par ce qui est approprié pour votre réseau lorsque vous modifiez les fichiers, mais <em>notez bien que là où des MAJUSCULES sont utilisées, des MAJUSCULES sont nécessaires</em>.</p>
<p>Si, lors de l’<code>apt-get install</code> de Kerberos, vous avez eu la clairvoyance de répondre correctement à la question sur le « domaine par défaut », tant mieux pour vous, sinon vous devrez faire ce qui suit.</p>
<ul>
<li></li>
</ul>
<p>Modifiez le fichier <code>/etc/krb5.conf</code> (installé précédemment ci-dessus).</p>
<ul>
<li></li>
</ul>
<p>Trouvez la section <code>[libdefaults]</code> et modifiez la paire clé-valeur :</p>
<p><code>[libdefaults]</code></p>
<p><code>default_realm = MYDOMAIN.LOCAL</code></p>
<ul>
<li></li>
</ul>
<p>Ajoutez ce qui suit à la section <code>[realms]</code> du fichier :</p>
<p><code>MYDOMAIN.LOCAL = {</code></p>
<pre><code>kdc = srv1.mydomain.local
admin_server = srv1.mydomain.local
default_domain = MYDOMAIN.LOCAL
</code></pre>
<p><code>}</code></p>
<ul>
<li></li>
</ul>
<p>Ajoutez ce qui suit à la section <code>[domain_realm]</code> du fichier :</p>
<p><code>.mydomain.local = MYDOMAIN.LOCAL</code></p>
<p><code>mydomain.local = MYDOMAIN.LOCAL</code></p>
<ul>
<li></li>
</ul>
<p>Un bon test à ce stade est de vérifier si votre contrôleur AD vous délivrera un ticket Kerberos. Ce n’est pas nécessaire, mais cela peut ravir certains d’entre vous :</p>
<p><code># kinit <some_windows_domain_user></code></p>
<p>Puis pour voir le ticket :</p>
<p><code># klist</code></p>
<p>Vous verrez des informations sur le cache de tickets, les expirations et les renouvellements. Une fois l’enthousiasme passé, vous pouvez aussi bien libérer/détruire le ticket :</p>
<p><code># kdestroy</code></p>
<ul>
<li></li>
</ul>
<p>Configurez Samba.</p>
<p>Selon ce qui suit :<br>
<a href="http://pserver.samba.org/samba/ftp/cifs-cvs/linux-cifs-client-guide.pdf">Il y a des cas où CIFS ne peut pas être utilisé ou un autre système de fichiers réseau est préférable. Si la prise en charge de l’authentification Kerberos (krb5/SPNEGO) est nécessaire pour une sécurité accrue, alors smbclient ou smbfs de Samba doivent être utilisés à la place de cifs</a></p>
<p>Hélas, la prise en charge de <code>cifs</code> dans le noyau pour Ubuntu 10.04 (basé sur la version du noyau 2.6.32.9) est à la version 1.61, et selon la documentation du noyau, une implémentation expérimentale de Kerberos est présente depuis la version 1.54.</p>
<p>Voilà. Je n’ai aucune idée si <code>cifs</code> fonctionnerait, je vous donne donc la configuration Samba :</p>
<ul>
<li></li>
</ul>
<p>Remplacez <code>/etc/samba/smb.conf</code> (rappelez-vous que je travaillais à partir d’une distribution propre d’Ubuntu, donc je ne m’inquiétais pas de casser quoi que ce soit) :</p>
<p><code>[global]</code></p>
<p><code>security = ads</code></p>
<p><code>realm = MYDOMAIN.LOCAL</code></p>
<p><code>password server = 192.168.20.11</code></p>
<p><code>workgroup = MYDOMAIN</code></p>
<p><code>idmap uid = 10000-20000</code></p>
<p><code>idmap gid = 10000-20000</code></p>
<p><code>winbind enum users = yes</code></p>
<p><code>winbind enum groups = yes</code></p>
<p><code>template homedir = /home/%U</code></p>
<p><code>template shell = /bin/bash</code></p>
<p><code>client use spnego = yes</code></p>
<p><code>client ntlmv2 auth = yes</code></p>
<p><code>encrypt passwords = yes</code></p>
<p><code>winbind use default domain = yes</code></p>
<p><code>restrict anonymous = 2</code></p>
<ul>
<li></li>
</ul>
<p>Démarrez et arrêtez divers services.</p>
<p><code># sudo /etc/init.d/winbind stop</code></p>
<p><code># sudo service smbd restart</code></p>
<p><code># sudo /etc/init.d/winbind start</code></p>
<ul>
<li></li>
</ul>
<p>Configurez l’authentification.</p>
<ul>
<li></li>
</ul>
<p>Modifiez le fichier <code>/etc/nsswitch.conf</code>. J’ai pu exécuter la commande suivante pour obtenir ce dont j’avais besoin :</p>
<p><code># sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf</code></p>
<p>Voici le contenu de mon fichier <code>/etc/nsswitch.conf</code> :</p>
<p><code>passwd: compat winbind</code></p>
<p><code>group: compat winbind</code></p>
<p><code>shadow: compat winbind</code></p>
<p><code>hosts: files dns</code></p>
<p><code>networks: files</code></p>
<p><code>protocols: db files</code></p>
<p><code>services: db files</code></p>
<p><code>ethers: db files</code></p>
<p><code>rpc: db files</code></p>
<ul>
<li></li>
</ul>
<p>Démarrez et arrêtez divers services.</p>
<p><code># sudo /etc/init.d/winbind stop</code></p>
<p><code># sudo service smbd restart</code></p>
<p><code># sudo /etc/init.d/winbind start</code></p>
<ul>
<li></li>
</ul>
<p>Joignez l’ordinateur au domaine.<br>
Je ne suis pas convaincu que cela soit nécessaire ; en particulier à cause de l’option de sécurité dans le fichier <code>smb.conf</code> (<code>security = ads</code>). Peut-être que quelqu’un pourra se prononcer à ce sujet…</p>
<p><code># sudo net ads join -U any_domain_user_account</code></p>
<p>Vous pourriez obtenir une erreur <code>DNS update failed!</code>, mais vous serez joint au domaine.<br>
Si vous obtenez une erreur indiquant l’impossibilité de trouver le serveur, vos enregistrements DNS doivent être modifiés. Lors de l’installation d’Ubuntu, le serveur de noms pointera souvent vers votre passerelle : la plupart des routeurs fournissent un service DNS. Les bonnes pratiques pour l’administration de Windows Server veulent que le contrôleur AD exécute également le DNS. Dans mon cas, mon fichier <code>/etc/resolve.conf</code> ressemble à ceci :</p>
<p><code>nameserver 192.168.20.11</code></p>
<p><code>nameserver 8.8.8.8</code></p>
<p>Le <code>8.8.8.8</code> est un DNS Google, une sauvegarde assez fiable en cas de panne du DNS Windows.</p>
<p>À ce stade, je pouvais me connecter (peut-être après un redémarrage), les répertoires personnels n’existaient pas, mais je pouvais me connecter.</p>
<ul>
<li></li>
</ul>
<p>Montage CIFS à la connexion</p>
<p>Cette étape suivante était la cerise sur le gâteau pour moi ; je ne voulais pas la responsabilité de sauvegarder les répertoires de travail de tout le monde, et la machine sur laquelle Ubuntu devait fonctionner était suspecte en termes de fiabilité. En procédant ainsi, les utilisateurs pouvaient se connecter et voir leur répertoire utilisateur Windows <em>automagiquement</em>.</p>
<ul>
<li></li>
</ul>
<p>Téléchargez le module <code>pam_mount</code> :</p>
<p><code># sudo apt-get install libpam-mount</code></p>
<p>Je voulais que le point de montage soit à l’emplacement traditionnel <code>/home/<user></code> : cette partie est configurée par le fichier <code>/etc/samba/smb.conf</code> (<code>template homedir = /home/%U</code>). Mais j’avais besoin qu’il traverse le partage et pointe vers leur propre répertoire Windows. Ceci est accompli en modifiant le fichier <code>/etc/security/pam_mount.conf.xml</code> (qui, malgré son intention, le XML <em>n’est pas</em> lisible par l’homme) :</p>
<ul>
<li></li>
</ul>
<p>Ajoutez ce qui suit à <code>/etc/security/pam_mount.conf.xml</code> et adaptez selon vos besoins :</p>
<p><code><volume</code></p>
<p><code>user=""</code></p>
<p><code>server="srv1.mydomain.local"</code></p>
<p><code>path="UserShares"</code></p>
<p><code>mountpoint="home"</code></p>
<p><code>fstype="cifs"</code></p>
<p><code>/></code></p>
<p><code><cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount></code></p>
<p>En raison de mon point de montage particulier, j’ai dû ajouter cette ligne aussi :</p>
<p><code><umount>umount %(MNTPT)/%(USER)</umount></code></p>
<p>Et pour que les répertoires utilisateurs (pour le point de montage) soient créés automatiquement, trouvez la ligne et modifiez-la ainsi :</p>
<p><code><mkmountpoint enable="1" remove="false" /></code></p>
<p>Le <code>remove="false"</code> est très important : s’il est défini à true, <code>pam_mount.so</code> essaie de supprimer le point de montage du répertoire, ce qu’il ne peut pas faire si un utilisateur s’est connecté plusieurs fois. Ce que vous obtiendrez dans ce cas, ce sont de nombreux montages résiduels sur votre système.</p>
<p><code>pam_mount.so</code> ne fonctionne toujours pas tout à fait comme promis. Dans sa forme actuelle, les montages continuent de s’accumuler et les répertoires personnels ne sont pas créés. Quelque part entre ici et la version Beta 2 précédente de 10.04 Server, cela fonctionnait. Je ne peux pas le reproduire.</p>
<p>En attendant, pour la création des répertoires, je m’appuie sur <code>pam_mkhomedir.so</code>, et j’ai ajouté une ligne juste avant la ligne <code>pam_mount.so</code> pour compenser.</p>
<p>Je n’ai toujours pas résolu le problème des montages multiples. Mais en attendant que <code>pam_mount.so</code> soit corrigé, voici ce que j’ai dans mon fichier <code>/etc/pam.d/common-session</code> :*</p>
<pre><code class="lang-auto">session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_winbind.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional pam_mount.so
</code></pre>
<p>C’est tout. Cela a fonctionné pour moi, et j’espère que vous le trouverez utile.</p>
<p>De nombreuses ressources ont été consultées pour que je puisse comprendre tout cela. Voici une courte liste (un certain nombre de ces liens pointent vers mes propres questions sur le sujet) :</p>
<ul>
<li>
<p><a href="https://help.ubuntu.com/community/Samba/Kerberos">Samba Kerberos</a></p>
</li>
<li>
<p><a href="https://help.ubuntu.com/community/ActiveDirectoryWinbindHowto">Active Directory WinBind</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/13430/mounting-linux-user-home-directories-on-cifs-server">Montage des répertoires personnels Linux sur un serveur CIFS</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/20202/authenticating-openbsd-against-active-directory">Authentification d’OpenBSD auprès d’Active Directory</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/23632/how-to-use-active-directory-to-authenticate-linux-users">Comment utiliser Active Directory pour authentifier les utilisateurs Linux</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/134976/mounting-windows-shares-with-active-directory-permissions">Montage de partages Windows avec les permissions Active Directory</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/110199/using-active-directory-authentication-with-samba-on-ubuntu-9-10-server-64bit">Utilisation de l’authentification Active Directory avec Samba sur Ubuntu 9.10 Server 64bit</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/15626/how-practical-is-to-authenticate-a-linux-server-against-ad">Est-il pratique d’authentifier un serveur Linux auprès d’AD ?</a></p>
</li>
<li>
<p><a href="https://serverfault.com/questions/134533/auto-mounting-a-windows-share-on-linux-ad-login">Montage automatique d’un partage Windows lors de la connexion AD sous Linux</a></p>
</li>
</ul>