Serveur Samba et integration dans un domaine
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\seb%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\seb Password: ***** ... MONDOMAINE\seb@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 commentaireSuperbe ces explications, tout est beaucoup plus clair !!!
Merci
Sympatique je vais voir si ça fonctionne pour moi ... j'en ai trop besoin au boulot !
Merci !
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
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 ?
précision importante peut-être: j'essaie de me connecter en KDE.
Pour le mode graphique je n'ais aucune idée ...
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
De mémoire je dirais :
- un client kerberos
- dans l'AD il faut juste ajouter la machine
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.
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
@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.
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
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
@Tonioo : merci pour ton retour.
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
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
@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.
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
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 ?
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
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
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.
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?
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