FLASH INFORMATIQUE FI



Gentoo / Samba -> Authentification ADS




Xavier BARMAZ


NdR :

Cet article est le reflet d’une expérience d’authentification par Active Directory sur un serveur LINUX/Samba, avec une ditribution GENTOO. Dans le cas où le serveur Linux se trouve sous RedHat ou Fedora, distributions Linux officiellement supportées à l’EPFL, la méthodologie est proche de celle décrite ici et les détails d’implémentation se trouvent sur le site samba.epfl.ch.

Introduction

Le but principal de cet article est de pouvoir créer un serveur de fichiers sur une distribution linux Gentoo, www.gentoo.org, en s’authentifiant directement avec son compte de l’Active Directory. Chaque distribution possède des différences au niveau des fichiers de configuration, le but ici étant de lever le voile sur la distribution Gentoo. Par conséquent, les points qui vont suivre permettront d’expliquer plus en détail certains aspects importants de la configuration de Samba pour une authentification sur l’Active Directory.

Prérequis

Les explications faites ci-dessous traitent d’un serveur linux répertorié comme Serveur Membre dans l’Active Directory. Pour ce faire, il y a certains points que nous estimons connus des utilisateurs et dont nous n’allons pas détailler les explications (PDC, Kerberos, commandes linux, ...). De plus, certaines configurations doivent être mises en place avant de débuter. Il s’agit des aspects suivants :
• l’Active Directory doit déjà être implémenté et pleinement fonctionnel. Dans la situation qui nous servira d’exemple tout au long de l’article, SRV1 est le PDC (Primary Domain Controller) sur Windows 2000 server.
• le nom du domaine géré par l’Active Directory ; nous prendrons ici le nom DOMAIN.INTRANET.EPFL.CH. DOMAIN est un nom fictif qui à l’EPFL correspondrait à un domaine de faculté.
• l’environnement Windows doit être à jour au niveau des patches et de la sécurité.
• la distribution linux doit être installée (du stage 1, 2 ou 3) selon les documentations et prête à être configurée.

Samba

De manière à réaliser l’authentification sur l’Active Directory, les étapes suivantes sont nécessaires sur le serveur Gentoo linux que nous nommerons SRVLIN1.

OpenLDAP

OpenLDAP (www.openldap.org) est une implémentation Open Source d’un serveur d’annuaire LDAP. ADS et Samba ont besoin de ce protocole commun, il est donc nécessaire de l’installer de la manière suivante :

        emerge openldap

L’option -p est toujours utile pour connaître les dépendances avant l’installation.

        emerge -p openldap

Kerberos

Kerberos est un système d’authentification développé par le MIT qui permet aux serveurs d’authentifier les utilisateurs et de communiquer en sécurité. Ce service est une condition sine qua non au bon fonctionnement de l’architecture à mettre en place :

        emerge mit-krb5

Suite à l’installation de Kerberos, il est nécessaire d’éditer et de modifier le fichier de configuration grâce à la commande :

        nano /etc/krb5.conf

Les points importants nécessitant une attention particulière sont :

[libdefaults]
 ticket_lifetime = 600
 default_realm =DOMAIN.INTRANET.EPFL.CH

[realms]
 DOMAIN.INTRANET.EPFL.CH = {
   kdc = SRV1.DOMAIN.INTRANET.EPFL.CH
 }

[domain_realm]
 SRV1= DOMAIN.INTRANET.EPFL.CH

Maintenant, nous devons nous assurer que la connexion à l’Active Directory est possible, même si le serveur DNS est en panne. Pour ce faire, nous allons tester la communication grâce à la commande d’initialisation :

        kinit user@DOMAIN.INTRANET.EPFL.CH

Le résultat nous demande un mot de passe. Si celui-ci est valide, nous nous retrouverons en mode saisie qui indique que tout s’est bien passé.

Erreurs connues


• NE PAS CHANGER la casse du realm DOMAIN.INTRANET.EPFL.CH, sinon le message suivant apparaîtra : « Cannot find KDC for requested realm while getting initial credentials ».
• NE PAS COMMENTER le fichier de configuration krb5.conf car le client Kerberos serait incapable de lire le fichier correctement.
• L’heure entre les deux serveurs (PDC et Linux member server) doit être synchronisée, autrement l’erreur suivante surviendra si la différence de temps est plus grande que 5 minutes : « kinit(5) : Clock skew too great while getting initial credentials »
Pour résoudre ce problème de temps, 2 solutions s’offrent à nous. La première possibilité consiste à changer la variable CLOCK avec la valeur local plutôt que utc dans le fichier /etc/rc.conf à cause des formats propriétaires de Microsoft. L’autre solution, qui est à notre avis meilleure, serait de faire un ermerge rdate puis de saisir rdate -s time.nist.gov pour se baser sur une heure universelle correcte.
• Il est aussi judicieux de s’assurer que nous pouvons faire un DNS lookup sur l’adresse IP du KDC. Par conséquent, le nom de mappage de ce reverse lookup doit être le nom NetBIOS du KDC (par exemple le nom d’hôte sans aucun domaine attaché) ou cela pourrait aussi être le nom NetBIOS suivi du domaine.
La meilleure façon d’assurer la réalisation de cette étape correctement est d’ajouter dans le fichier /etc/hosts une entrée faisant la correspondance entre l’adresse IP de notre KDC et son nom NetBIOS. En cas d’erreur de correspondance, nous obtiendrons une erreur lors de l’intégration au domaine. : xxx.xxx.xxx.xxx srv1.

