Samba 4 : Créez votre Domaine Active Directory sous Centos 6.x

Et voilà après un long moment de silence, voici un nouveau HowTo qui traite de Samba 4.

Cet article est très largement inspiré d’un confrère anglophone, que j’ai adapté à mon usage.

Pour la petite histoire, Samba est un logiciel que je côtoie depuis mes débuts dans l’informatique (en même temps ça fait que 8 ans). Il a même fait l’objet de mon premier stage à l’époque.

Depuis il a fait son petit bonhomme de chemin, et est devenu très complet, puisqu’il gère entre autre :

  • LDAP
  • Kerberos
  • DNS/NTP
  • Partage CIFS en SMBv3
  • Les GPO Windows
  • Et j’en passe la liste étant non exhaustive…

Mettons maintenant en place les bases, le système retenu est un Centos 6.5 en 64 Bits, que j’ai choisi pour sa robustesse (certes moins léger qu’une Debian mais ce n’est pas le débat).

Nous nous appuierons également sur Bind 9 et NTPD.

Les pré-requis

Tout d’abord, nous devons installer les packages Bind et le nécessaire à la compilation de Samba et de NTPD.

yum -y install gcc make wget python-devel gnutls-devel openssl-devel libacl-devel krb5-server krb5-libs krb5-workstation bind bind-libs bind-utils

Nous devons également désactiver Selinux, qui empêchera la bonne exécution de Samba.

SELINUX=disabled

setenforce 0

Compilation et installation

Téléchargeons à présent la dernière version de Samba :

wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz# tar -xzvf samba-latest.tar.gz

Et exécutons la compilation :

cd samba-latest/
./configure --enable-selftest
make -j4 && make install

Maintenant préparons le domaine :

/usr/local/samba/bin/samba-tool domain provision --realm=nexus.lan --domain=NEXUS--adminpass 'P@ssw0rd' --server-role=dc --dns-backend=BIND9_DLZ

Configuration DNS

Passons à présent à la configuration de notre serveur DNS.

Première étape sécuriser le serveur en DSNSSEC

rndc-confgen -a -r /dev/urandom

Modifions le fichier /etc/named.conf

//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
 
options {
        listen-on port 53 {
                172.16.17.20;
                127.0.0.1;
        };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        forwarders      {
                8.8.8.8;
                8.8.4.4;
        };
        allow-query     {
                172.16.0.0/16;
                localhost;
        };
        recursion yes;
 
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
 
        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        tkey-gssapi-keytab "/usr/local/samba/private/dns.keytab";
 
        managed-keys-directory "/var/named/dynamic";
};
 
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
 
zone "." IN {
        type hint;
        file "named.ca";
};
 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
include "/usr/local/samba/private/named.conf";

Il faut également éditer le fichier /etc/resolv.conf pour que votre système s’appuie sur le DNS de Samba.

search nexus.lan
domain nexus.lan
nameserver 127.0.0.1

Configuration Kerberos

Maintenant la partie la plus sympa pour ceux qui ont déjà fait du Kerberos, modifier 2 lignes :

[libdefaults]
default_realm = NEXUS.LAN
dns_lookup_realm = false
dns_lookup_kdc = true

Configuration Installation et configuration du NTP

Nous allons télécharger la version 4.2.6 qui supporte le NTP sign afin de garantir aux clients Windows qu’ils dialoguent bien avec leur contrôleur de domaine.

wget http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz
tar -xzvf ntp-4.2.6p5.tar.gz# cd ntp-4.2.6p5
./configure --enable-ntp-signd
make -j4 && make install

Créons le fichier /etc/ntp.conf :

server 127.127.1.0
fudge 127.127.1.0 stratum 10
server 0.fr.pool.ntp.org iburst prefer
server 1.fr.pool.ntp.org iburst prefer
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/
restrict default kod nomodify notrap nopeer mssntp
restrict 127.0.0.1
restrict 0.fr.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 1.fr.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
restrict 172.16.0.0 mask 255.255.0.0 nomodify notrap

Et enfin positionnons les bons droits sur les bons fichiers

chown named:named /usr/local/samba/private/dns
chown named:named /usr/local/samba/private/dns.keytab
chmod 775 /usr/local/samba/private/dns# chown named /etc/rndc.key
chmod 640 /etc/rndc.key

Création des init-scripts et démarrage des services

Comme nous avons compilé nos applications Samba et NTPD, nous devons leurs créer des init scripts afin qu’ils soient gérés comme des services par notre système et démarrés automatiquement.

