[index des documents]

Conception et mise en oeuvre d'un Service d'Archivage

Authentification ADS : serveur Samba, membre d'un domaine Active Directory

L'idée est de partager une ressource sur un serveur Samba en s'authentificant sur un annuaire Active Directory (security = ADS dans Samba). Les utlisateurs ne sont pas pas enregistrés dans la base locale : nous allons utiliser winbind pour réaliser le mappage.
Prérequis :
Installation de Samba
Kerberos
Authentification avec Winbind
Configuration et intégration de Samba comme membre du domaine
Quelques liens

Installation de Samba

Téléchargement des sources : www.samba.org. Pour installer Samba à partir des sources :
Avant tout, un fois dans le répertoire des sources de samba (après avoir decompressé l'archive bien sûr), affectons la variable $SAMBA_SOURCE qui pourra nous servir par la suite :
[root@localhost source]# export SAMBA_SOURCE=`pwd`
Procédons à l'installation :
[root@localhost source]# ./configure --prefix=/usr/local/samba --with-winbind
[root@localhost source]# make
[root@localhost source]# make install
Affectons la variable $SAMBA_HOME du chemin d'installation de samba :
[root@localhost root]# export SAMBA_HOME=/usr/local/samba
Création d'un fichier "service" pour lancer Samba et Winbind au démarrage (par exemple /etc/init.d/smb) :
#!/bin/sh
#
# chkconfig: - 91 35
# description: Starts and stops the Samba smbd and nmbd daemons \
#              used to provide SMB network services.
#
# pidfile: /usr/local/samba/var/locks/smbd.pid
# pidfile: /usr/local/samba/var/locks/nmbd.pid
# pidfile: /usr/local/samba/var/locks/winbind.pid
# config:  /usr/local/samba/lib/smb.conf
 
 
# Source function library.
if [ -f /etc/init.d/functions ] ; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions
else
  exit 0
fi
 
# Avoid using root's TMPDIR
unset TMPDIR
                                                                                
# Source networking configuration.
. /etc/sysconfig/network
                                                                                
if [ -f /etc/sysconfig/samba ]; then
   . /etc/sysconfig/samba
fi
                                                                                
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
                                                                                
# Check that smb.conf exists.
[ -f /usr/local/samba/lib/smb.conf ] || exit 0
                                                                                
# Check that we can write to it... so non-root users stop here
[ -w /usr/local/samba/lib/smb.conf ] || exit 0
                                                                                
                                                                                
RETVAL=0
                                                                                
export SMBDOPTIONS=-D
export NMBDOPTIONS=-D
export WINBINDOPTIONS=-B
                                                                                
                                                                                
start() {
        KIND="SMB"
        echo -n $"Starting $KIND services: "
        daemon /usr/local/samba/sbin/smbd $SMBDOPTIONS
        RETVAL=$?
        echo
        KIND="NMB"
        echo -n $"Starting $KIND services: "
        daemon /usr/local/samba/sbin/nmbd $NMBDOPTIONS
        RETVAL2=$?
        echo
        KIND="Winbind"
        echo -n $"Starting $KIND services: "
        daemon /usr/local/samba/sbin/winbindd "$WINBINDOPTIONS"
        RETVAL3=$?
        echo
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] \
		&& touch /usr/local/samba/var/locks/subsys/smb \
		&&  touch /usr/local/samba/var/locks/subsys/winbindd || RETVAL=1
        return $RETVAL
}
 
stop() {
        KIND="SMB"
        echo -n $"Shutting down $KIND services: "
        killproc /usr/local/samba/sbin/smbd -TERM
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f /usr/local/var/locks/smbd.pid
        echo
        KIND="NMB"
        echo -n $"Shutting down $KIND services: "
        killproc /usr/local/samba/sbin/nmbd -TERM
        RETVAL2=$?
        [ $RETVAL2 -eq 0 ] && rm -f /usr/local/var/locks/nmbd.pid
        echo
        KIND="Winbind"
        echo -n $"Shutting down $KIND services: "
        killproc /usr/local/samba/sbin/winbindd -TERM
        RETVAL3=$?
        [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 -a $RETVAL3 -eq 0 ] \
		&& rm -f /usr/local/samba/var/locks/subsys/smb \
		&& rm -f /usr/local/samba/var/locks/winbindd.pid \
		&& rm -f /usr/local/samba/var/locks/subsys/winbindd
        echo ""
        return $RETVAL
}
 
restart() {
        stop
        start
}
 
reload() {
        echo -n $"Reloading smb.conf file: "
        killproc /usr/local/samba/sbin/smbd -HUP
        RETVAL=$?
        echo
        return $RETVAL
}
 
rhstatus() {
        status /usr/local/samba/sbin/smbd
        status /usr/local/samba/sbin/nmbd
        status /usr/local/samba/sbin/winbindd
}
 
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  status)
        rhstatus
        ;;
  condrestart)
        [ -f /usr/local/var/locks/subsys/smb ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status|condrestart}"
        exit 1
esac
 
exit $?

Kerberos

Nous allons installer le package (rpm) krb5-workstation se trouvant sur le CD1 de Fedora Core 2. Ensuite, nous mettons à jour toutes les dépendances avec l'utilitaire yum. Le service kerberos est une condition sine qua non au bon fonctionnement de l'architecture à mettre en place.
[root@localhost root]# rpm -ivh krb5-workstation-1.3.6-4
Puis, pour mettre à jour les dépendances :
[root@localhost root]# yum install krb5-workstation
Le fichier /etc/krb5.conf :
	[libdefaults]
		default_realm = CAMPUS.ENST-BRETAGNE.FR
	[realms]
		CAMPUS.ENST-BRETAGNE.FR =
			{
				kdc = X.Y.Z.T
			}
Test de la communication en demandant un ticket :
[root@localhost root]# kinit alenorcy@CAMPUS.ENST-BRETAGNE.FR
Password for alenorcy@CAMPUS.ENST-BRETAGNE.FR:
"alenorcy" est un utilisateur enregistré dans l'annuaire Active Directory.

Authentification avec Winbind

Occupons-nous de configurer la librairie libnss_winbind issue de la compilation des sources de samba :
[root@localhost root]# cp $SAMBA_SOURCE/nsswitch/libnss_winbind.so /lib
[root@localhost root]# ln -s /lib/libnss_winbind.so /liblibnss_winbind.so.2

Paramétrage avec l'utilitaire authconfig :

authconfig
Figure 1 : Configuration de l'authentification
authconfig
Figure 2 : Paramétrage Winbind
Après avoir validé ces paramètres, plusieurs fichiers vont être modifiés, comme par exemples :
Le fichier /etc/nsswitch.conf ressemble désormais à ceci :
passwd:     files winbind
shadow:     files winbind
group:      files winbind
hosts:      files dns
bootparams: files
ethers:     files
netmasks:   files
networks:   files
protocols:  files winbind
rpc:        files
services:   files winbind
automount:  files winbind
aliases:    files  
netgroup:   files winbind
Le fichier /etc/krb5.conf devient (la duplication des infos n'est apparemment pas gênante) :
[libdefaults]
 default_realm = CAMPUS.ENST-BRETAGNE.FR
 dns_lookup_realm = false
 dns_lookup_kdc = false
[realms]
 	CAMPUS.ENST-BRETAGNE.FR = 	{
  kdc = X.Y.Z.T
  admin_server = X.Y.Z.T
					}
 CAMPUS.ENST-BRETAGNE.FR = {
  kdc = X.Y.Z.T
  admin_server = X.Y.Z.T
 }
Enfin, le fichier /etc/pam.d/system-auth devient :
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        sufficient    /lib/security/$ISA/pam_winbind.so use_first_pass
auth        required      /lib/security/$ISA/pam_deny.so

account     sufficient    /lib/security/$ISA/pam_succeed_if.so uid < 100
account     required      /lib/security/$ISA/pam_unix.so
account     [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_winbind.so

password    requisite     /lib/security/$ISA/pam_cracklib.so retry=3
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    sufficient    /lib/security/$ISA/pam_winbind.so use_authtok
password    required      /lib/security/$ISA/pam_deny.so

session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
Plusieurs autres fichiers ont également été modifés (pour plus d'infos voir le man).

Paramétrage "à la main" (sans authconfig)

On peut se passer de l'utilitaire authconfig en modifiant, "à la main", seulement les fichiers nécessaires. Il s'avèrerait (à vérifier...), qu'on ne soit pas obligé de paramétrer PAM, donc de modifier le fichier /etc/pam.d/system-auth, ce que fait authconfig. En effet, dans notre cas (nous ne voulont pas faire que de l'authentification), Il suffirait seulement de modifier le fichier /etc/nsswitch ainsi :
passwd:     files winbind
shadow:     files
group:      files winbind
hosts:      files dns
bootparams: files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files
automount:  files
aliases:    files  
netgroup:   files
Les autres fichiers gardent leur configuration d'origine (par exemple /etc/krb5.conf reste comme nous l'avions écrit). Le paragraphe suivant explique comment rediger un fichier smb.conf bien paramétrer avec winbind (normalement en ayant utilisé authconfig, ce fichier est correct mais pas à sa place : il faut le placer sous /usr/local/samba/lib/)

Configuration et Intégration de Samba comme membre du domaine

Réalisons une configuration minimale pour samba. Le but est de partager un répertoire et de ne le laisser accessible qu'à un seul utilisateur (ici : CAMPUS+alenorcy). Cet utilisateur est enregistré dans l'annuaire Active Directory mais pas dans la base de données locale de la machine Linux (/etc/passwd). Le fichier $SAMBA_HOME/lib/smb.conf est le suivant :
	
[global]
	workgroup = CAMPUS
	server string = Serveur samba!
	realm = CAMPUS.ENST-BRETAGNE.FR
	security = ads
	encrypt passwords = yes
	password server = X.Y.Z.T
	log file = /var/log/samba/smbd.log
	max log size = 50
	
	winbind uid = 10000-20000
	winbind gid = 10000-20000
	winbind separator = +

[partage]
	comment=Répertoire partagé
	path=/usr/local/samba
	valid users = CAMPUS+alenorcy
	browseable = true
	writable = true
Démarrons winbind avec la commande suivante :
[root@localhost root]# service smb start
Démarrage des services SMB :                               [  OK  ]
Démarrage des services NMB :                               [  OK  ]
Démarrage des services Winbind :                           [  OK  ]
Intégrons le serveur Samba dans le domaine comme serveur membre :
[root@localhost root]# net join -S LEPDC -U user%password
...
Joined ‘ARCHIVAGE' to realm ‘CAMPUS.ENST-BRETAGNE.FR'
Vérifions notre configuration en tentant d'afficher tous les utilisateurs du domaine :
[root@archivage root]# $SAMBA_HOME/bin/wbinfo -u
Puis tous les groupes :
[root@archivage root]# $SAMBA_HOME/bin/wbinfo -g
On peut également utiliser les commandes Unix :
[root@archivage root]# getent passwd
Et :
[root@archivage root]# getent group
L'utilisateur CAMPUS\alenorcy (notation "à la" Windows) peut désormais accéder à sa ressource (\usr\local\samba) à partir d'une machine aussi bien Windows que Linux.

Quelques liens


MAJ le 20/06/2005