System-Linux

Aller au contenu | Aller au menu | Aller à la recherche

Samba en mode ADS pour un file server

samba ads jpg

Vous voulez monter un serveur de fichier dans un domaine Active-Directory mais sans devoir payer des licences à prix d'or pour un Windows serveur ?

Simplement: utilisez Samba en mode ADS.

Prérequis :

  • Connaître un tant soit peu Active Directory, sur le principe et sur le fonctionnement.
  • Connaître Linux un minimum également et pouvoir s'y retrouver sur les principes réseaux.

Objectif :

Réaliser et comprendre toutes les étapes de l'intégration d'une machine dans un domaine Active Directory sous Windows 2003 d'une machine Linux sous Debian Lenny.

Matériel :

  • Deux machines en virtuel ou en physique.
  • De quoi faire communiquer les deux machines (switch, câbles UTP, etc)
  • Avoir un Domain Controler sous Windows 2003 server

Sur la machine debian, il faut d'abord installer un certain nombre de paquet.

apt-get install krb5-user krb5-clients ntpdate resolvconf samba smbclient smbfs winbind

Normalement vous allez avoir une fenêtre en ncurse qui vous posera une question: WORKGROUP. Répondez TEST. Il vous posera aussi deux autres questions: administrative server et kerberos server. Répondez par le nom complet du DC. Dans mon cas: dc1.test.local.

Ces paquets installent le client kerberos qui permet d'obtenir un ticket auprès du domain controler une fois configuré, ntpdate permet de se synchroniser au niveau du temps avec le DC, samba permet d'intégrer la machine linux dans le domain et winbind permet de s'authentifier depuis un linux avec user/password de l'AD

Tout d'abord, il faut vérifier le fichier /etc/hosts

127.0.0.1   	data.test.local  data
192.168.2.2	data.test.local  data

et modifier le fichier /etc/network/interfaces pour lui donner la bonne configuration IP. Attention, la machine Linux qui veut s'intégrer dans le domaine doit utiliser le DNS du domaine (donc, l'ip du DC)

auto eth0
iface eth0 inet static
	address 192.168.2.2
	netmask 255.255.255.0
	gateway 192.168.2.1
	dns-nameservers 192.168.2.3
	dns-search test.local

relancez votre service réseau pour prendre en compte ces paramètres :

/etc/init.d/networking restart

Vérifiez que tout est bon et essayer de pinger le DC avec son nom court :

ping dc1

Si ça fonctionne, c'est qu'on est sur le bon chemin. Si ce n'est pas bon, vérifiez le fichier /etc/resolv.conf qui donne les ip des serveurs DNS à contacter et le domain dns dont fait partie la machine.

nameserver 192.168.2.3
search test.local

Après, nous allons pouvoir commencer à configurer kerberos pour qu'il aille chercher un ticket auprès du DC. Editez le fichier /etc/krb5.conf et modifier le pour avoir ceci :

[libdefault]
	default_realm = TEST.LOCAL

[realms]
	TEST.LOCAL = {
			kdc = dc1.test.local
			admin_server = dc1.test.local
	}

[domain_realm]
	.test.local = TEST.LOCAL
	test.local = TEST.LOCAL

Dès que c'est fait, nous allons pouvoir tenter de récupérer un ticket grâce à cette commande après avoir synchronisé sa machine au niveau temps avec le serveur Windows :

ntpdate dc1.test.local
kinit administrator

Il vous sera demandé le password pour administrator. Une fois cette étape passée, vous pouvez vérifier que vous avez bien un ticket avec la commande

klist

Cool jusque là ? On passe alors à la suite qui se traduira par la configuration de Samba, Winbind et PAM. Éditez maintenant le fichier /etc/samba/smb.conf

[global]
server string = data.test.local
workgroup = TEST
realm = TEST.LOCAL

encrypt passwords = yes
security = ADS

idmap uid = 10000-20000
idmap gid = 10000-20000
winbind separator = +
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
template shell = /bin/bash
template homedir= /home/TEST/%u
obey pam restrictions = yes

[Homes]

comment = User Homes Directories
browseable = yes
writable = yes
read only = no

Sauvegardez et quittez le fichier. Éditez ensuite le fichier /etc/nsswitch.conf pour demander au système d'aller chercher les users qui veulent s'authentifier pas uniquement sur la machine linux mais aussi avec winbind (qui ira se fournir dans l'AD).

passwd  compat winbind
group    compat winbind

Dès que vous aurez modifié ce fichier et redémarré samba et winbind, nous allons pouvoir intégrer notre debian dans l'AD

/etc/init.d/samba  restart; /etc/init.d/winbind  restart
net ads join -U administrator

Encore une fois il demande le mot de passe et ensuite vous indique que tout c'est bien passé. Pour vérifier, utiliser ces quelques commandes :

wbinfo -u
wbinfo -g

getent passwd
geten group

Si elles donnent comme retour le user les users de l'AD et les groupes de l'AD, tout est ok :)

C'est bien beau tout ça, mais on ne peut pas encore s'authentifier sur la debian avec les users du domaine. A partir de maintenant, vous allez faire très attention à ce que vous modifiez parce qu'une erreur pour vous créer beaucoup de problème comme l'impossibilité total de se logger sur la machine linux avec le user root.

Tout d'abord on va faire un backup de quelques fichiers que nous allons modifier :

cp /etc/pam.d/{common-auth,common-account,common-session}  ./

Maintenant, modifions ces fichiers sans avoir trop peur mais gardez autant que possible une console ouverte avec le user root afin de pouvoir revenir en arrière si on fait une bêtise.

Le premier fichier à éditer, c'est /etc/pam.d/common-auth

Il faut ajouter une ligne avant celle qui contient pam_unix.so afin de dire au système que si quelqu'un veut s'authentifier, il faudra aussi interroger winbind.

