Tutoriel: Samba, un controleur de domaine, sous linux

Reseau4.jpg

On va tenter l'installation d'un contrôleur de domaine (terme windowsien) sous une débian 6. Car oui, depuis pas mal de temps déjà, samba sait aller au delà du partage de fichiers et d'imprimantes.

Pour le moment je reste basique. C'est à dire authentification des utilisateurs avec quelques mappages de dossiers. J'essaierai d'aller au delà dans un autre billet.

On verra le paramétrage, puis un test sur windows7.

Quelques documents

Il y a pleins de tutoriels là dessus, je ne suis pas original mais perso, j'ai du en croiser plusieurs pour faire ce que je voulais.

Serveur

Un serveur débian propre, sans rien de plus.

Samba!

Installation

apt-get install samba

Actuellement dans les paquets de débian Lenny, c'est la version 3.5 de samba qui est installée.

Configuration.

Explication. / synoptique

  • Chaque utilisateur aura un dossier personnel, une tête de lecteur réseau H sur leur poste de travail, qui pointe en fait vers le homedir de l'user linux correspondant.
  • Les profils itinérants sont stockés sur le serveur dans /home/samba/profiles/username. Le partage réseau quand à lui est //serveur/profiles/username
  • Netlogon (/home/samba/netlogon sur le serveur; //serveur/netlogon en chemin UnC) Sert aux scripts de démarrage et de directives qui s'appliquent aux ordinateurs, ou lors de la connexion des utilisateurs. Cependant Dans cette version de samba, il n'y a pas besoin de créer à la mano les fichiers batch pour monter des dossiers. Il va les générer tout seul comme un grand à partir des directives mises dans son fichier de configuration.

Le fichier de configuration /etc/samba/smb.conf est divisé en plusieurs parties: [global] et une mini partie par partage. Voyons le Global.

Configuration générale

Je liste dans un premier temps quelques directives du fichier sur lesquelles je pense utile de faire un petit commentaire.

Le nom du domaine ou workgroup:

workgroup = dom_grouik

Le nom du serveur sur le réseau sera son nom d'installation:

server string = %h

Pour le moment je laisse WINS désactivé. WINS assure (assurait, ça parait obsolète) un service de noms netbios, Un équivalent du DNS quoi, mais à plus petite échelle. A cette étape du tuto, je ne sais pas encore si je vais retenir cette solution, ou me baser sur un bind ou autre.

#   wins support = no

Je laisse interfaces commentée car par défaut, samba répondra à toutes les requêtes. Mais si vous souhaitiez limiter à un VLAN particulier, c'est là qu'il faut le mettre:

 ;   interfaces = 127.0.0.0/8 eth0
security = user

Les mots de passe unix et samba seront synchronisés. Cette commande active l’exécution du programme externe défini à la directive passwd program, lors du changement de mot de passe samba

unix password sync = yes

C'est le maitre (par opposition à contrôleur de domaine secondaire):

domain master = yes

Mouais, je n'ai pas trop saisi le but de la directive suivante: L'OS level si je me souviens bien c'est lorsqu'il y a plusieurs controleur de domaine celui qui aura l'OS le plus eleve sera choisi. Explication de zilozi dans les commentaires... Un peu comme le champs MX dans les DNS quoi

os level = 33

Pour insister sur le fait que c'est le maitre (surtout en cas de conflit):

preferred master = yes

C'est le partage où sera placé le profil de l'user (son "documents and settings" quoi)

logon path = \\%N\profiles\%U

Samba permet de monter directement (sans faire à la main un script batch) le home_dir de l'user unix sur une tête de lecteur. Il aura besoin de placer les scripts dans un partage "netlogon" (plus bas):

logon drive = H:%%%
logon home = \\%N\%U

scripts lors de l'ajout d'users ou de machines depuis un pc client:

add user script = /usr/sbin/adduser -g dom_users -c Utilisateur -d /dev/null -s /bin/false '%u'%%%
add machine script  = /usr/sbin/useradd -g dom_pc -c "%u machine account" -d /dev/null -s /bin/false '%u'%%%
add group script = /usr/sbin/groupadd '%g'%%%
delete user script = /usr/sbin/userdel -r '%u'%%%
delete group script = /usr/sbin/groupdel '%g'%%%
delete user from group script = /usr/bin/gpasswd -d '%u' '%g'%%%
set primary group script = /usr/sbin/usermod -g '%g' '%u' %%%

En retirant toutes les lignes commentées ça donne:

[global]


   workgroup = dom_grouik
   server string = %h
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   security = user
   encrypt passwords = true
   passdb backend = tdbsam
   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\ssuccessfully* .
   pam password change = yes
   domain master = yes
   os level = 33
   preferred master = yes
   domain logons = yes
   logon path = \\%N\profiles\%U
   logon drive = H:
   logon home = \\%N\%U
   add user script = /usr/sbin/adduser -g dom_users -c Utilisateur -d /dev/null -s /bin/false '%u'
   add machine script  = /usr/sbin/useradd -g dom_pc -c "%u machine account" -d /dev/null -s /bin/false '%u'
   add group script = /usr/sbin/groupadd '%g'
   delete user script = /usr/sbin/userdel -r '%u'
   delete group script = /usr/sbin/groupdel '%g'
   delete user from group script = /usr/bin/gpasswd -d '%u' '%g'
   set primary group script = /usr/sbin/usermod -g '%g' '%u' 

Partages

Vu la config au dessus, il faut trois partages: homes netlogon et profiles Suffit de décommenter. Même si je n'aborde pas ici les imprimantes, je laisse les valeurs par défaut

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   create mask = 0700
   directory mask = 0700
   valid users = %S

[netlogon]
   comment = Network Logon Service
   path = /home/samba/netlogon
   guest ok = yes
   read only = yes

[profiles]
   comment = Users profiles
   path = /home/samba/profiles
   create mask = 0600
   directory mask = 0700
   writeable = yes
   create mode = 0700

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

Mise en place.

C'est là que j'ai honte, cette partie est quasiment un copier coller de tux-planet (hormis le changement de dossiers, j'ai ajouté un mappage entre les Noms NT des groupes et les groupes unix)

#La première étape consiste à créer le compte administrateur. 
#le mot de passe SAMBA doit être identique au mot de passe UNIX.
smbpasswd -a root
#La création des groupes servira plus loin, mais pas dans l'immédiat pour un simple partage de dossier
#Création du groupe des administrateurs du domaine
groupadd dom_admin
#Création du groupe des utilisateurs du domaine
groupadd dom_users
#Création du groupe des machines
groupadd -g 515 dom_pc
#Attribuons ensuite les bons RIDs aux trois groupes :
net groupmap add rid=515 unixgroup=dom_pc ntgroup="Domain Computers"
net groupmap set "Domain Admins" dom_admin
net groupmap set "Domain Users" dom_users
#creer les dossiers
mkdir /home/samba/
mkdir /home/samba/profiles
mkdir /home/samba/netlogon
cd /home/samba/
chgrp -R dom_users *
chmod -R 755 netlogon
chmod -R 770 profiles/
#Créer un user:
useradd -G dom_users -m -c "utilisateur test" -s /bin/false test
#Ajout de l'utilisateur à samba 
smbpasswd -a test

Vérifiez la configuration avec la commande:

testparmc

Vérifiez le mapping des groupes par la commande:

net groupmap list

Puis lancez samba:

/etc/init.d/samba start

Test sous windows:

Sous Windows XP, c'est passé sans problème.

Pour seven, préalablement. Vous pouvez au choix demander le correctif à microsoft (ils le transmettent par e-mail) http://support.microsoft.com/kb/2171571

Ou à la mano, vous ajoutez les valeurs de registres suivantes

        HKLM\System\CCS\Services\LanmanWorkstation\Parameters
            DWORD  DomainCompatibilityMode = 1
            DWORD  DNSNameResolutionRequired = 0

En quelques screens, l'ajout d'un ordinateur dans le domaine se fait par les propriétés du poste de travail, puis Modification du nom de l'ordinateur. Lors de l'ajout, on utilise un compte administrateur (root) qu'on mettra plus loin administrateur de la machine au passage. Par la suite, il sera possible de s'authentifier sur l'ordinateur à partir de n'importe quel compte du domaine. Les droits sur la machine seront ceux d'un utilisateur standard.

En quelques screens 1.jpg

2.jpg

3.jpg

4.jpg

5.jpg

6.jpg

7.jpg

C'est comment un AD Windows?

Je me permet une petite digression, explication de ce qu'est un contrôleur de domaine Windows 2003. Le temps d'aller sur la passerelle avec ma clé ssh et de faire une redirection du port rdp sur le serveur du travail. Je fermerai juste après les ports évidemment. Un active directory, pas obligatoire, mais en général, ce sont tout d'abord des ordinateurs qui sont intégrés dans le domaine.

win2003-computers.jpg

Ce sont aussi des utilisateurs et des groupes: win2003-users.jpg

Pour lesquels, on peut choisir plein de paramètres, là c'est l'utilisateur accueil: le script batch à exécuter au démarrage (montage de répertoires distants principalement) et le dossier dans lequel sera dupliqué son dossier documents and settings (profils itinérants)

win2003-profils.jpg

Pour cela, un contrôleur de domaine partage plein de trucs en plus des dossiers à partager aux utilisateurs.

win2003-localhost.jpg

Les scripts .bat à l'ouverture et les GPO par exemple. win2003-sysvol.jpg

Conclusion

C'est pas mal, j'ai réussi à remplacer pas mal de fonctions du win2003 déja. Je ferai surement des ajouts à ce billet si je prends le temps de faire quelques tests (impression, DNS couplé à samba etc...)

Commentaires

1. Le mardi, mai 31 2011, 14:20 par zilozi

Bonjour,

L'OS level si je me souviens bien c'est lorsqu'il y a plusieurs controleur de domaine celui qui aura l'OS le plus eleve sera choisi.

Ensuite pour un controleur de domaine on stock les utilisateurs et ordinateurs dans un annuaire LDAP (OpenLDAP) et pour se faciliter la vie on utilise les smbldap-tools pour inscrire des users et computers.

Pour ton password unix sync tiens regarde ce lien :
http://www.mirabellug.org/docs/samb...

2. Le mardi, mai 31 2011, 21:09 par gnieark

Merci pour ce complément Zilozi.

J'ai ajouté ces précisions au billet

3. Le vendredi, novembre 11 2011, 16:04 par Geek`

Bonjour,

ce tutoriel a l'air de rassembler tout ce dont j'ai besoin faire mon domaine (je voudrais centraliser les données de mon réseau local pour les personnes le désirant et monter un serveur DLNA en plus).

Je voudrais savoir si sur les postes clients (notamment pour les portables qui ne seront pas toujours utiliser a l’intérieur du domaine) si il est possible d'acceder a ces comptes de maniere "offline" et si il est possible que tout se synchronise lors que l'on se connecte sur la machine?

Merci d'avance pour vos réponses.

4. Le samedi, novembre 12 2011, 15:11 par gnieark

Bonjour Geek

Oui, mais à peut être à retester:

Ce que j'ai remarqué, c'est que le windows garde en mémoire les identifiants d'un utilisateur: il peut ouvrir son PC, même en dehors du LAN. Son profil étant copié dans documments and settings ("users" à partir de windows vista) il aura acces à ses documents hors ligne. Ces derniers se synchroniseront une fois qu'il sera à nouveau dans le réseau. La synchro prend en compte la date de modifications des fichiers.

Ce n'est cependant pas le cas d'un compte administrateur du domaine, qui lui doit être connecté au domaine pour ce logguer.

Dans tous les cas c'est surement paramétrable. Si je m'ennuie un peu dimanche, je ferai le test ;)

5. Le vendredi, septembre 14 2012, 14:28 par Chinzu

Salut, Tout d'abord un grand merci pour ton tuto ! il est très clair et très explicite ! Ya juste une chose qui me chiffone : A la fin de la configuration de samba tu donne la commande "testparmc" pour verifier la config. Lorsque je l'exécute j'ai droit à un "commande introuvable". est-ce grave docteur?

6. Le samedi, septembre 15 2012, 14:44 par gnieark

Bonjour Chinzu

Je n'ai plus la config en tete, Le billet date un peu, la version actuelle étant la 3.6 si je ne me trompe pas, je crois qu'ils ont modifié le nom de la commande; essaie avec "testparm" sans le c

7. Le lundi, septembre 17 2012, 09:55 par Chinzu

Parfait la commande fonctionne. Par contre je ne parviens pas à faire rentrer un seven sur mon serveur. J'ai fais la modif des clés de registres mais j'obtiens le message : Impossible de contacter un contrôleur de domaine AD pour le domaine SECOVANET.SECOVA.BE

J'ai deux portable, un avec une machine virtuelle de ma débian 6.0.5 et l'autre avec une machine virtuelle de client 7 pro.

8. Le lundi, septembre 17 2012, 16:05 par Chinzu

Je précise les pare-feu sont down des deux cotés et j'arrive à pinger des deux cotés

9. Le jeudi, septembre 20 2012, 09:41 par SkyMaster

Super tuto, exactement ce dont j'ai besoin.
Cependant j'ai un soucis en joignant le domaine, lorsque je rentre l'user et le pass j'obtiens "le nom réseau spécifier n'est plus disponible". Quelqu'un à déjà eu ce problème ?

10. Le mardi, février 2 2016, 17:42 par Fifi le fi

je n'arrive pas à télécharger samba!!!

11. Le samedi, mars 19 2016, 20:20 par chambon

Je n’arrive pas à télécharger samba

Page top