Samba

Lors de l’écriture de cet article, Gentoo offre dans son Portage la version samba suivante : samba-2.8. Toutefois, l’utilisation de la commande net ads plus loin dans cet article n’est possible qu’à partir de la version 3 de Samba, soit : samba-3.0.2-a.
Or, Portage n’offre que des versions pleinement testées, donc la version 3 est disponible mais cachée. Pour installer Samba, il fallait donc exécuter la commande suivante :

USE="kerberos ldap" emerge /usr/portage/net-fs/samba/samba-3.0.2a.ebuild

Notons l’utilisation de la variable USE en début de commande qui permet d’intégrer les packages Kerberos et LDAP lors de la compilation de Samba. Sans cette intégration, l’authentification auprès de l’Active Directory serait impossible.

nano /etc/samba/smb.conf

Quelques lignes importantes doivent être configurées dans ce fichier. Quant au reste du fichier, il sera plus simple de configurer les partages ainsi que d’autres informations via l’interface Web SWAT que nous traiterons plus loin dans cet article. Ces quelques lignes sont :

[global]
 workgroup = DOMAIN
 netbios name = SRVLIN1
 realm = DOMAIN.INTRANET.EPFL.CH
 security = ADS
 encrypt passwords = yes
 password server = *

Remarque : Il est très important de ne pas se tromper dans le workgroup. Il s’agit du domaine de l’Active Directory. Il n’est pas nécessaire d’avoir un fichier smbpasswd, et les anciens clients seront authentifiés comme security = domain.

Créer le compte dans l’ADS

Maintenant, nous pouvons joindre notre Samba Linux member server à notre domaine en saisissant la commande suivante :

net ads join -U user

ou en saisissant cette commande :

net ads join -U user%password

ou cette commande si net n’est pas installé parce que Samba version 3 n’est pas installé :

net join -S SRV1 -Uuser%password

ou cette commande si nous voulons joindre le serveur membre directement dans une OU : net ads join "organisational unit" Si tout se passe normalement, nous pouvons voir le message suivant :

Joined ‘SRVLIN1' to realm ‘DOMAIN.INTRANET.EPFL.CH'.

Par exemple, si vous voulez créer le compte de la machine dans une OU qui s’appelle Servers sous l’arborescence Computer\BusinessUnit\Department de l’ADS, il faudra saisir :

net ads join "Computer\BusinessUnit\Department\Servers"

Si nous regardons maintenant dans notre Active Directory Users and Computers sous l’entrée Computers, le serveur membre linux SRVLIN1 apparaîtra comme membre du domaine SRV1. Pour la configuration des partages, reportons-nous à la section SWAT.

Erreurs connues

Lors de l’écriture de cet • ADS support not compiled in : Samba doit être reconfiguré (supprimer config.cache) et recompilé (désinstaller le tout avant) après l’installation des librairies et des fichiers Kerberos.
• net ads join prompts for user name : nous avons besoin de nous identifier au domaine en utilisant kinit USERNAME@REALM. USERNAME doit être un utilisateur qui a les droits d’ajouter une machine au domaine.
• Unsupported encryption/or checksum types : s’assurer que /etc/krb5.conf est correctement configuré pour le type et la version de Kerberos installé sur le system.

Schéma Domaine de confiance

JPEG - 8.4 ko
fig.1
Ce schéma décrit ce qui se passe quand un utilisateur (user1) défini dans le Domain1 essaie d’accéder à un partage Y du serveur Samba se trouvant dans le Domaine2

.

A titre d’information, depuis la version Samba 2.0.4, un nouveau paramètre est apparu dans le fichier smb.conf :

allow trusted domains = yes|no

Avec ce paramètre, il est possible de refuser|accepter l’accès au serveur Samba seulement aux utilisateurs définis dans le PDC dont le serveur membre Samba fait partie ou aux utilisateurs du/des domaine(s) avec lequel/lesquels Samba a une relation de confiance (trusted relationship).

Swat

Il est bien plus facile et convivial de configurer les fichiers et partages Samba via une interface graphique. Pour ce faire, il convient de configurer SWAT. Cependant, il n’est pas toujours évident de réaliser une telle configuration. Les instructions suivantes assument que Samba est installé et que le super-utilisateur root a été ajouté au fichier smbusers et a les privilèges d’administration. Gestion du mot de passe :

smbpasswd -a root

Par défaut, il faut s’assurer que le daemon xinetd est installé, sinon il faut le faire :

emerge xinetd

nano /etc/services

Vérifions que swat soit configuré sur le bon port :

swat         901/tcp
nano /etc/xinetd.conf
defaults
{
   only_from   = localhost
   instances   = 60
   log_type    = SYSLOG authpriv info
   log_on_success = HOST PID
   log_on_failure = HOST
   cps      = 25 30
}

