Serveur Samba et integration dans un domaine


windows
Nous allons voir dans cet article, la procédure à suivre pour pouvoir intégrer une machine Linux dans un domaine NT ou Active Directory. J'ai effectué ces tests sur une Fedora Core 4 et samba 3.

1. Pré-requis

  • samba et winbind sont installés sur la machine et fonctionne
  • possession du compte administrateur du domaine et du mot de passe
  • pour les domaines Actives Directory, il faut que Kerberos soit installé et que la machine soit créée dans l'annuaire

2. Configuration de base pour Samba

La configuration générale du serveur samba se passe dans la section [global] du fichier /etc/samba/smb.conf, on va donc y ajouter les options suivantes :

 [global]
 # Nom du groupe de travail ou du domaine
 workgroup = WORKGROUP 
 # nom de la machine (= hostname)
 netbios name = xblade 
 # Nom qui apparaît lors du parcours réseau (%h = hostname)
 server string = %h 
 # Activation du cryptage des mots de passe
 encrypt passwords = yes 
 # Mode authentification 
 security = user 
 # On accepte les inconnus en leurs donnant un droit d'accès en tant qu'invité
 map to guest = Bad User 
 # Liste des utilisateurs non valide
 ; invalid users = toto 
 # Pour pouvoir synchroniser l'horloge des clients sur celle du serveur
 ; time server = Yes 
 # Options de connexions
 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
 ; hosts allow = 192.168.0. EXCEPT 192.168.0.35
 ; hosts deny = ALL 
 # Configuration des logs du serveur, taille en kb
 log file = /var/log/samba/%m.log
 max log size = 1000 

Ici notre serveur est configuré pour appartenir au groupe de travail WORKGROUP. Celui-ci fonctionnera normalement, après redémarrage du service samba avec la commande /etc/init.d/smb restart. Il ne faudra pas oublier de créer les comptes utilisateurs, en utilisant la commande smbpasswd -a toto, par exemple.

3. Intégration de Samba dans un domaine NT

Exemple de configuration pour joindre un domaine NT qui se nomme MONDOMAINE :

[global]
workgroup = MONDOMAINE
security = domain 
# Configuration de winbind
winbind separator = \
winbind cache time = 10
template shell = /bin/bash
template homedir = /home/%D/%U
idmap uid = 10000-20000
idmap gid = 10000-20000 
winbind enum users = yes
winbind enum groups = yes

Une fois samba et winbind lancé, vous pourrez joindre votre domaine avec :

$ net rpc join -U administrator
Password: *****
Joined domain MONDOMAINE

4. Intégration de samba dans un domaine Active Directory

Ici, la méthode est un peut plus longue que la précédente. Je vais l'illustrer avec un exemple :

  • nom du domaine court : AD
  • nom du domaine long : ad.monentreprise.fr
  • nom du contrôleur de domaine : ControleurDomaine
  • nom de la machine à intégrer : xblade
  • nom du compte admin : admin-domain

Il faut savoir que pour réaliser cette opération, le respect des majuscules et minuscules est important. La première étape sera, comme toujours, la modification de la section [global] du smb.conf :

[global]
workgroup = AD
realm = AD.MONENTREPRISE.FR
netbios name = xblade
security = ADS
# Use only if Samba cannot determine the Kerberos server automatically
; password server = kerberos.example.com 
# Configuration de winbind
winbind separator = \
winbind cache time = 10
template shell = /bin/bash
template homedir = /home/%D/%U
idmap uid = 10000-20000
idmap gid = 10000-20000 
winbind enum users = yes
winbind enum groups = yes

Pour fonctionner avec Active Directory, il nous faut utiliser Kerberos. On va donc modifier son fichier de configuration, /etc/krb5.conf, pour obtenir ceci :

[libdefaults]
default_realm = AD.MONENTREPRISE.FR
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
forwardable = yes 
[realms]
AD.MONENTREPRISE.FR = {
  kdc = ControleurDomaine.ad.monentreprise.fr
  admin_server = ControleurDomaine.ad.monentreprise.fr
  default_domain = AD.MONENTREPRISE.FR
} 
[domain_realm]
.ad.monentreprise.fr = AD.MONENTREPRISE.FR
ad.monentreprise.fr = AD.MONENTREPRISE.FR

La modification du fichier /etc/hosts est également essentiel afin de faire fonctionner Kerberos :

127.0.0.1		xblade.ad.monentreprise.fr xblade

Redémarrez :

  • samba : /etc/init.d/smb restart
  • winbind : /etc/init.d/winbind restart

puis demander un Ticket-Granting et vérifiez sa validité :

