Debian Join Domain

Souvent, quand on a un environnement windows, on dispose aussi d'une solide base utilisateurs... quand on déploit des serveurs Debian... ben ils sont souvent authetifier "en local"... ce qui peut devenir insuportable quand vous avez beaucoup d'utilisateurs a synchronisé entre votre base debian "local" et vos domaines Controllers...

Heureusement, Linux n'est pas raciste et peut authentifier vos utilisateurs via vos domain controllers...

DNS et réseaux

Je pars du principe que votre serveur est installer avec les dns et une IP fixe... sinon

apt-get install dnsutils

Sur votre serveur DNS windows, ajoutez un 'A Record' ayant le même nom de serveur (ex: debian) et son IP.

N'oubliez pas de vérifier votre résolution réseaux

nano /etc/resolv.conf

un petit ping vers vos DC sera aussi un bon moyen de controler votre configuration et la bonne résolution des dns externes.

ping domaincontroller1.example.local -c 4 && ping google.com -c 4

Vérifiez aussi le réverse dns, vous pourriez avoir des surprises...

dig -x 192.168.0.1
dig -x 192.168.0.26

N'allez surtout pas plus loin si vous avez le moindre problème...

Synchroniser le temps

Il vaut mieux que tout vos serveurs soit à la même heure... Dans la pratique, c'est même un règles élémentaires pour domaine.

apt-get install ntp

Comme Kerberos est un protocol sécurisé sur une base de ticket,le temps (heure) risque de vous poser pas mal de problème de synchro voir de vous refuser l'autentification si vos serveurs ne sont pas à la même heure...

nano /etc/ntp.conf

Modifiez le fichier en pécisant le nom complet de votre(vos) time server(s)... Et relancez le service ntpd, puis testez vos serveurs

service ntpd restart
ntpq -p

Vous devriez avoir vos serveurs avec des informations (sinon vous avez un probleme de dns ou de serveur cible).

Kerberos

Là, nous entrons dans le vif du sujet...

Installation

apt-get install krb5-{user,config,kdc} libkrb53 winbind samba

Si d'aventures, debconf devait vous demandez des informations, acceptez les informations par défaut, nous alons quand même tout vérifier "à la main"...

Configuration

Par sécurité, nous faisons quand même une copie des fichiers de base:

cp /etc/krb5.conf /etc/krb5.conf.default
nano /etc/krb5.conf

Nous stoppons maintenant les services que nous allons modifier:

service winbind stop
service krb5-kdc stop

Nous allons maintenant configurer notre domaine dans le krb5.conf:

[libdefaults]
        default_realm = EXAMPLE.LOCAL
        dns_lookup_kdc = no
        dns_lookup_realm = no
        ticket_lifetime = 24h 
; for Windows 2003
        default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
        default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
        permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5
; for Windows 2008 with AES
;        default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;        default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
;        permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

# The following libdefaults parameters are only for Heimdal Kerberos.
    v4_instance_resolve = false
    v4_name_convert = {
        host = {
            rcmd = host
            ftp = ftp
        }
        plain = {
            something = something-else
        }
    }
    fcc-mit-ticketflags = true
    dns_lookup_realm = false
    dns_lookup_kdc = false

[realms]
        EXAMPLE.LOCAL = {
                kdc = domaincontroller1.example.local
                kdc = server2.example.local
                admin_server = domaincontroller1.example.local
                default_domain = example.local
        }
[domain_realm]
        .example.local = EXAMPLE.LOCAL
        example.local = EXAMPLE.LOCAL

[login]
    krb4_convert = true
    krb4_get_tickets = false

Tout ce qui est en rouge est à changer... par vos valeurs....

Login ou logs ?

après cette opération, vous devriez vous loguer avec vos données 'domaine'...

Si vous désirez logguer kerberos (pourquoi pas en fait...) ajoutez cette section:

[logging]
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmin.log
default = FILE:/var/log/kerberos/krb5lib.log

N'oubliez surtout pas de créer le dossier 'kerberos' dans votre '/var/log'

mkdir /var/log/kerberos

Dans ce cas, pensez aussi a créer une entrée 'logrotate' pour vos kerberos log... Sinon, votre log risque de devenir indigeste rapidement:

nano /etc/logrotate.d/krb5

Voici le contenu de ce fichier (pour un archivage par jour et une conservation de 7 jours):

/var/log/krb5/kadmin.log /var/log/krb5/krb5kdc.log /var/log/krb5/krb5lib.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
}

Redémarrage de Kerberos

Le plus simple dans ce cas sera un reboot... (surtout avec toutes les configs qui ont changer) mais en théorie ce n'est pas nécéssaire...

Configurer winbind

Winbind est le service qui se chargera de faire la transition entre le local et votre domain Active Directory (via kerberos)

Direction /etc/samba/smb.conf... 
nano /etc/samba/smb.conf
Fichier type
# Global parameters
[global]
    workgroup = EXAMPLEDOM
    realm = EXAMPLE.LOCAL
    server string = %h server (Samba %v)
    load printers = no
    security = ads
    local master = no
    domain master = no
    preferred master = no
    wins server = 192.168.11.100
    dns proxy = no
    winbind uid = 10000-20000
    winbind gid = 10000-20000
    winbind use default domain = yes
    interfaces = eth0 lo
    syslog = 0
    log file = /var/log/samba/log.%m
    max log size = 1000
    panic action = /usr/share/samba/panic-action %d
    invalid users = root
    template homedir = /home/%D/%U
    template shell = /bin/bash
    winbind offline logon = yes
    winbind refresh tickets = yes

Relancer les services

Votre configuration complete; il suffit de relancer les services:

service samba restart
service winbind restart

Configurer nsswitch

Cet outil est utilisé par le système pour faire la recherche des utilisateurs et des groupes dans l'Active Directory, de base l'outil est bien plus que cela, mais nous nous contenterons de ce type d'informations pour commencer...

nano /etc/nsswitch.conf

ajouter "winbind" aux bons endroits:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd:         files winbind
group:          files winbind
shadow:         files winbind
 
hosts:          files dns wins
networks:       files
 
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
 
netgroup:       nis

Gerer le mapping via PAM

PAM :  Pluggable Authentication Module

Ce module permet de changer les informations de authentification... Les fichiers de configuration se trouvent dans /etc/pam.d/

# nano /etc/pam.d/common-account

account    sufficient    pam_winbind.so
account    required      pam_unix.so

# nano /etc/pam.d/common-auth

auth    sufficient    pam_winbind.so
auth    required      pam_unix.so use_first_pass

# nano /etc/pam.d/common-session

session    required    pam_mkhomedir.so skel=/etc/skel/ umask=0022
session    sufficient  pam_winbind.so
session    required    pam_unix.so

Joindre le domaine

il vaut toujour mieux acquerir un ticket kerberos, utiliser un compte domain admin comme user_admin, vous devrez aussi fournir le mot de passe de ce compte...

kinit user_admin

Bien entendu vérifiez votre ticket...

klist

Si tout est en ordre, enfin la commande ultime...

 net ads join -W LANMAN_DOMAIN_NAME -S ad_server.example.local -U administrator
La aussi le mot de passe vous sera demandé... et si tout va bien...
Using short domain name -- LANMAN_DOMAIN_NAME
Joined 'server_name' to realm 'example.local'