auth  sufficient  pam_winbind.so

Dans le même ordre d'idée, avant la même ligne pam_unix.so il faudra ajouter la même chose à un détail près pour le fichier /etc/pam.d/common-account

account   sufficient   pam_winbind.so

A ce stade-ci, nous pouvons nous connecter dans debian avec le user administrator. Vous pouvez tester mais vous verrez que le système vous donne une erreur. Il vous averti que vous n'avez pas de home directory. Pour régler se problème, vous pouvez soit le créer à la main pour chaque user (long et chiant), soit modifier pam pour qu'il le crée automatiquement s'il n'existe pas.

Modifiez le dernier fichier /etc/pam.d/common-session et ajoutez à la fin du fichier :

session  required  pam_mkhomedir.so  skel=/etc/skel  umask=0022

Normalement, tout roule maintenant.

Si vous avez des questions n'hésitez pas, nous y répondrons avec plaisir dans la mesure du possible.

Premier article de ToTo, merci à lui !

Par GanGan | le lundi, mai 17 2010 07:00

Commentaires

1. jdh

lundi, mai 17 2010 | 15:30

Le titre et le premier paragraphe est un peu trompeur : le sujet de ce fil est de configurer le samba d'un serveur Linux intégré à un domaine ActiveDir (sous-entendu avec les utilisateurs du domaine)

Le titre laisserait à penser que Samba sera configuré en PDC (c'est à dire sans serveur Windows). Et là, oui, on n'a pas besoin des fameuses CAL Windows !

Sinon, le contenu est correct et reprend bien les étapes à réaliser.

2. Toto

lundi, mai 17 2010 | 17:58

Salut,

Quand on fait un testparm et que samba est en ADS, il indique bien "member server" donc pas en tant que PDC mais en tant que serveur intégré dans le domaine. Non?

Petite question question pour ma culture: j'aurai besoin d'acheter des cals pour ce serveur? Parce que dans les licences Microsoft, je devrais passer la certif... c'est vraiment le foutoire.

Sinon, merci pour le compliment :)

3. jdh

lundi, mai 17 2010 | 22:37

Remplacer un serveur Windows par un serveur Linux avec Samba réalise une économie l'une licence Windows Server. C'est clair.

Si le Samba a besoin de l'authentification du (P)DC du domaine Windows, le client a sans doute besoin d'une CAL (de type Open).

Enfin je présume.

Bref on fait là l'économie de la licence Windows mais pas des CAL. Ce qu'on peut obtenir si on configure Samba en DC du domaine (c'est à dire sans aucun serveur Windows).

4. GanGan

lundi, mai 17 2010 | 22:40

personnellement ça me dépasse et je cal(e)... :)

5. Toto

lundi, mai 17 2010 | 23:04

:p

Je pensais qu'il fallait des CAL aussi pour un serveur de fichier même si c'est pas un DC c'est pour ça que je disais que ça faisait une économie de CAL.

6. kiaradober

dimanche, juillet 18 2010 | 03:49

Bonjour,

J'ai une erreur au moment de l'intégration de ma machine à mon AD

# net ads join -U Administrateur
Administrateur's password:  
Using short domain name -- MONAD01
Failed to set servicePrincipalNames. Please ensure that
the DNS domain of this server matches the AD domain,
Or rejoin with using Domain Admin credentials.
Deleted account for 'MAMACHINE' in realm 'MONAD01.INTERNE'
Failed to join domain: Type or value exists

Voici mon fqdn

# hostname -f
MAMACHINE.MONAD01.INTERNE

L'utilisateur Administrateur est bien Admin du domaine (j'ai d'ailleur ajouté un Seven juste avant)

Voici mon fichier krb5.conf

[libdefaults]
 default_realm = MONAD01.INTERNE
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 MONAD01.INTERNE = {
  kdc = WIN2K8.MONAD01.INTERNE:88
  admin_server = WIN2K8.MONAD01.INTERNE:749
 }

[domain_realm]
 .monad01.interne = MONAD01.INTERNE
 monad01.interne = MONAD01.INTERNE

Et mon fichier samba:

# cat /etc/samba/smb.conf
[global]
       security = ADS
       realm = MONAD01.INTERNE
       password server = WIN2K8.MONAD01.INTERNE
       workgroup = MONAD01

netbios name = MAMACHINE

       winbind separator = +
       idmap uid = 10000-20000
       idmap gid = 10000-20000
       winbind enum users = yes
       winbind enum groups = yes
       template homedir = /data/partage/%U
       template shell = /bin/bash
       client use spnego = yes
       winbind use default domain = yes
       # empêche le client de devenir maitre explorateur
       domain master = no
       local master = no
       preferred master = no
       os level = 0
       log file = /var/log/samba/samba.log
       max log size = 1000
 	syslog = 0
       obey pam restrictions = yes

J'ai bien déclaré mes ips dans /etc/hosts

cat /etc/hosts
127.0.0.1		MAMACHINE.MONAD01.INTERNE
X.X.X.X MONAD01.INTERNE MONAD01 WIN2K8.MONAD01.INTERNE
Y.Y.Y.Y MAMACHINE.MONAD01.INTERNE

Merci d'avance

7. kiaradober

dimanche, juillet 18 2010 | 22:22

Bonjour,

J'ai une erreur lorsque j'essaie de joindre le domaine:

# net ads join -U Administrateur
Administrateur's password: 
Using short domain name -- MONAD
Failed to set servicePrincipalNames. Please ensure that
the DNS domain of this server matches the AD domain,
Or rejoin with using Domain Admin credentials.
Deleted account for 'MAMACHINE' in realm 'MONAD.INTERNE'
Failed to join domain: Type or value exists

pouvez vous m'aider?

Merci