includedir /etc/xinetd.d

swat  stream  tcp  nowait.400  root  /usr/sbin/swat  swat

nano /etc/xinetd.d/swat

service swat
{
   #disable       = yes
   port          = 901
   socket_type    = stream
   wait          = no
   only_from     = 128.178.0.0/16
   user          = root
   server         = /usr/sbin/swat
   log_on_failure  += USERID
}

Le code ci-dessus signifie que mon réseau est dans le range 128.178.xxx.xxx. En faisant 128.178.0.0/16, nous autorisons l’accès au service swat à quiconque dans ce sous-réseau. Il convient encore de redémarrer les services manuellement.

/etc/init.d/xinetd restart
/etc/init.d/samba restart

Pour tester l’installation, nous devons ouvrir une page Web et saisir dans l’url l’adresse du serveur Samba sur le port 901 : http://xxx.xxx.xxx.xxx:901.
A l’invite, nous devons saisir le nom et le mot de passe de la personne autorisée à administrer le serveur Samba. Dans la majorité des cas, il s’agit de l’utilisateur root.
Nous rappelons finalement que les utilisateurs doivent exister dans le fichier passwd du serveur Linux. En effet, le mot de passe est vérifié sur l’ADS si l’utilisateur est défini sur le serveur Linux comme ayant des droits d’accès aux fichiers Linux. La solution pour automatiser la création des comptes consiste à valoriser les paramètres du fichier smb.conf qui se nomment add user script et delete user script. Les valeurs de chacun des paramètres sont le nom d’un programme ou script qui, recevant un nom d’utilisateur comme argument, le crée ou l’efface.

[global]
  add user script = /usr/bin/useradd %u -g smbusers
  delete user script = /usr/bin/userdel %u

S’il y a peu d’utilisateurs à créer et que l’automatisation n’est pas jugée utile, nous pouvons toujours saisir les commandes suivantes :

useradd user
userdel user

Test du côté de Windows

Sur un client Windows, nous pouvons monter les partages du serveur Linux en utilisant le point de menu Outil\Connecter un lecteur réseau ou en utilisant la commande suivante :

net use * \\server\share

Si la commande fonctionne, nous devrions être authentifiés avec Kerberos sans avoir besoin de fournir un mot de passe. Dans le cas contraire, il faut exécuter la commande :

klist tickets

sur l’Active Directory pour connaître les tickets émis. Si nous obtenons un ticket pour le serveur avec une encryption de type DES-CBC-MD5, alors tout est en ordre. Une autre façon de lister les partages et les atteindre de manière graphique serait d’ouvrir l’explorateur Windows et de taper la commande d’accès au serveur linux.

\\SRVLIN1

Il convient de saisir le nom du compte de l’Active Directory et son mot de passe pour avoir accès aux partages préalablement définis via SWAT ou via les fichiers de configuration Samba.

Test du côté de Linux

Du côté d’un serveur linux nous pouvons nous authentifier sur les partages du serveur Samba grâce à la commande :

smbclient //SRVLIN1/share -U user -k

L’option -k est préférable lorsqu’il s’agit d’authentification.

Test du côté de Macintosh

L’idée est de monter le partage sur lequel nous voulons travailler. Sous OS X, il convient d’ouvrir la console de connexion des lecteurs réseau (ctrl + k) et de saisir :

smb://SRVLIN1

Ensuite, il faut choisir le partage et entrer les informations concernant son compte ADS pour que le volume soit monté sur le bureau.

Conclusion

Voilà un serveur de fichiers pleinement fonctionnel avec authentification sur l’Active Directory. Mais pourquoi s’arrêter en si bon chemin ? Quid est du serveur d’impression ? Il ne reste plus qu’à s’y mettre.



Cherchez ...

- dans tous les Flash informatique
(entre 1986 et 2001: seulement sur les titres et auteurs)
- par mot-clé

Avertissement

Cette page est un article d'une publication de l'EPFL.
Le contenu et certains liens ne sont peut-être plus d'actualité.

Responsabilité

Les articles n'engagent que leurs auteurs, sauf ceux qui concernent de façon évidente des prestations officielles (sous la responsabilité du DIT ou d'autres entités). Toute reproduction, même partielle, n'est autorisée qu'avec l'accord de la rédaction et des auteurs.


Archives sur clé USB

Le Flash informatique ne paraîtra plus. Le dernier numéro est daté de décembre 2013.

Taguage des articles

Depuis 2010, pour aider le lecteur, les articles sont taggués:
  •   tout public
    que vous soyiez utilisateur occasionnel du PC familial, ou bien simplement propriétaire d'un iPhone, lisez l'article marqué tout public, vous y apprendrez plein de choses qui vous permettront de mieux appréhender ces technologies qui envahissent votre quotidien
  •   public averti
    l'article parle de concepts techniques, mais à la portée de toute personne intéressée par les dessous des nouvelles technologies
  •   expert
    le sujet abordé n'intéresse que peu de lecteurs, mais ceux-là seront ravis d'approfondir un thème, d'en savoir plus sur un nouveau langage.