# kinit admin-domain
Password for admin-domain@AD.MONENTREPRISE.FR: ****
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin-domain@AD.MONENTREPRISE.FR
Valid starting Expires Service principal
12/27/05 17:07:27 12/28/05 03:06:50 krbtgt/AD.MONENTREPRISE.FR@AD.MONENTREPRISE.FR
renew until 12/28/05 17:07:27

On peut enfin rattacher la machine au domaine Active Directory :

# net ads join -w AD -S ControleurDomaine -U admin-domain
Using short domain name -- AD
Joined 'XBLADE' to realm 'AD.MONENTREPRISE.FR'

5. Finalisation de l'installation

Voici quelques commandes que l'on peut utiliser après intégration d'un domaine :

  • liste des users du domaine : wbinfo -u
  • liste des groups du domaine : wbinfo -g
  • vérifier qu'un utilisateur particulier est correctement reconnu :
    wbinfo -a MonDomaine\bilbeau%LeMotDePasse

Maintenant que votre machine est rattachée à un domaine, nous devons éditer quelques fichiers pour que winbind fonctionne correctement. Je rappel que winbind permet de "mapper" les utilisateurs d'un domaine pour qu'ils soient accessibles par samba, sans que les utilisateurs Unix existent réellement
Modifier /etc/nsswitch.conf pour obtenir ceci :

passwd:   files winbind
shadow:   files winbind
group:     files winbind

Modifier /etc/pam.d/login :

#%PAM-1.0
auth       required     pam_securetty.so
auth       sufficient   pam_winbind.so
auth       required     pam_stack.so service=system-auth
auth       required     pam_nologin.so
account    sufficient   pam_winbind.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_stack.so service=system-auth
session    required     pam_loginuid.so
session    optional     pam_console.so
# pam_selinux.so open should be the last session rule
session    required     pam_selinux.so multiple open
  • vérifier que les utilisateurs du domaine sont ajoutés à la liste des utilisateurs du serveur Linux avec les bons uid : getent passwd
  • la même chose avec les groupes d'utilisateurs : getent group
  • Chaque domaine à besoin d'un répertoire dans home, on va donc le créer avec mkdir /home/MONDOMAINE. Vous pouvez désormais vous loger sur votre machine avec DOMAIN\login :

    login: MONDOMAINE\sebastien.bilbeau
    Password: *****
    ...
    MONDOMAINE\sebastien.bilbeau@xblade:~$ 
    

    Autre documentation :   Wiki Ubuntu  Linux-sxs