#!/bin/bash
#
# samba4        This shell script takes care of starting and stopping
#               samba4 daemons.
#
# chkconfig: - 58 74
# description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.
 
### BEGIN INIT INFO
# Provides: samba4
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop samba4
# Description: Samba 4.0 will be the next version of the Samba suite
# and incorporates all the technology found in both the Samba4 alpha
# series and the stable 3.x series. The primary additional features
# over Samba 3.6 are support for the Active Directory logon protocols
# used by Windows 2000 and above.
### END INIT INFO
 
# Source function library.
. /etc/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
prog=samba
prog_dir=/usr/local/samba/sbin/
lockfile=/var/lock/subsys/$prog
 
start() {
        [ "$NETWORKING" = "no" ] && exit 1
#        [ -x /usr/local/sbin/ntpd ] || exit 5
 
                # Start daemons.
                echo -n $"Demarrage de samba4: "
                daemon $prog_dir/$prog -D
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}
 
stop() {
        [ "$EUID" != "0" ] && exit 4
                echo -n $"Arret de samba4: "
        killproc $prog_dir/$prog
        RETVAL=$?
                echo
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        return $RETVAL
}
 
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
status)
        status $prog
        ;;
restart)
        stop
        start
        ;;
*)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 2
esac

Et maintenant le script pour ntpd

#! /bin/bash
#
# ntp Bring up/down ntpd service
#
#chkconfig: - 99 30
#description: Bring up/down ntp
#
### BEGIN INIT INFO
# Provides: ntpd
# Required-Start: $network $local_fs
# Required-Stop: $network $local_fs
# Should-Start:
# Short-Description: Bring up/down ntpd
# Description: Bring up/down ntpd
### END INIT INFO
# Source function library.
. /etc/init.d/functions
 
CWD=$(pwd)
NTPD=/usr/local/bin/ntpd
prog="ntp"
start() {
        # Attach irda device
        echo -n $"Starting $prog: "
        $NTPD -p /var/run/ntpd.pid
        sleep 2
        if ps ax | grep -v "grep" | grep -q $NTPD ; then success $"ntp startup"; else failure $"ntp startup"; fi
        echo
}
stop() {
        # Stop service.
        echo -n $"Shutting down $prog: "
        kill -9 `cat /var/run/ntpd.pid` > /dev/null 2>&1
        sleep 2
        if ps ax | grep -v "grep" | grep -q $NTPD ; then failure $"ntp shutdown"; else success $"ntp shutdown"; fi
        echo
}
# See how we were called.
case "$1" in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart|reload)
                stop
                start
        ;;
        *)
                echo $"Usage: $0 {start|stop|restart}"
                exit 1
esac
exit 0

Mettez les bons droits sur les fichiers

chmod 755 /etc/init.d/ntpd
chmod 755 /etc/init.d/samba4

Procédons au lancement des services :

/etc/init.d/named start
/etc/init.d/ntpd start
/etc/init.d/samba4 start

Mettons-les automatiquement en route en fonction des runlevels

chkconfig --levels 235 samba4 on
chkconfig --levels 235 ntpd on
chkconfig --levels 235 named on

Configuration d’iptables

Centos ayant une configuration iptables par défaut, nous allons ajuster cette dernière :

# vi /etc/sysconfig/iptables
-A INPUT -m udp -p udp --dport 53 -m comment --comment "DNS" -j ACCEPT
-A INPUT -m udp -p udp --dport 123 -m comment --comment "NTP" -j ACCEPT
-A INPUT -m udp -p udp --dport 135 -m comment --comment "RPC UDP" -j ACCEPT
-A INPUT -m udp -p udp --dport 138 -m comment --comment "NetBIOS Netlogon and Browsing" -j ACCEPT
-A INPUT -m udp -p udp --dport 389 -m comment --comment "LDAP UDP" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 88 -m comment --comment "Kerberos" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 464 -m comment --comment "Kerberos Password Management" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -m comment --comment "NetBIOS Session" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -m comment --comment "SMB CIFS" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -m comment --comment "LDAP TCP" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -m comment --comment "LDAP SSL" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3268 -m comment --comment "LDAP Global Catalog" -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3269 -m comment --comment "LDAP Global Catalog SSL" -j ACCEPT
-A INPUT

# service iptables restart
Sources :

(1 commentaire)

  1. Enfin de la nouveauté

Laisser un commentaire

Votre adresse ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.