25 Commentaires pour "Serveur Samba et integration dans un domaine"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Superbe ces explications, tout est beaucoup plus clair !!!
    Merci

    RépondreRépondre
    TitaX , le 2 janvier 2006 à 08:41
  •  

    ;-)

    RépondreRépondre
    pti-seb , le 2 janvier 2006 à 19:44
  •  

    Sympatique je vais voir si ça fonctionne pour moi ... j'en ai trop besoin au boulot ! :)
    Merci !

    RépondreRépondre
    Motarion , le 7 février 2006 à 12:02
  •  

    Tout d'abord je remercie "Pti-Seb" pour avoir ecrit ce tuto. Cependant j'ai un petit probleme lorsque j'essaye de joindre le domaine :

    debian:/home/chris# net rpc join -U admin%monpassword

    Unable to find a suitable server
    Unable to find a suitable server
    debian:/home/chris#

    Et je n'arrive pas à me l'expliquer. Connaissez vous la solution pour résoudre ce problème.

    Merci beaucoup, cordialement, EwKilian

    RépondreRépondre
    EwKilian , le 17 février 2006 à 10:41
  •  

    bonjour, pas mal non plus comme doc. Elle m'a aidé pas mal, par contre, juste problème: tout fonctionne (joindre le domaine, wbinfo -u, wbinfo -g, vérification des mots de passe du domaine, getent passwd, getent group) sauf l'authentification sur la machine LINUX en mode graphique au démarrage de la machine.

    Le fichier nsswitch.conf + login sont modifiés comme indiqués dans la doc. Auriez-vous une idée ?

    j'ai essayé qq trucs: déjà le caractère de séparation '\' entre le domaine et le user doit être doublé '\\' sinon il n'est pas reconnu. après d'autres trucs sur le web mais en vain ??

    Alors si vous aviez d'autres tests à me faire faire ?

    RépondreRépondre
    remy , le 16 mars 2006 à 15:12
  •  

    précision importante peut-être: j'essaie de me connecter en KDE.

    RépondreRépondre
    remy , le 16 mars 2006 à 15:21
  •  

    Pour le mode graphique je n'ais aucune idée ...

    RépondreRépondre
    pti-seb , le 16 mars 2006 à 17:23
  •  

    Salut,

    Dans le cadre d'une intégration dans un domaine AD,
    - sur le serveur samba, il faut installer un client kerberos ou un serveur kerberos (ou les deux)?
    - Y a-t-il des choses à configurer dans l'AD (mis à part rajouter la machine dans l'annuaire) ?

    Merci

    RépondreRépondre
    Benji , le 12 janvier 2007 à 08:52
  •  

    De mémoire je dirais :
    - un client kerberos
    - dans l'AD il faut juste ajouter la machine

    RépondreRépondre
    pti-seb , le 12 janvier 2007 à 18:23
  •  

    Pour le graphique KDE, regarde dans /etc/pam.d , il y a surement un fichier différent, il faut donc y ajouter le module winbind.

    RépondreRépondre
    Stormer , le 15 avril 2007 à 07:36
  •  

    Nous avons un serveur Linux Mandrake CS3 de données dans un domaine dont le CPD est un serveur Windows 2000.

    Ce serveur donnait satisfaction jusqu'alors (à l'exception de fichiers qui se mettaient en lecture seule) puis de manière aléatoire des plantages se produisaient qui nous ont obligé à repasser nos données sur l'ancien serveur de données également sous Windows 2000.

    Sur le serveur Linux nous avons arrêté divers services jusqu'à ce que nous ayons déterminé que apparemmment le service en cause était winbind.
    En effet winbind actif et à un moment il plante.

    Désactivé, le serveur continue à marcher, mais ne permet bien sûr pas de l'avoir pour autant en production.
    Je modifié les configurations de smb.conf et de winbind.conf comme vu sur certains forums, mais rien n'y fait. Auriez vous une idée ?

    Merci d'avance

    Remarques :
    1 - deux serveurs ont le même problème : un HP Proliant et et un Dell Powerdge 2800
    2 - Sur le Dell, la carte mère, un disque dur et le cpu ont été changés sans effet

    RépondreRépondre
    Tristefigure , le 30 juin 2007 à 17:06
  •  

    @Tristefigure : A mon avis, ce n'est sûrement pas un problème matériel.

    Il faudrait consulter les logs pour voir ce qui ne va pas, voir augmenter leurs verbosités.

    RépondreRépondre
    pti-seb , le 1 juillet 2007 à 21:03
  •  

    Bonjour,
    Tout d'abord, merci pour ce tuto bien clair et utile ;-)
    Je rencontre aussi le problème de logon en console ou en ssh distant. En tapant ssh DOMAIN/user@hostname, j'ai un retour pour taper le mot de passe, mais il est refusé.
    Un su - DOMAIN/user depuis une console root fonctionne tout de même.
    Cordialement

    RépondreRépondre
    Tonioo , le 30 juillet 2007 à 14:31
  •  

    Re,

    J'ai trouvé la solution de mon problème. Il suffisait d'ajouter les lignes suivantes au fichier /etc/pam.d/system-auth pour permettre l'authentification en ssh ou en console :

    auth sufficient /lib/security/$ISA/pam_winbind.so use_first_pass

    account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_winbind.so

    password sufficient /lib/security/$ISA/pam_winbind.so use_authtok

    Cette dernière permet de créer automatiquement le home de l'utilisateur lors de son premier logon :
    session sufficient /lib/security/$ISA/pam_mkhomedir.so skel=/etc/skel umask=0077

    Ces lignes fonctionnent sur une RHEL4-up5. Important : faites un backup des fichiers de /etc/pam.d avant de les modifier

    En espérant que cela puisse aider :-)

    RépondreRépondre
    Tonioo , le 8 août 2007 à 09:50
  •  

    @Tonioo : merci pour ton retour.

    RépondreRépondre
    pti-seb , le 8 août 2007 à 14:17
  •  

    Bonjour,

    J'ai suivi à la lettre ce tuto pour joindre une debian sur un AD 2003 server.
    Lors de la commande de jointure, il me demande bien le mot de passe mais une fois rentrée j'ai :

    administrateur's password:
    [2007/12/17 15:09:24, 0] utils/net_ads.c:ads_startup(289)
    ads_connect: Invalid credentials

    Voila, je ne sais pas comment faire
    Merci pour votre aide et ce tuto qui est très clair

    RépondreRépondre
    caracal , le 17 décembre 2007 à 15:10
  •  

    salut
    en fait la commande wbinfo -u ne marche pas chez moi je sais pas pourquoi?
    elle m'affiche le message suivant "error looking up domain users"
    merci.
    un grand chapeau mr sebastian

    RépondreRépondre
    adil , le 17 novembre 2008 à 02:46
  •  

    @adil : j'ai eu cette erreur également. j'ai redémarré les services winbind et samba après avoir joint le domaine.
    et les commandes ont alors marché sas pb.

    Au pire un reboot du serveur devrait régler ça.

    RépondreRépondre
    neodam , le 7 avril 2009 à 16:21
  •  

    bonjour

    Tout fonctionne parfaitement sauf au moment du login au démarage:
    "could not update ICEauthority file/home/MON DOMAINE/UTILISATEURAD/.ICEauthority"

    Meme probleme en mode console lors de la tentative de login
    "Problème d'initialisation de la session, abandon"

    L'authenfication fonctionne pourtant, j'ai rajouté les lignes cités par tonioo ci-dessus à /etc/pam.d/system-auth pour créer le home utilisateur automatiquement (sans résultat). Donc voilo si quelqu'un sait d'où vient l'erreur et à la solution.....

    Merci d'avance

    RépondreRépondre
    fabien , le 19 mai 2009 à 20:39
  •  

    Salut merci pour le cours
    En fait j'ai deux petits problèmes
    1 - la commande getent passwd et getent group devraient normalement me montrer les users local et les users AD ainsi que les groupes ou je me trompe moi je n'ai que les users de mon linux que je vois
    2 - je voudrais aussi me connecter sur le serveur en utilisant mes comptes active directory via une machine WinXP appartenant au domaine est ce possible ?

    RépondreRépondre
    mmkmou , le 20 août 2009 à 15:29
  •  

    J'ai une question épineuse qui se pose dans mon entreprise, on m'a demandé d'essayer d'intégrer un poste debian sur notre AD, jusqu'ici pas de problème je suis la procédure, mais là ou ça se complique c'est que le compte admin du domaine pour intégrer les machines est un compte d'un autre domaine.
    Je m'explique le domaine s'appelle par exemple user.AD et quand je veux rentrer une machine sur ce domaine je dois utiliser un compte qui se trouve sur le rootAD. Et donc quand je suis la procédure lorsque je tape la commande kinit administator@rootAD kerberos me dit :
    kinit(v5): KRB5 error code 68 while getting initial credentials
    Si quelqu'un a une idée d'où cela peut venir cela m'aiderai grandement.
    Merci

    RépondreRépondre
    Kiki , le 18 août 2010 à 11:03
  •  

    DC_ERR_WRONG_REALM 68 Réservé pour utilisation future

    est retourné par Active Directory, car vos utilisateurs
    tentent d'obtenir un TGT Kerberos pour un domaine qui n'est pas hébergé sur le serveur sur lequel ils sont authentifiés

    RépondreRépondre
    mmkmou , le 18 août 2010 à 17:14
  •  

    Justement c'est mon problème je dois intégrer un pc dans un domaine A avec un compte d'un domaine B mais qui a les droits administrateur sur le domaine A.

    RépondreRépondre
    Kiki , le 19 août 2010 à 08:16
  •  

    j'ai avancé dans mon problème mais toujours à la même étape lors du kinit lorsque je met le compte administrator@rootAD il me demande bien le mot de passe, mais quand je rentre celui-ci j'ai ce message d'erreur désormais:

    KDC has no support for encryption type while getting initial credentials

    Si cela vous dit quelquechose?

    RépondreRépondre
    Kiki , le 1 septembre 2010 à 14:03
  •  

    Bonjour

    j'ai installer un squid faisant l'authentification par active directory

    j'ai eu le message d'erreur suivant dans le cache de squid
    utils/ntlm_auth.c:get_winbind_netbios_name(199)
    could not obtain winbind netbios name!

    mon smb.conf est:

    workgroup = domaine
    realm = domaine
    netbios name = proxy
    security = ADS
    password server = server.domaine
    server string = %h server
    dns proxy = no
    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0
    panic action = /usr/share/samba/panic-action %d
    obey pam restrictions = yes
    unix password sync = yes
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ss
    pam password change = yes
    idmap uid = 10000-20000
    idmap gid = 10000-20000
    template shell = /bin/bash
    winbind enum groups = yes
    winbind enum users = yes
    winbind use default domain = yes

    mon krb5.conf est:

    [libdefaults]

    default_realm = DOMAINE
    clock_skew = 300
    ticket_lifetime = 24000

    default_tkt_enctypes = des3-hmac-sha1 des-cbc-crc
    default_tgs_enctypes = des3-hmac-sha1 des-cbc-crc
    allow_weak_crypto = yes
    dns_lookup_realm = false
    dns_lookup_kdc = true
    [realms]

    DOMAINE = {

    kdc = SERVER.DOMAINE

    admin_server = server.domaine ici (server =dc)
    default_domain = DOMAINE
    [domain_realm]

    .domaine = DOMAINE
    domaine= DOMAINE

    NB: j'ai bien lancé les commande:s chown root:winbindd_priv /var/run/samba/winbindd_privileged
    chmod -R 777 /var/run/samba/winbindd_privileged/

    merci pour votre aide svp

    RépondreRépondre
    ghaith , le 8 octobre 2010 à 14:30
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum