samba – déployer une infrastructure Active Directory avec Linux

samba-deployer-une-infrastructure-active-directory

Vous en avez toujours rêvé ! Aujourd’hui, c’est possible avec la solution alternative libre « SaMBa ».

Samba-Logo

Disponible sur de nombreuses architectures Linux, SaMBa est le service indispensable de partage de fichiers et d’imprimantes entre plateformes Windows et Unix. Depuis sa version 4, SaMBa est également contrôleur de domaine Active Directory et supporte les protocoles d’authentification utilisés par Windows 2000 et plus.

La formation proposée abordera à travers des sessions interactives et des exercices d’application pratique les thèmes suivants :

Plan de la formation

JOUR1

  1. Comprendre un système de type Active Directory et les différents services associés (DNS, LDAP, Kerberos, NTP)
  2. Installer et configurer SaMBa ; des outils d’administration natifs aux outils d’administration de serveur distant (RSAT)

JOUR2

  1. Maîtriser les particularités d’implémentation d’un service SaMBa4
  2. Découvrir les nouveaux usages rendus possibles avec SaMBa4
  3. Appréhender la méthodologie pour réussir le déploiement ou la migration de SaMBa4 dans votre infrastructure : retour d’expérience du CNRS – LCC

  4. Références

Pré-requis

2019-09-19 14.33.57
2019-09-19 14.33.51
– Configurer les redirections suivantes afin de pouvoir vous connecter en ssh depuis l’hôte :

2019-09-19 15.13.09

more /Users/colombet/Library/VirtualBox/NatNetwork-Dhcpd.leases
<?xml version="1.0"?>
<Leases version="1.0">
  <Lease mac="08:00:27:7b:00:92" network="0.0.0.0" state="acked">
    <Address value="10.0.2.6"/>
    <Time issued="1569485906" expiration="1200"/>
  </Lease>
</Leases>
  • Nous utiliserons les identifiants suivants pour vos VM
    • root / Pa$$w0rd
    • Administrator / Pa$$w0rd
    • asr / Pa$$w0rd
    • admin / Pa$$w0rd

Remarque : Privilégier le compte asr afin d’exécuter vos commandes avec sudo , pour faciliter le déroulement du TP, activer l’astuce suivante afin de lancer des commandes sudo sans demande de mot de passe :

$ asr@dc1ad:~$ su -
dc1ad:~# echo "asr ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/asr
dc1ad:~# exit
$ asr@dc1ad:~$ sudo ma_commande
$ asr@dc1ad:~$ sudo -i
dc1ad:~#

Toutes les VM et les outils sont disponibles à cette adresse : https://mycore.core-cloud.net/index.php/s/2gLOipJIY02iJIp

Paquets nécessaire à l’ensemble des TP Linux

# apt-get install vim lwatch sudo tree net-tools locate dnsutils

Tuning de votre environnement bash en éditant le fichier « /root/.bashrc » ou « /home/users/.bashrc »

PS1='${debian_chroot:+($debian_chroot)}\[3[01;31m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]$ '
export LS_OPTIONS='--color=auto'
alias ls='ls $LS_OPTIONS'
alias ll='ls -lh --color=auto'
alias lh='ls -lat | head'
alias df='df -h'
alias du='du -hs'
alias cd..="cd .."
alias c="clear"
alias sys="tail -n 20 -f /var/log/syslog|/usr/bin/lwatch -i-"
alias egrep="egrep -v '(^#|^$)'"
alias apt-all="apt-get update && apt-get upgrade && apt-get autoremove && apt-get autoclean && apt-get clean all"

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

Afficher l’adresses IP directement au prompt login de la machine en regénérant automatiquement le fichier « /etc/issue »

# systemctl edit getty@
[Service]
ExecStartPre=-/bin/bash -c '[ ! -f /etc/.issue.orig ] && cp /etc/issue /etc/.issue.orig; int=`ls /sys/class/net|grep enp|head -1`; sed -r "s/\\\n/[\\\4\{$$int\}]/" < /etc/.issue.orig > /etc/issue'

Redémarrer le service et rebooter la machine afin de voir le résultat :

# systemctl daemon-reload && systemctl restart getty@tty1

Après clone d’une VM il convient de faire une reset de la @MAC et de changer son hostname :

# hostnamectl set-hostname 'mamachine'

pour vérifier

# hostnamectl

Attention, les dépôts évoluent avec les années

# vi /etc/apt/sources.list
...
# Debian Jessie, dépôt principal
deb http://deb.debian.org/debian/ jessie main
# Debian Jessie, mises à jour de sécurité
deb http://security.debian.org/ jessie/updates main
...

Comprendre un système de type Active Directory : et les différents services associés (DNS, LDAP, Kerberos, NTP)

Historique de SaMBa

SaMBa est un logiciel interopérable1 qui intègre une dizaine de services et une douzaine de protocoles propriétaire dont le célèbre CIFS (système de fichier au travers de SMB) de Microsoft. SaMBa opère sur des ordinateurs tournant sous des systèmes d’exploitation différents comme Mac OS, Unix et ses dérivés de manière à partager des imprimantes et des fichiers au travers d’un réseau informatique.

SaMBa facilite les échanges entre systèmes d’exploitation hétérogènes Apple, Windows et Unix en offrant un service pour accéder aux ressources des serveurs Unix. Il peut également se substituer à des serveurs Windows dans le rôle de contrôleur de domaine. SaMBa est issue d’une réécriture par ingénierie inverse des protocoles SMB/CIFS sous GNU/Linux et consœurs.

SaMBa a été initialement développée par l’Australien Andrew Tridgell et distribuée sous licence libre GNU/GPL. Son nom provient du nom du protocole standard de Microsoft, SMB (Server Message Block), auquel a été ajoutée deux fois la voyelle « A » pour donner « SaMBa ».

À partir de la version 3, SaMBa fournit les services partages réseaux pour les répertoires (y compris tous les sous-répertoires) et d’impression pour divers clients. Il s’intègre à un domaine NT, soit en tant que contrôleur de domaine principal (PDC) ou en tant que membre d’un domaine. Il fonctionne sur la plupart des systèmes Unix, comme GNU/Linux, Solaris, AIX et les variantes BSD, y compris Apple, Mac OS X Server (qui a été ajoutée au client Mac OS X en version 10.2).

Le projet SaMBa4 a démarré en 2003 ; apporte la fonctionnalité supplémentaire d’un contrôleur de domaine Active Directory (Active Directory Domain Controller – AD DC) à travers une version modifiée de Kerberos et de LDAP. SaMBa4 prend en charge d’une manière transparente les domaines Active Directory en implémentant en natif les protocoles propriétaires tels que NTLM, DNS, LDAP, Kerberos et RPC.

Le 20 décembre 2007, dans le cadre d’un jugement antitrust, Microsoft l’éditeur de Windows signe un accord d’information technique2 avec pour obligation de publier la documentation des protocoles clés de l’OS Windows. La SaMBa Team profite de cette opportunité pour analyser les spécifications techniques d’AD et offrir SaMBa4 AD à la communauté.

Concepts techniques de SaMBa et Active Directory

LDAP

Au sein d’une structure (entreprise, université, …) , les services et les serveurs ont besoin des données pour l’authentification, des droits d’accès. Ces informations sont difficiles à maîtriser car très volatiles et éparses.

Les annuaires LDAP offrent une réponse à ce problème en proposant de centraliser les informations et, par le biais d’un protocole standardisé, d’y connecter des applications clientes.

Au commencement, l’Union Internationale des Télécommunications (UIT) créa les annuaires X.500. Ce concept novateur uniformise l’accès aux services, centralise les ressources et les protège. Le protocole utilisé pour y accéder était le protocole DAP (Directory Access Protocol). Or il est complexe à mettre en œuvre. L’Université du Michigan réfléchit alors à un moyen de pallier à ces problèmes, tout en reprenant les concepts. LDAP est né. Il devient un protocole natif et utilisable indépendamment de X.500. Début 1996 Netscape prend la tête d’une coalition pour promouvoir l’usage de LDAP.

Remarque : Le protocole LDAP est un protocole de la couche Application (7) du modèle OSI. Il est conçu pour fonctionner au-dessus de TCP, lui même au-dessus d’IP. Par conséquent, les communications avec un annuaire LDAP sont en mode connecté, et les paquets échangés ont une garantie d’intégrité.

LDAP est ainsi une version allégée du protocole DAP, d’où son nom de Lightweight Directory Access Protocol. Sa version actuelle est la version 3 et propose les évolutions suivantes :

  • L’utilisation de l’encodage UTF-8
  • L’authentification via Simple Authentication and Security Layer (SASL), et Transport Layer Security (TLS)
  • Le support des Referrals (une branche pointe vers un autre annuaire)
  • Le support d’Unicode (internationalisation)
  • La capacité d’étendre le protocole
  • Le support des schémas dans l’annuaire

Devenue pierre angulaire du SI (système d’information), l’annuaire d’entreprise se complexifie proposant de plus en plus de données et gérant de plus en plus de services d’infrastructure.

Un annuaire d’entreprise, c’est comme l’annuaire téléphonique mais pouvant gèrer plus de choses. Les caractéristiques de l’annuaire téléphonique pour mieux comprendre le concept sont les suivantes :

  • Il liste des données (nom, prénom, numéro de téléphone, adresse)
  • Il organise ces données (/département/villes/nom)
  • Il offre un moyen de consultation ( en ligne, appli smartphone, format papier)
  • Il peut protéger les données (liste rouge)
  • Il est plus consulté que mis à jour
  • Il est disponible de manière permanente

Vous allez me dire qu’il est tout à fait possible de stocker ces données dans une base de données !

  1. On lit plus souvent un annuaire qu’on ne le met à jour. Contrairement à un SGBD, un annuaire n’est pas fait pour stocker des informations constamment en mouvement. Il est logique de le structurer différemment et d’organiser les données de manière arborescente (sur un SGBD, la structuration est relationnelle).
  2. Un annuaire fournit une méthode de consultation standardisée. Le SQL est, certes, standardisé, mais chaque SGBD (Oracle, SQLServer, MySQL, PostgreSQL …) a sa propre couche de connexion et ses propres fonctions.
  3. La norme LDAP définit le modèle de données, alors qu’un SGBD varie ( quoi, où et comment). Avec les schémas, un annuaire fournit des modèles de données officialisés , ce qui permet d’être interopérable.
Principes et concepts

Un serveur LDAP agit en tant qu’intermédiaire entre une source de données et un client. Le client ne verra, ni ne connaîtra l’existence du stockage des données. En effet elles peuvent être dans un fichier plat ou dans une base de données. De plus, découpler les messages du stockage permet d’avoir plusieurs serveurs et un même système de stockage.

serveur LDAP1

LDAP est asynchrone, c’est-à-dire que si le client émet plusieurs requêtes successivement, elles peuvent arriver dans un ordre différent.
protocole asynchrone

Les modèles LDAP représentent les services que propose le serveur au client. Bien que la RFC 2251 sépare l’annuaire LDAP en 2 composants : le modèle de données et le modèle de protocole, définissons le en 4 comme Timothy A. Howes, Mark C. Smith, et Gordon S. Good dans leur livre Understanding and Deploying LDAP Directory Services :

  • Le modèle de nommage définit comment l’information est stockée et organisée
  • Le modèle fonctionnel définit les services fournis par l’annuaire (recherche, ajout, …)
  • Le modèle d’information définit le type d’informations stockées
  • Le modèle de sécurité définit les droits d’accès aux ressources

Un annuaire est un arbre d’entrées, il y a une représentation hiérarchique des données et par conséquence, toutes les informations découlent d’une seule et même « racine ».

Dans l’arborescence LDAP suivante, notre entité formation, a 2 utilisateurs et 2 groupes.

arborescence10

Cette arborescence est liée au nommage de chaque élément. Un élément marque son appartenance à l’élément supérieur en reprenant le nom, qu’il complète par le sien.

Par exemple, si on prend cn=info,ou=groups,dc=formation,dc=fr, on a info > groups > formation.fr.

La racine choisie ici est composée du nom du domaine où est hébergé notre serveur LDAP, formation.fr, décomposé en « dc » (Domain Components) pour obtenir « dc=formation,dc=fr ». L’arbre se découpe ensuite en deux « ou » (Organisational Units) qui constituent deux branches : « users » et « groups », dans lesquels nous trouvons ensuite les entrées feuilles de notre arbre, les utilisateurs et les groupes. Chacune des entrées de notre arbre correspond à un type de donnée particulier, défini par une classe d’objet.

Chaque élément est appelé une entrée (an entry). Une entrée peut être une branche (a node) ou un élément terminal (a leaf). Chaque élément possède un DN (Distinguished Name). Le DN est le nom complet de l’élément qui permet de le positionner dans l’arborescence. Il est unique dans l’annuaire : cn=info,ou=groups,dc=formation,dc=fr.

Chaque élément possède également un RDN (Relative Distinguished Name). Le RDN est la partie du DN de l’élément qui est relative au DN supérieur. Le RDN d’un élément ne permet pas de l’identifier de manière unique dans l’annuaire : cn=info.

La racine est l’élément supérieur de tous les autres, c’est la base de l’arborescence : dc=formation,dc=fr.

Une entrée est constituée d’un ensemble d’attributs. Un attribut possède un nom, un type et une ou plusieurs valeurs. Les attributs sont définis dans des schémas et est l’une des caractéristiques de cet élément. Dans notre exemple, l’arbre se découpe ensuite en deux « ou » (Organisational Units) qui constituent deux branchements : « users » et « groups », dans lesquels nous trouvons ensuite les entrées : les utilisateurs et les groupes.

Important : La RFC 2253 normalise l’écriture des DN et conseille de ne pas ajouter d’espaces autour du signe =, ni à la fin du DN. Les espaces sont autorisés par contre pour les valeurs des entrées.

Modèle fonctionnel

La base :

La base est le DN à partir duquel nous effectuons une recherche. Par exemple dc=formation,dc=fr effectuerait une recherche sur tout l’arbre, puisqu’il s’agit de la racine. Le scope est le nombre de niveaux sur lesquels l’action va être effectuée. Il existe 3 niveaux différents :

La portée :

  1. sub : l’action est effectuée de manière recursive à partir de la base spécifiée sur toute l’arborescence.
  2. one : l’action est effectuée sur les fils directs, c’est-à-dire un seul niveau inférieur par rapport à la base spécifiée. Pour notre arbre, au niveau le plus haut « dc=formation,dc=fr », on aurait pour la portée ONE « ou=users,dc=formation,dc=fr » et « ou=groups,dc=formation,dc=fr ».
  3. base : l’action est effectuée uniquement sur la base spécifiée. Une recherche sur « dc=formation,dc=fr » avec la portée BASE renverrait cette entrée uniquement.

Les filtres :

Un filtre permet d’avoir des critères sur la recherche. Il est constitué d’un ensemble d’opérations, portant sur des attributs, combinées avec les opérateurs booléens classiques: ET, OU et NON. La syntaxe est : attribut OPERATEUR valeur La forme générale d’un filtre est une combinaison : (operator(search operation)(search operation)…)). Les opérateurs de recherche peuvent être combinés.

Égalité :=
Approximation ~=
Supérieur ou égal >=
Inférieur ou égal <=

Une opération doit obligatoirement se trouver entre deux parenthèses. Les valeurs qui sont dans la partie droite d’une opération élémentaire ne sont pas entre quote, mais certains caractères doivent être échappés avec des parenthèses ( ) pour les tests plus complexes. Pour ces tests, on utilisera les opérateurs suivants :

L’intersection (et) :
L’union (ou) |
La négation (non) !
  • Combiner plusieurs éléments :
(&(objectClass=person)(|(givenName=Jerome)(mail=jcolom*)))
  • Toutes les personnes ayant un numéro de téléphone renseigné :
&(&(objectclass=person)(telephoneNumber=*))
Les opérations

Le client donne à chaque requête un identifiant (Message ID). Le serveur y répond avec le même identifiant, en incluant un code indiquant l’état (succès, échec, …). La réponse inclut également les données éventuelles qui peuvent résulter d’une recherche. Il inclut aussi un code ID.

LDAP fournit des fonctions pour interagir avec les données :

Opération Description
Abandon Abandonne l’opération précédemment envoyées au serveur
Add Ajoute une entrée au répertoire
Bind Initie une nouvelle session sur le serveur LDAP
Compare Compare les entrées d’un répertoire selon des critères
Delete Supprime une entrée d’un répertoire
Extended Effectue des opérations étendues
Modify Modifie une entrée
Modify DN Déplace ou renomme une entrée
Rename Modifie le nom d’une entrée
Search Recherche des entrées d’un répertoire
Unbind Termine une session sur le serveur LDAP

add

Les opérations de mise à jour prennent en argument le DN de l’entrée à mettre à jour et la liste des attributs à modifier ainsi que la modification à apporter.

dn: <distinguished name>
changetype: add
objectclass: top
objectclass: <objectclassvalue>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>

La modification de DN (déplacement/renommage) prend en argument le RDN de l’entrée et le DN du nouveau parent, ainsi qu’un indicateur de suppression de l’ancien RDN.

Il existe certaines commandes d’administration qui permettent d’insérer dans un annuaire des objets décrits dans un fichier LDIF, sans qu’il soit nécessaire que ce fichier LDIF contienne la commande d’insertion ci-dessus.

delete

dn: <distinguished name>
changetype: delete

L’objet ne peut pas être effacé que s’il n’a pas de descendants.

Ajout de valeurs à un attribut

dn: <distinguished name>
changetype: modify
add: <attribut>
<attribut>: <attrvalue>
<attribut>: <attrvalue2>

On peut ainsi donner à l’attribut autant de valeurs que l’on souhaite. Les attributs précédents de l’objet ne sont pas effacés.

Suppression de valeurs à un attribut

Si l’on souhaite effacer uniquement certaines valeurs, il faut passer en paramètres ces valeurs :

dn: <distinguished name>
changetype: modify
delete: attribut
<attribut>: <1ere valeur à effacer>
<attribut>: <2eme valeur à effacer>

Si l’on souhaite effacer toutes les valeurs d’un attribut :

dn: <distinguished name>
changetype: modify
delete: attribut

Remplacer les valeurs d’un attribut

Similaire au deux cas précédents, les paramètres contiennent cette fois les valeurs qui remplacent les valeurs précédentes.

dn: <distinguished name>
changetype: modify
replace: attribut
<attribut>: <nouvelle valeur 1>
<attribut>: <nouvelle valeur 2>

Modification du DN et/ou du RDN

La syntaxe pour modifier le DN d’une entrée, soit modifier sa position dans l’arbre, ou pour modifier son RDN, soit modifier son identifiant, sont similaires.

dn: <distinguished name>
changetype: moddn
newrdn: <nouveau RDN>
deleteoldrdn: <1 ou 0>
newsuperior: <nouveau parent>

deleteoldrdn indique si l’on souhaite ou non conserver l’ancienne entrée.

Pour modifier un RDN, on ne mettra pas l’attribut newsuperior.

Modèle d’information

L’arborescence d’informations (DIT)
LDAP présente les informations sous forme d’une arborescence d’informations hiérarchique appelée DIT (Directory Information Tree).

  • L’entrée est l’unité de base d’un annuaire (DSE, Directory Service Entry). Elle correspond à une branche de l’arborescence.
  • Chaque entrée correspond à un objet appelé objectClass, par exemple une personne, un objet matériel, des paramètres, …
  • L’objectClass est constituée d’un ensemble de paires clés/valeurs appelées attributs obligatoires ou facultatifs.
  • Les types d’attributs sont des règles de codage et de correspondance, qui détermine les types données et les comparaisons à appliquer lors d’une recherche.
  • Le schéma c’est l’ensemble des définitions d’objets et d’attributs qu’un serveur LDAP peut gérer. Cela permet de définir si un attribut peut avoir une ou plusieurs valeurs et/ou de les regrouper par objet (objectclass) pour définir s’ils sont obligatoires ou pas.

Les attributs
Une entrée peut avoir un ou plusieurs attributs. Il est séparé de sa valeur par « : » et peut avoir plusieurs valeurs. Il est alors sur plusieurs lignes avec des valeurs différentes.

dn: cn:Jerome COLOMBET,ou=users,dc=formation,dc=fr
objectClass: person
cn: Jerome
sn: COLOMBET
department: info
[...]
telephoneNumber: +33 5 00 01 02 03
telephoneNumber: +33 6 01 02 03 04
[...]

Chaque entrée est constituée d’un ensemble d’attributs. Il existe deux types d’attributs :

  • Les attributs normaux : ceux-ci sont les attributs habituels (nom, prénom, …) caractérisant l’objet
  • Les attributs opérationnels : ceux-ci sont des attributs auxquels seul le serveur peut accéder afin de manipuler les données de l’annuaire (dates de modification, …)

Les classes d’objets
L’objectClass est un regroupement d’attributs qui définit une entrée, comme une classe en POO(Programmation orientée objet) a des propriétés qui représentent l’objet. Ces attributs sont obligatoires ou facultatifs. objectClass est lui-même un attribut obligatoire d’une entrée, qui peut avoir un ou plusieurs objectClass. Ces classes d’objet définissent la présence de tous les attributs d’une entrée.

dn: cn:Jean-christian Ranu,ou=users,dc=cogip,dc=fr
objectClass: person

objectClass: posixAccount

Le caractère obligatoire ou facultatif des attributs, ainsi que le type de classe, sont définis dans les schémas.

Il existe 3 types de classe d’objet.

  • Structurelle : représente un objet réel, tel que personne, domaine ou entité… Chaque entrée doit avoir au moins 1 classe d’objet structurelle dans l’attribut objectClass.
  • Auxiliaire : sert à compléter les informations d’une classe structurelle. Elle ne peut pas être employé seule.
  • Abstraite : comme en POO, elle ne peut être qu’étendue par une autre classe d’objet, et ne peut pas être utilisée directement.

Les schémas

De le même façon que les objectClass regroupe les attributs, les schéma listent tous les objectClass disponibles. Un annuaire peut avoir plusieurs schémas (chargés au démarrage de LDAP).

Les schémas définissent aussi la correspondance, la syntaxe et les types d’attributs. Il est également possible d’ajouter son propre schéma, et donc de nouveaux objets.

Important : En cas de doute sur le type, le nom ou la syntaxe d’un attribut, n’hésitez pas à consulter le schéma. Si vous voulez créer un nouveau schéma, vérifiez qu’il n’existe pas déjà. Il se peut qu’il suffise d’étendre un objectClass existant, et de créer seulement un ou plusieurs attributs supplémentaires.

Chaque type d’attribut doit être identifié par un OID :

attributetype ( 2.5.4.20 NAME 'telephoneNumber'
DESC 'An integer uniquely identifying a user in a domain'
EQUALITY telephoneNumberMatch
SUBSTR telephoneNumberSubstringMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.50 )

L’OID de telephoneNumber est 2.5.4.20. La valeur est évaluée avec telephoneNumberMatch, et doit contenir ce que spécifié dans telephoneNumberSubstringMatch. 1.3.6.1.4.1.1466.115.121.1.50 correspond à la syntaxe du n° de téléphone, exemple: +1 234 567 8901.

Comme les attributs, l’objectClass est toujours identifié par un OID.

( 2.5.6.6 NAME 'person'
 SUP top
 STRUCTURAL
 MUST ( sn $ cn )
 MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )

La classe person étend la classe top et est une classe structurelle, c’est-à-dire qu’elle représente un objet réel. Les attributs sn et cn sont obligatoires; Les autres userPassword, telephoneNumber, seeAlso, description sont facultatifs.

Le format LDIF

Pour importer/exporter les données ainsi que la configuration du serveur, un format a été défini (RFC 2849) : LDIF (LDAP Data Interchange Format).

Prenons l’exemple suivant pour faire une entrée dans un fichier LDIF pour import.

dn: uid=colombet,ou=users,dc=formation,dc=fr
objectClass: top,person,organizationalPerson,posixAccount,shadowAccount,inetOrgPerson,sambaSamAccount
cn: colombet
sn: colombet
uid: colombet
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/colombet
loginShell: /bin/bash
gecos: System User
givenName: colombet
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: colombet
sambaSID: S-1-5-21-974850198-1505400730-1293609509-3000
sambaPrimaryGroupSID: S-1-5-21-974850198-1505400730-1293609509-513
sambaLogonScript: logon.bat
sambaPwdMustChange: 1536311362
sambaPwdLastSet: 1532423362
sambaNTPassword: 92937945B518814341DE3F726500D4FF
sambaLMPassword: 727E3576618FA1754A3B108F3FA6CB6D
sambaAcctFlags: [U]
userPassword: {SSHA}iCSo/PYs7avk0YhOuWuZZmiiAEdLVkRT
shadowLastChange: 17736
shadowMax: 45
Conclusion

LDAP, du fait de sa standardisation, permet au annuaires d’entités d’être interopérables. Ils sont simples, fiables, pérennes et centralisent l’information au sein d’une entreprise : Identifiant/mot de passe, comptes POSIX, utilisateur…

Références

OpenLDAP : l’annuaire LDAP open-source de référence
Active Directory : est une mise en œuvre d’un service d’annuaire LDAP par Microsoft

LDAP Browser/Editor : client java multiplateforme
phpLDAPadmin : client web développé en PHP

cf : https://openclassrooms.com/fr/courses/2257706-presentation-du-concept-dannuaire-ldap/2260116-quest-ce-quun-annuaire

DNS

Le DNS (Domain Name System) est le protocole indispensable au fonctionnement d’Internet. Pas d’un point de vue technique, mais d’un point de vue pratique. Il est inconcevable aujourd’hui d’utiliser des adresses IP en lieu et place des noms des sites web pour naviguer sur Internet.

Le système DNS se charge de convertir (on parle de résolution) le nom du site web demandé en adresse IP.

Un nom de domaine se décompose en plusieurs parties. Prenons l’exemple de www.formation.fr :

Chaque partie est séparée par un point. On trouve l’extension en premier (en premier, mais en partant de la droite) ; on parle de Top Level Domain (TLD). Il existe des TLD nationaux (fr, it, de, es, etc.) et les TLD génériques (com, org, net, biz, etc.).

Il existe une infinité de possibilités pour la deuxième partie. Cela correspond à tous les sites qui existent : formation.fr, etc.
Comme vous le voyez, formation.fr est un sous-domaine de fr. Le domaine fr englobe tous les sous-domaines finissant par fr.

La troisième partie est exactement comme la seconde. On y retrouve généralement le fameux « www », ce qui nous donne des noms de domaine comme www.formation.fr. www peut soit être un sous-domaine de formation.fr, mais dans ce cas il pourrait y avoir encore des machines ou des sous-domaines à ce domaine, soit être directement le nom d’une machine.

Ici, www est le nom d’une machine dans le domaine formation.fr.

On peut bien entendu ajouter autant de troisièmes parties que nécessaire, ce qui peut vous conduire à avoir un nom de domaine comme : www.fr.1.new.super.formation.fr.

Voici une toute petite partie de l’arborescence des noms Internet :

417424

Chaque « partie » est appelée label et l’ensemble des labels constitue un FQDN : Fully Qualified Domain Name. Ce FQDN est unique. Par convention, un FQDN se finit par un point, car au-dessus des TLD il y a la racine du DNS, tout en haut de l’arbre. Ce point disparaît lorsque vous utilisez les noms de domaine avec votre navigateur.

Remarque : Au niveau DNS, www.formation.fr n’est pas un FQDN, car il manque le point à la fin. Tout FQDN sur Internet doit obligatoirement se finir par un point, comme www.formation.fr. qui est alors bien un FQDN, car on est sûr qu’il n’y a pas de domaine au-dessus.

NTLM ou Kerberos

Deux principaux mécanismes d’authentification existent sous Windows NTLM et Kerberos. De par leur conception, ces deux mécanismes sont sensiblement différents et ne sont pas exposés aux mêmes problématiques.

LM, NTLM, NETNTLMV1, NETNTLMV2

Le NTLM (NT Lan Manager) est une méthode d’authentification utilisée dans un réseau Microsoft Active Directory propriétaire Microsoft.

Au cours de la dernière décennie, les termes utilises pour décrire les concepts de relais NTLM ont suscite de nombreuses confusions. En effet, des termes très proches ont souvent été utilisés afin de faire allusion a des concepts différents. Afin de partir sur de bonnes bases et d’éviter tout malentendu, ce chapitre tentera de décrire les différents termes nécessaires a la bonne comprehension du concept de relais NTLM.

Algorithmes de stockage des mots de passe

  • LM Hash (condensat LM alias Lan Manager Hash) : format de stockage des mots de passe utilise sur les anciens systèmes Windows (anterieurs a Windows NT 4). ll est également present sur les nouveaux systèmes Windows afin d‘assurer la retrocompatibilité, mais est désactivé par défaut depuis Windows Vista, car son niveau de sécurité est considéré comme très faible aujourd’hui [1]. ll est préférable d’utiliser le format NT Hash.
  • NT Hash (communément appelé NTLM) : format de stockage des mots de passe utilise sur les systèmes Windows modernes. Bien que vulnerable a certaines attaques, il est beaucoup plus robuste que son prédécesseur.
    1. Ces condensats peuvent être présents :
    * dans la base SAM (Security Accounts Manager) pour le stockage des comptes locaux ;
    * dans la base ntds.dit de l’Active Directory pour le stockage des comptes de domaine ;
    * dans la mémoire du processus 1sass.exe (Local Security Authority Server Service) d’une machine sur laquelle une ou plusieurs authentifications ont été réalisées.
    2. Une fois en possession de ces condensats, il est possible de :
    * realiser des attaques par dictionnaire ou force brute afin de tenter de retrouver les mots de passe en clair ;
    * d’effectuer des attaques de type pass-the-hash.

Microsoft a conçu différents protocoles d’authentification NTLM au travers des années. Ils permettent d’authentifier les ressources a travers le réseau. ll s’agit de protocoles dits de type « défi-réponse ». (challenge/response) :

  • LM (alias LAN Manager ou LANMAN) : le protocole LM utilise le condensat LM comme secret de l’algorithme de chiffrement DES afin de calculer la réponse d‘un client a un défi (challenge) transmis par un serveur. ll est totalement déconseillé d’utiliser ce protocole aujourd’hui en raison de la faiblesse du condensat LM et de l’utilisation de l’algorithme DES.

  • NTLMv1 (alias NetNTLMv1) : le protocole NetNTLMv1 est similaire au protocole LM sauf que le secret utilise est a présent le condensat NTLM d‘un utilisateur. ll est déconseillé d’utiliser ce protocole aujourd’hui, car il est facile de mener des attaques afin de retrouver le mot de passe d‘un utilisateur.

  • NTLMv2 (alias NetNTLMv2) : il s’agit de la version la plus récente et la plus robuste du protocole NTLM. ll corrige certaines faiblesses du protocole NTLMv1 et remplace notamment l’algorithme de chiffrement DES par un HMAC-DES. L’établissement des protocoles LM, NetNTLMv1 et NetNTLMv2 est réalisé grace au protocole NTLMSSP (NTLM Security Support Provider). Voici les trois étapes nécessaires au processus d’authentification

    1. NTLMSSP NEGOTIATE : la premiere étape consiste a négocier le protocole qui sera utilisé. Pour cela, le client transmet au serveur une demande d’authentification en précisant les versions du protocole NTLM acceptées.
    2. NTLMSSP CHALLENGE : le serveur répond au client en précisant les versions NTLM acceptées. Cette réponse contient également un « « challenge » a résoudre.
    3. NTLMSSP AUTH : le client résout le challenge et le transmet au serveur (accompagné de diverses informations telles que le login, le domaine associé si applicable, etc.).

2019-10-19 13.36.05

  • étape 1 : Lors de la demande d’authentification, le client transmet au serveur le nom de l’utilisateur.
  • étape 2 : Le serveur lui transmet alors un challenge qui est composé de 16 octets aléatoires
  • étape 3 : Le client chiffre ensuite ce challenge avec le condensat du mot de passe de l’utilisateur et le retourne au serveur. Dans le cas d’une authentification locale, sur une machine ou un contrôleur de domaine, le serveur effectue l’a même operation avec les condensats presents dans la base SAM ou ntds . dit et indique au client un échec ou un succès (ouverture de session).
  • étape 4 : S’il s’agit en revanche d’une authentification avec un compte de domaine, le serveur transmettra alors au contrôleur de domaine des informations permettant de valider l’authentification telles que le nom d’utilisateur, le challenge envoyé au client, la réponse du client.
  • étape 5 : Le contrôleur de domaine indique le résultat de l’authentification.

L’authentification NTLM est supportée par de nombreux protocoles comme SMB, LDAP, HTTP(S), IMAP, SMTP, ou encore MS-SQL. Pour cela, l’authentification NTLM est encapsulé au sein du protocole concerné. La capture d’un challenge (LM, NTLMv1, NTLMv2) sur un réseau peut permettre d’effectuer des attaques par dictionnaire ou force brute afin de retrouver les mots de passe en clair, mais également d’effectuer du relai NTLM.

Remarque : Pour se prémunir de ces attaques, des stratégies de groupe (GPO / Group Policy Object) sont déployées sur les postes et serveurs afin d’interdire la négociation de protocoles faibles. Par exemple, via la GPO suivante : Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options -> Network security: LAN Manager authentication level = « Send NTLMv2 response only and refuse LM & NTLM ».

Quelques commandes utilisant le NTLM :

# wbinfo -t : Vérifie la bonne jonction au domaine
# wbinfo -u : Remonte les utilisateurs du domaine
# wbinfo -g : Remonte les groupes du domaine
# wbinfo --trusted-domains : Remonte les serveurs avec les relations d'approbation
# /usr/bin/ntlm_auth --helper-protocol=helper

Les codes retours sont simples :

OK, lorsque le couple login/mdp est valide.
ERR, lorsque le couple login/mdp n'est pas valide.

cf : https://blog.netxp.fr/fonctionnement-ntlm-comprendre-vols-identifiants-et-de-condensats-mot-de-passe-utilisateurs-par-simple-hameconnage/

cf : Extrait Misc Hors-Serie n°20 (p51,p52 et p53)

Kerberos

Kerberos est un protocole d’authentification issu du projet « Athena » du MIT (Massachusetts Institute of Technology). Le nom « Kerberos » vient de la mythologie grecque et désigne le nom du chien à trois têtes gardien des portes d’Hadès. Il est chargé d’authentifier, d’autoriser et de surveiller les utilisateurs voulant accéder aux ressources et services d’un réseau informatique. Le protocole Kerberos a été normalisé dans sa version 5 par l’IETF dans les RFC 1510 (en septembre 1993) et RFC 1964 (juin 1996).

Kerberos se base sur une tierce partie de confiance pour gérer l’authentification, le KDC (Key Distribution Center). Tous les utilisateurs et services du réseau font confiance à cette tierce partie. Pour réaliser la sécurité de l’authentification, Kerberos utilise un mécanisme de chiffrement basé sur des algorithmes à clef symétrique. Tout objets connectés au réseau dispose d’une clé secrète partagée avec le KDC.

Kerberos utilise un système de ticket pour réaliser l’authentification et introduit le principe de SSO (Single Sign On). L’utilisateur s’authentifie sur le KDC puis utilise un ticket pour s’authentifier sur chaque service demandé. L’utilisateur ne transmet jamais son mot de passe au service.

Le protocole Kerberos sépare le rôle du KDC en deux services :

  • AS (Authentication Service) : Service sur lequel l’utilisateur s’authentifie. Il délivre un TGT (Ticket Granting Ticket) en cas d’authentification réussie. Ce ticket est en fait une demande d’accès au TGS.
  • TGS (Ticket Granting Service) : Service fournissant les tickets d’accès aux différents services du réseau. On les appelle TS (Ticket Service).

En résumé, l’utilisateur s’authentifie auprès du service d’authentification (le vigile). Celui-ci lui donne un ticket d’accès prouvant qu’il s’est authentifié (un badge). L’utilisateur se rend auprès du service de gestion des tickets. Il demande un accès au service de fichiers par exemple. Grâce au badge donné par le vigile le service de ticket sait que l’utilisateur est bien authentifié. Il va donc lui remettre un ticket d’accès au service de fichier. L’utilisateur peut maintenant aller voir le service de fichier avec son ticket. Le service lui donnera accès aux ressources correspondantes à ses autorisations.

Fonctionnement détaillé de Kerberos

Notation

AS: Service d’authentification.
TGS: Service délivrant des tickets d’accès aux services.
TGT: Ticket d’accès au TGS.
TS: Ticket d’accès au service demandé.
Kutilisateur: Clé secrète de l’utilisateur, connu de l’utilisateur et du TGS.
Kservice: Clé secrète du service demandé, connu du service et du TGS.
Ktgs : Clé secrète du TGS connu du TGS et de l’AS.
KsessionTGS : Clé de session entre l’utilisateur et le TGS.
Ksession: Clé secrète de session entre l’utilisateur et le service demandé.
TicketService : Ticket d’accès au service demandé.

Schema_kerberos_1_article_devensys

Fonctionnement : L’utilisateur s’authentifie en entrant un couple login/password (généralement à l’ouverture de session sur la machine). Le client kerberos de la machine dérive à l’aide d’un algorithme de hash le mot de passe de l’utilisateur en clé secrète Kutilisateur. Le client kerberos va maintenant contacter l’AS pour authentifier l’utilisateur. Il envoie pour cela à l’AS l’identité de l’utilisateur (en clair) ainsi que Kutilisateur {message authentifiant définie dans le protocole kerberos, timestamp}. L’utilisateur n’aura pas à renouveler son authentification durant plusieurs heures. Le mot de passe n’est pas transmis à travers le réseau. Il sert uniquement à générer Kutilisateur. De même, Kutilisateur servira à chiffrer une partie du message et ne sera jamais transmise à travers le réseau. Il n’y a donc pas de possibilité d’interception. Seule une compromission de la machine cliente ou un brute force peut permettre à une personne malveillante de récupérer ces informations.

Schema_kerberos_2_article_devensys

Fonctionnement : L’AS lit l’identité de l’utilisateur (envoyé en clair). L’AS connait le mot de passe de l’utilisateur, car c’est lui qui gère la base de données utilisateur. Il peut donc obtenir Kutilisateur. Grâce à Kutilisateur il va déchiffrer le message authentifiant envoyé par l’utilisateur. Si une fois celui-ci déchiffré il correspond, c’est qu’il a bien été chiffré avec Kutilisateur. L’AS vérifie ensuite le timestamp pour éviter tout rejeu de l’authentification. L’AS retourne maintenant au client Kutilisateur {TGT, KsessionTGS}. C’est-à-dire un Ticket TGT et une clé de session entre l’utilisateur et le TGS, le tout chiffré par la clé secrète de l’utilisateur pour que personne n’ait accès à ces informations. Kutilisateur n’est connu que du serveur et du client et n’a jamais été communiqué à travers le réseau. Cette communication ne peut donc être lue par aucune tierce partie malveillante.

Schema_kerberos_3_article_devensys

Fonctionnement : L’utilisateur déchiffre la réponse de l’AS. Il récupère le TGT et la clé de session pour communiquer avec le TGS. Le TGT est un ticket contenant trois éléments chiffrés avec Ktgs : une date d’expiration, le nom de l’utilisateur et KsessionTGS. Donc TGT = Ktgs {date d’expiration, nom d’utilisateur, KsessionTGS}. L’utilisateur envoie au TGS : le TGT, un KsessionTGS {timestamp} (permet d’assurer l’unicité de la requête, antirejeu) ainsi que le service auquel il souhaite accéder. Cet envoi correspond à une demande d’accès à un service donné. Le TGT n’est pas lisible par l’utilisateur puisqu’il est chiffré avec la clé secrète Ktgs connue uniquement de l’AS et du TGS.

Schema_kerberos_4_article_devensys

Fonctionnement :Grâce au TGT, le TGS connait l’identité du sujet et la clé de session à utiliser pour chiffrer la communication avec l’utilisateur. Il vérifie grâce à KsessionTGS la valeur du timestamp (permet d’éviter le rejeu et de signer en quelque sorte la requête de l’utilisateur). En fonction des droits du sujet, il va accepter ou refuser la demande d’accès au service. Dans le cas où le sujet possède les droits d’accès au service, le TGS va lui envoyer KsessionTGS {timestamp, Ksession, service à joindre, TicketService}. Le TicketService est un ticket à transmettre au service pour assurer la connexion avec celui-ci. TicketService = Kservice {Ksession, identité sujet, date d’expiration}. KsessionTGS a été transmise au TGS via le TGT, donc de manière sécurisée. Ainsi, seuls le TGS, l’utilisateur et l’AS(fournis Ksession) connaissent la clé. Cette communication ne pourra toujours pas être lue par une personne externe au procédé.

Schema_kerberos_5_article_devensys

Fonctionnement :Le sujet déchiffre la réponse du TGS. Il transmet ensuite TicketService au service pour initialiser la connexion. TicketService = Kservice {Ksession, identité sujet, date d’expiration}. TicketService est chiffré avec Kservice une clé secrète connue uniquement du service et du TGS. L’utilisateur ne peut donc pas lire ou modifier son contenue.

Schema_kerberos_6_article_devensys

Fonctionnement :Le service déchiffre TicketService et récupère Ksession. Il renvoie Ksession {timestamp}.

Schema_kerberos_7_article_devensys

Fonctionnement :Le sujet déchiffre le timestamp, vérifie que le temps écoulé entre l’envoi et la réception de la réponse n’est pas trop long. Ksession {timestamp}. L’utilisation de timestamp permet de s’assurer que les parties connaissent la clé et d’éviter qu’une personne mal intentionnée rejoue une séquence d’accès intercepté.

*cf : Merci au blog devensys détaillant le fonctionnement de Kerberos :

WINBIND

Winbind permet à une machine linux où se situe SaMBa de faire un lien entre elle et un contrôleur Active directory. Les comptes créés sur le contrôleur seront efficace immédiatement sur la machine linux sans aucune autre intervention. Winbind est le composant effectuant le mapping entre les UID linux et les SID Windows.

DFS

L’acronyme DFS signifie Distributed File System pour système de fichiers distribués. Ce système de fichier hiérarchisé permet de structurer les fichiers partagés sur différents serveurs du réseau de façon logique. Il permet de référencer un ensemble de partages qu’il faudra rendre accessibles de manière uniforme puis, de centraliser l’ensemble des espaces disponibles sur cet ensemble de partages.

Avec le DFS, l’utilisateur final ne visualise pas le nom du serveur sur lequel il accède pour lire les données, cela est totalement transparent. L’avantage c’est que si le serveur vient à changer à cause d’une panne ou pour cause d’évolution, le chemin d’accès restera le même.

Derrière un même chemin d’accès DFS peuvent se cacher plusieurs serveurs, contenant les mêmes données avec une synchronisation entre ces serveurs grâce à DFS-R (DFS Replication). Cette approche est très intéressante pour de la haute disponibilité de données et de la répartition de charge.

Sachez que le DFS étant de plus en plus présent, désormais il est même utilisé pour la réplication SYSVOL sur un domaine Microsoft entre les contrôleurs de domaine.

Racine, dossier et cible

Lorsque l’on parle de DFS, il y a 3 termes importants à retenir : La racine DFS, le dossier et la cible.

dfs1-w400

  • La racine DFS est le point d’entrée principal du système DFS. Elle contient le chemin d’accès aux différentes liaisons DFS qui lui sont associées.

  • Le dossier sera le nom du partage affiché côté client et dans la configuration du serveur, une liaison sera effectuée entre le dossier DFS et la cible DFS afin de faire un lien entre les deux éléments. Les dossiers sont également appelés « Liaison DFS ».

  • La cible sera le serveur sur lequel sont situées les données, elle représente le chemin d’accès vers le dossier partagé situé sur ce serveur.

Avantages
  1. Simplifier l’administration : Si une cible DFS tombe c’est transparent pour l’utilisateur, la liaison DFS peut être déplacée vers un autre serveur contenant une copie des données en changeant le dossier cible sur le serveur DFS.
  2. Un nom unique permet d’accéder à toutes les ressources, il n’est pas nécessaire de mapper une lettre sur chaque ressource
  3. Équilibrage de charge et tolérance aux pannes (si plusieurs cibles par dossier DFS)

cf : Merci à it-connect détaillant le fonctionnement de DFS.

Installer et configurer SaMBa ; des outils d’administration natifs aux outils d’administration de serveur distant (RSAT)

A travers le TP suivant nous allons voir deux méthodes pour administrer un serveur SaMBa. La première se fera via CLI.

L’ancêtre couple OpenLDAP/SaMBaPDC TP n°1

La mise en place d’OpenLDAP et SaMBa ont déjà fait ses preuves. L’architecture est évolutive : l’intégration de services nécessitant une base de données d’authentification est optimisé grâce aux standards employés par les technologies. La gestion fine d’un intranet/extranet est par exemple supporté.

OpenLdap offre une grande sécurité avec le chiffrement des connexions et une tolérance de panne avec la réplication. Un des grand avantage d’OpenLDAP est sont interopérabilité entre les différent système, il cohabite très facilement avec une architecture windows comme Mac OSX.

L’avantage d’utiliser des technologies ouvertes permet de bénéficier du support technique offert par la communauté du logiciel libre. Plusieurs sociétés de service proposent un support technique professionnel.

Installation d’un service d’annuaire (OpenLDAP) et des schemas SaMBa

Procéder à l’installation du serveur contrôleur de domaine nommé « dc1old » en Debian Wheezy 7.11 depuis le logiciel Virtualbox en suivant pas à pas les captures suivantes :

Nommer la machine « dc1old » et choisissez le type « linux » et la version « debian x64 » :
dc1_01-w400

En fonction de votre machine de TP, allouer la mémoire adéquat, ici « 1Go » :

Remarque : Pour un serveur en production 4Go sont recommandés

dc1_02-w400

Créer un disque virtuel :
dc1_03-w400

Au format « vmdk », pour une meilleur compatibilité avec un cluster Proxmox2 par exemple :
dc1_04-w400

En sélectionnant « Dynamiquement alloué » votre image grossira en fonction du remplissage de la VM :
dc1_05-w400

Nommer le disque avec le même nom que votre VM , ici « dc1 » :
dc1_06-w400

Sélectionner le « lecteur optique » et le « disque dur » en ordre d’amorcage avec le chipset « ich9 » :
dc1_07-w400

Dans l’onglet « stockage », ajouter l’ISO debian jessie au lecteur de CD :
dc1_08-w400
Dans les pré-requis, vous avez dû créer un réseau privé en NAT :
2019-09-26 10.38.25-w400

Lancer la VM et choisir l’installation par défaut (mode texte)

Privilégier la langue de shakespeare pour éviter les mauvaises traductions ou les problèmes d’accentuation dans vos consoles distantes :
dc1_11-w400

Pour la localisation choisir « other » dans le premier menu :
dc1_12-w400

Ensuite « Europe » :
dc1_13-w400

Et enfin « France » :
dc1_14-w400

On reste en « en_US.UTF-8 » :
dc1_15-w400

Avec un clavier « French » :
dc1_16-w400

Attendre …
dc1_17-w400

Sélectionner la seconde interface réseau en mode « NAT » pour débuter l’installation via internet :
dc1_18-w400

Nommer votre machine « dc1old » :
dc1_19-w400

Le nom de domaine pour la formation sera « formation.fr » :
dc1_20-w400

Renseigner le mot de passe root ici « Pa$$w0rd » :
dc1_21-w400

Création de l’utilisateur « asr » :
dc1_22-w400

avec le mot de « Pa$$w0rd » :
dc1_23-w400

Pour le partitionnement nous gardons le disque entier par défaut

Remarque : En production, par exemple, séparer les homes de la VM sur un stockage externe ZFS

dc1_24-w400

Sur l’unique disque :
dc1_25-w400

Une seule partition :
dc1_26-w400

Vérifier les partitions :
dc1_27-w400

Et valider les changements :
dc1_28-w400

La pré-installation débute :
dc1_29-w400

Sélectionner un dépôt Debian :
dc1_30-w400

Sur ftp.fr.debian.org par exemple :
dc1_31-w400

Laisser le proxy vide si vous sortez directement :
dc1_32-w400

Vous avez accès à internet si l’écran suivant apparait :
dc1_34-w400

Dans le taskselector, nous choisissons un installation minimale, « SSH server » et « Standard System »:
dc1_35-w400

Installer le grub sur le master boot :
dc1_37-w400

Pour la VM sélectionner /dev/sda :
dc1_38-w400

Installation terminée, vous pouvez rebooter :
dc1_39-w400

Une fois la machine virtuelle est redémarré, connectez-vous sur la console VirtualBox via le compte « asr »

2018-07-23 10.54.18-w400
Vérifier le fichier « /etc/network/interfaces » avec les paramètres suivants :

$ sudo -i
dc1old:~# more /etc/network/interfaces
...
auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp
...

2019-09-19 16.00.23-w400

Quitter la console Virtualbox, rebooter la VM et depuis votre poste client lancer votre logiciel ssh favoris (Putty, MobaXterm, Client SSH Windows 10), connectez-vous à l’adresse @IP : 10.X.X.X avec le compte « asr ».

$ ssh -p 2221 asr@127.0.0.1
$ sudo -i
dc1old:~#

Installation du service OpenLDAP

dc1old:~# apt-get install slapd ldap-utils samba-doc

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libltdl7 libodbc1 libperl5.20 libslp1
Suggested packages:
  libsasl2-modules-gssapi-mit libsasl2-modules-gssapi-heimdal libmyodbc odbc-postgresql tdsodbc unixodbc-bin slpd openslp-doc
The following NEW packages will be installed:
  ldap-utils libltdl7 libodbc1 libperl5.20 libslp1 samba-doc slapd
0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
Need to get 2,228 kB of archives.
After this operation, 6,402 kB of additional disk space will be used.
Do you want to continue ? [Y/n]

Lors de l’installation du paquet slapd, le mot de passe de l’administrateur et le domaine à gérer (ex : formation.fr) sont demandés. Ce dernier est stocké directement dans la base LDAP.

| Questions | Réponses |
| --- | --- |
| Mot de passe de l’administrateur| Pa$$w0rd |

Remarque : La base de données est initialisée dans « /var/lib/ldap ». Si vous souhaitez changer la racine de votre arbre ldap, il faudra arrêter le service ldap (service slapd stop), supprimer le dossier « /var/lib/ldap » et de re-configurer le paquet avec la commande :

dc1old:~# dpkg-reconfigure slapd

Par défaut, la configuration du serveur LDAP est géré par des injections LDIF stocké dans le répertoire « /etc/ldap/slapd.d ». LDAP fonctionne avec des schémas, présents dans le répertoire « /etc/ldap/schema/ ».

Pour coupler SaMBa avec OpenLDAP il faut ajouter le schéma approprié avec les commandes suivantes :

dc1old:~# cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
dc1old:~# gunzip -d /etc/ldap/schema/samba.schema.gz

Pour des questions de facilité de compréhension et de gestion de l’annuaire nous allons garder l’ancien mode de configuration d’un annuaire LDAP. Nous allons déplacer le répertoire « /etc/ldap/slapd.d/ » et le remplacer par un unique fichier « /etc/ldap/slapd.conf » :

dc1old:~# /etc/init.d/slapd stop
[ ok ] Stopping slapd (via systemctl): slapd.service.

dc1old:~# cd /etc/ldap
dc1old:~# mv /etc/ldap/slapd.d/ /etc/ldap/slapd.d.ori/
dc1old:~# touch /etc/ldap/slapd.conf
dc1old:~# chown openldap:openldap /etc/ldap/slapd.conf

Configurer le fichier « /etc/ldap/slapd.conf » avec la configuration suivante complète :

dc1old:~# vi /etc/ldap/slapd.conf

#######################################################################
# Global Directives:

# TLS
#TLSCACertificateFile /etc/ssl/certs/ca-terena.pem
#TLSCertificateFile /etc/ssl/certs/moncerts.pem
#TLSCertificateKeyFile /etc/ssl/private/maclef.key

# Definition des schemas
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include        /etc/ldap/schema/samba.schema

# Fichier PID
pidfile         /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile        /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
#  -1  enable all debugging
#  0   no debugging
#  1   trace function calls
#  2   debug packet handling
#  4   heavy trace debugging
#  8   connection management
#  16  print out packets sent and received
#  32  search filter processing
#  64  configuration file processing
#  128 access control list processing
#  256 stats log connections/operations/results
#  512 stats log entries sent
#  1024    print communication with shell backends
#  2048    print entry parsing debugging
#  4096    caching (unused)
#  8192    data indexing (unused)
#  16384   LDAPSync replication
loglevel    0

# Where the dynamically loaded modules are stored
modulepath      /usr/lib/ldap
moduleload      back_hdb

# The maximum number of entries that is returned for a search operation
sizelimit 1000
idletimeout 3600

# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1

#######################################################################
# Specific Backend Directives for hdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend         hdb

#######################################################################
# Specific Directives for database #1, of type hdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        hdb
suffix          "dc=formation,dc=fr"
rootdn          "cn=admin,dc=formation,dc=fr"
rootpw      {SSHA}lDTQ09puaOA/rrul2igmGfI+lswd+EI1

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# The dbconfig settings are used to generate a DB_CONFIG file the first
# time slapd starts.  They do NOT override existing an existing DB_CONFIG
# file.  You should therefore change these settings in DB_CONFIG directly
# or remove DB_CONFIG and restart slapd for changes to take effect.

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0

# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057 for more
# information.

# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500

# Indexing options for database #1
index   objectClass             eq
index   uidNumber,gidNumber     eq
index   loginShell      eq
index   uid,cn                  pres,sub,eq
index   sn                      pres,sub,eq
index   mail                    pres,eq
index   memberUID               eq,sub
index   member,uniqueMember     eq

# SaMBa
index   sambaSID                eq
index   sambaPrimaryGroupSID    eq
index   sambaGroupType      eq
index   sambaSIDList        eq
index   sambaDomainName         eq
index   default         sub,eq

# Save the time that the entry gets modified, for database #1
lastmod         on

# Checkpoint the BerkeleyDB database periodically in case of system
# failure and to speed slapd shutdown.
checkpoint      512 30

# ACL
# The userPassword by default can be changed by the entry owning it if they are authenticated.
# Others should not be able to see it, except the admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange,SambaLMPassword,SambaNTPassword
        by dn="cn=admin,dc=formation,dc=fr" write
        by anonymous auth
        by self write
        by * none

access to dn.base="" by * read

# The admin dn has full write access, everyone else can read everything.
access to *
        by dn="cn=admin,dc=formation,dc=fr" write
        by * read

Relancer le service OpenLDAP et vérifier qu’il soit démarré :

dc1old:~# /etc/init.d/slapd start
[ ok ] Starting slapd (via systemctl): slapd.service.

dc1old:~# ps -ef | grep ldap
openldap  2273     1  0 07:41 ?        00:00:00 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -f /etc/ldap/slapd.conf

dc1old:~# netstat -tupln | grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      2273/slapd
tcp6       0      0 :::389                  :::*                    LISTEN      2273/slapd

dc1old:~# /etc/init.d/slapd status
● slapd.service - LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)
   Loaded: loaded (/etc/init.d/slapd)
   Active: active (running) since Thu 2019-09-19 17:13:12 CEST; 12s ago
  Process: 1723 ExecStop=/etc/init.d/slapd stop (code=exited, status=0/SUCCESS)
  Process: 1800 ExecStart=/etc/init.d/slapd start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/slapd.service
           └─1805 /usr/sbin/slapd -h ldap:/// ldapi:/// -g openldap -u openldap -f /etc/ldap/slapd.conf

Sep 19 17:13:12 debian8 systemd[1]: Starting LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol)...
Sep 19 17:13:12 debian8 slapd[1804]: @(#) $OpenLDAP: slapd  (Aug 18 2019 18:52:35) $
                                             pbuilder@spike:/build/openldap-2.4.40+dfsg/debian/build/servers/slapd
Sep 19 17:13:12 debian8 slapd[1800]: Starting OpenLDAP: slapd.
Sep 19 17:13:12 debian8 systemd[1]: Started LSB: OpenLDAP standalone server (Lightweight Directory Access Protocol).

Remarque : Si vous souhaitez ajouter des index au fichier « /etc/ldap/slapd.conf » il vous faudra penser à réindexer le service :

dc1old:~# /etc/init.d/slapd stop
dc1old:~# slapindex -v
WARNING!
Runnig as root!
There's a fair chance slapd will fail to start.
Check file permissions!
indexing id=00000001
indexing id=00000007
indexing id=00000008
indexing id=00000009
dc1old:~# chown -R openldap:openldap /var/lib/ldap/
dc1old:~# /etc/init.d/slapd start

Une fois le serveur ldap démarré, il faut initialiser la base afin de contenir les informations nécessaire à la poursuite du TP :

Créer le fichier « /root/import_racine.ldif » :

Attention : il faut deux retours chariots à la fin des valeurs collées dans le fichier.

dc1old:~# vi /root/import_racine.ldif
dn: dc=formation,dc=fr
objectclass: dcObject
objectclass: organization
o: formation
dc: formation

dn: ou=users,dc=formation,dc=fr
objectclass: top
objectclass: organizationalUnit
ou: users

dn: ou=groups,dc=formation,dc=fr
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: uid=jbrown,ou=users,dc=formation,dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: jbrown
cn: James
sn: Brown
mail: jbrown@formation.fr
postalCode: 88441
userPassword: password

dn: uid=bwilson,ou=users,dc=formation,dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: bwilson
cn: Bruce
sn: Wilson
mail: bwilson@formation.fr
postalCode: 66221
street: Elm 5
userPassword: password
jpegPhoto:: /9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMDAwMDAwQEBAQFBQUFBQcHBgYHBwsICQgJCAsRCwwLCwwLEQ8SDw4PEg8bFRMTFRsfGhkaHyYiIiYwLTA+PlQBAwMDAwMDBAQEBAUFBQUFBwcGBgcHCwgJCAkICxELDAsLDAsRDxIPDg8SDxsVExMVGx8aGRofJiIiJjAtMD4+VP/CABEIAFIAWAMBIgACEQEDEQH/xAAdAAACAgMBAQEAAAAAAAAAAAAGCAUHAwQJAgAB/9oACAEBAAAAAElmzK1aOaraUmpiktrD10DayAIMkKunPQdk+hrZwkUNkMrM88VDtt7r7C1KCJtprbSBP2J6K+VDqUlwErkDnOm/HF9IPDaWQ+cP85sXS7OCj1Iybjj2zVvJA0b91BqJ1JuQDYfkuSWrGdFzsMsWkaIUGHh4IuY1glqtWrK8G89YeJk+ldfT1pHz9//EABoBAAIDAQEAAAAAAAAAAAAAAAUHAwYIBAD/2gAIAQIQAAAApKICefJOj5haleI6vyhC1+FEa9UydaFaD7hDLtU9jttBsCJni6f/xAAaAQADAQEBAQAAAAAAAAAAAAAFBgcDBAII/9oACAEDEAAAAF5+Mdc4X6LUuz2kyGquiYYI/PzvUctR8d5289ghjS48fuOK/wD/xAA5EAABAwIEBAMGAwcFAAAAAAABAgMEABEFBhIhEzFBURQiMgdCYXGBwSOhsRUkM3KCkdFSU2J04f/aAAgBAQABPwGHLbkIVbmjmPhSF60BSL2VUPDhLYLjL4KuotyP0NQPZq5iWBmUiWPGFarIV/DIHS/MGpeC4lhrnh5MdxLgJBuna/wPWsFyW2/kVaH2/wB7dK5LSyPMDbb6KtWD+zqBKypKTIZQJ89q4dPNG10f+1GydizuAPSSgstwlHiawQVnVby/LrTrfBOkqF6gyWmEJQSoKvfVYUiawVbrubc6bQEr4qSkKpDj/iEMKSdLoDYSm/XkRWSco+Bg4dORxo8lCyJcd1NgqxI68tjSG2Wm/wAFKUi97DYVi2GRcZh8F+9goLSR0IpC02TakqA2rE4acSgPw9WgPJ0qPYE71mL2fQJLanYiOGmJh5DKEep125IualtvxJDrDo0OtLKFjsQd6U8tJ2686deDa/Ii1/STvWU8KwDOOVoaZ8VPioV2VLQdC0WNwQRSU2QEk3sNyetPExzq9zr8KEwpulXTrTWJx0OLQp5IOskC/Sm5iFpSpCr3A/S9IeF9zQJPI2r2g5Tw3AWFS0uPOPzpay3q9KE8zc9Tvzpxv6HrWUcCh5hnmC/iQiv6bskp18XvbcVlXJE3K0xbrOJJfadFnGi2U/UG5peocqxPEmYrCtak3I2FTcckBwp1q9PIck87Hbn3oLllYWTvzvUbFpkE7XIv1+FYFizOIM60W18inqmmeIrnXtTaxmW82p2I61CYFkL2Ui6upI5XrhKS0nWL6VadQ95J7VkzKcZzEor4lsHgkL4KwSrWO1ulJdWbeUHbcjaluqAPkX+VZjxMLkur07Nk7cjYdjyvTSzJcceWLFe4+9Mt6x5eQNOBCiR8enSsqylxcSLSdR1g7X273pmVYedJT9Kx7L+G5mjBp911sp9KkqOx+KTsazDl+Rl3EBHcktvNKuptSFbEfEdCKyEGHNi+OKhZUGFNg/1JJ3BoSU99/lTuzZUs2FutZhaSZT5SggJVcG29r9bU1p8OhQuRalyHgBa4TyriWTfqayjEck4kp1CiA0j63VyplTqPKtQV89qnfsl5jhzyzw1/7igP7XrPOF4fgmMNrg4ozIjSFH8BCwtbI7E9u1ZCwvCpjrcyRKQHW3PLG1WJ+N/8U65o3sBSWCs8R3c9B2rN2BGWy7ISQDpsRb86SuRC1IlNLQb9ep+B60ZUbYnaokOXijwaYQdJ5q90bd6wDBF4JESlJC7+Zdhvc00W3htWbZmHYVhi3J8PxUVR0rb06t+l+3zrFXMLU6VQUvJJcWVBQ0pSOiUi6jt3Jpryea52r2c+KxKap9995TEVvyjWbFajtfvWsL+VKW1iBJQoKZbV03uof4qThEWWyriNJWee++9R8uYTH06YrYIH+kU9BaCNKU2t6aw93iJ0KO6axfFIOFSW1OSEsFwn1GwJHOsdbYzhlybEgy21ugC4QoG+nfSfnU6MAtY9JR7vfferqPQmsOzTOw9bDMdTLZTfhtcklZFrnufnWLe0HM+JLMbi+FSfIpDW3zuedZXQzGyxh/IDw4Wf6/Mo1h8pqbCaktnyOi6T8L1PxlqFj0OE5sJLK7fzDkKOlbYVWM4yzl7FY63dmJKTqI90o62r2pQXnDExpg8aK4gNmytkHoR8DTMx6MVLYdW2u1uo/NNL1JSt3UFq08qCVN+pR2pS9SiR32oyPElp824iLIc/5dlUjOstvLyMKCAAEFBdJ9y/Kms2QMNyvBjofC3ww2opQb8/MAfvWPY/IxzFvFqUW9B/BsfSByFSfaGpzAm+E4WZrTyF2725/Q9qx7NT+ZHY7i20t8JrTpBvc33NSJkzgmKH3THJ1cLUdN/lQTtvUSO2664FXA0LWr6C9KJJNConrP8AIaRzXTPo/t+tO/f71J9X0H6U1T1L+1QNncQ/6n3Ff//EACQQAQEAAgICAQQDAQAAAAAAAAERACExQVGBYXGRobEQwfDR/9oACAEBAAE/EFxCJHa+QcvGUwhESkN9fiYHv0VpOm0o9OFKc/OP0nyMqyNS7O0x2FTnAH6HHF+oMkQP6cPbVCpqdHusdzBsTjjKJKrAZwN411hOmhN3Q+OdYFicQWN6QTJzrwEHC7aJwbcdwysS/AW7GNhVpxF5hwesFHQhHh77IyY3UAIHQHgwuHXP36x4apQUBQcWcXJmcwJakbelduaVYQKsBS3eAVJyB+cQnvn1w6o9ZDI6pnUIiPfdxG9iCBQRXreNy18f2PjFCeB0fH3MMVGwtGz1hMB2JKPunWGBO9cLh1omlDTJZj6GlAPSm3RMCgLAgSfWedY3okyFyEYQWneraZLkQPZNfjHeyDpVdBP7dYuNwjIibANNDHmgaDAeXRptkBMDpGVE6Hqjvltx4aCVkJq9o4gOA4y6pRz7bXiMrUKoBArI5ZdacH0tDvKBFDsjg3oRL8G/tceEiW1Y6UAXW0jxK47AXAL0gOg3HkF1MeStC2JfnHWoCStw/wDe804AlIhCOmmMAu7jZ+Fw0B2U6H2hTGAuDJHQLuYV1xK4W0jhBExMKEcCV+5m01yqkMRn8VrZVUN24oNBOeYF1eI6cEGRpvfJrB+GQLVd9ZIRJROhHod4eCYNA8PTGhag8kNPJivYOADUtVxNVsC44dbHxjhJe2AYOXuc16+cQODu1ej3TF3gwCyreivI5JUksX4fesSG1rUxOwRWcCuJY2pBRrL0AQyrY62UfZjjgyEKuhQpIYLK9dtHzfVC4V2Gib2vOsI+EqqQI4gFwY1Py185FplUDmj8LU84jKWQGhYb+GYoKQdBVa8fLgkXPHI8s+uWSNh+pzh6/EJ6CF0MduPBMS2w88OjhgEW0VUC+Ht6xbrYBeevOWtwmrpdV6RSGDx83G9WqMDRe3oFCj2uUoN4FoGLoFWobz7guMGnj2W4jCzVWD1RwXq8VTsWxxafUEV2R2WOBoHSEnGyczAFEcmv43hrndLdMA4GT4cJ8xi4mEFtpKDrTMB0WxjaWEKwJpfaeX95xkQjKxHJ5FgWWx4WjvAwAztJmx6tsUyaoEOUrgVl3jsSC8V1lgV0fwbzc/pzg9R17zkOp+jGh6Z5/wDGuf2M4nvOf+9ZxOos/wD/xAAvEQABAwMCBQMDAwUAAAAAAAACAQMEAAUREiEGBxMxQSJRcSMzYRQygRUXQpGy/9oACAECAQE/AHIDLhl0i0+VQvHvXF3MCTaZ7kW0voatv+o1FP8ABcKBfhavPM+dcbZESOCsSQki49pzj0dk+Fqy81r3FkSBkfUbkzAdQjVS6I9lQUqw8SWzi6GRRjVSHTrBdiHPaisAEuUNa5mXmBDgLFC4lBubGHmCRDFT8YQsYwtQmHpkpBFOorpepPfPmoPAIq0RPvCCGKYRKv3B71pZV8fqte6ePmuVEmaxxMLDUkWmDTL45RNenslA5lNiT/aVzPmzJt7EHzJ1GQwKKONOd65cxYz9wdUw3ANqfaOQaiC6UHbHxVxYaGzTlfX6aNL37ZqG49CurT0UnWzE8obKay/hPNWtXpdqhSFdV7qsoqmrStqq+cj4WuYPB5SVfu7twJWmAXDKhnT7COKslxnW6cMtvIg0qIW22Pav7i2hwOq7EdF3VujZJiuI+MnrzDVuO30owEmtvuq/lVrh+2G1dbZLfbkDBceDW4iEmlM99SVFVhY7e6l6e5KhLTtmjXAFafQTbwuyjsua454JC4223QLXHajNhJQnhBNO2MZ/NWLl0/Luk39Q2rcQeu2Cki6s9gJK4e5ZXNqUSzxT9KXWbcHOC2T0qlcPWz+k2dmC+YPi1kQXTjLefShJ7pTUiO2pAaIqpjG2MJQft/irl+9Ka+4XwtJ9qmu4/NF99z4D/mv/xAAsEQACAQMCBAUDBQAAAAAAAAABAgMABBEFEgYhMUETFCIycVFSYRUzNGJy/9oACAEDAQE/AE09bmQ+F8kNWhcIsrs9wAYmHp+vMVYcIx291cO+JInQqoPXJ61c8MWzW6Rx5HhoQP7HHKtZ0W5tMJMMhjkN8V5B/uFcM2EodZDAjxMNpY9qtoRyIxtHUVLNawYyBQEM6+nGcVxVFB5F96bmHsI7ZokZ61wdEP0pJcDdJzPqzSnZESprWricTAktWgtNtBfJJ7GtRtYZonWRAQQeXatdsXtr90VNoxyAbIrhDXbaJYrKO1IZurA5yfqajYk7GwAwqWxikOSVNJFHbx5BBP4q9uikEojdC/hnCEg1LNHM5Zwuc9xWnRywSq8UrJjmDitP4ha2neS6kYnwiFB+7NXvFFtawxEOrTPtJUdgetapxVBDZFrdwZPSy5/PUGtS1iO7n8xEGQuPUuT1qEhgx25yerVb9Kv/AHU/8l/8VcftrSe5fmovYK//2Q==

dn: cn=ldap-user,ou=groups,dc=formation,dc=fr
objectclass: top
objectclass: groupOfNames
cn: ldap-user
member: uid=jbrown,ou=users,dc=formation,dc=fr
member: uid=bwilson,ou=users,dc=formation,dc=fr

dn: cn=ldap-admin,ou=groups,dc=formation,dc=fr
objectclass: top
objectclass: groupOfNames
cn: ldap-admin
member: uid=jbrown,ou=users,dc=formation,dc=fr


Ajouter votre fichier « /root/import.ldif » à l’annuaire OpenLDAP :

dc1old:~# ldapadd -x -D "cn=admin,dc=formation,dc=fr" -w 'Pa$$w0rd' -f /root/import_racine.ldif
adding new entry "ou=users,dc=formation,dc=fr"

adding new entry "ou=groups,dc=formation,dc=fr"

adding new entry "uid=jbrown,ou=users,dc=formation,dc=fr"

adding new entry "uid=bwilson,ou=users,dc=formation,dc=fr"

adding new entry "cn=ldap-user,ou=groups,dc=formation,dc=fr"

adding new entry "cn=ldap-admin,ou=groups,dc=formation,dc=fr"

Vérifier la bonne intégration des données importés :

dc1old:~# ldapsearch -x -b "dc=formation,dc=fr"
# extended LDIF
#
# LDAPv3
# base <dc=formation,dc=fr> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

....
....

# search result
search: 2
result: 0 Success

# numResponses: 8
# numEntries: 7

Attention : si vous avez des erreurs, il faut recommencer l’installation en purgeant la base avant de continuer la suite du TP. Vous pouvez également vérifier avec l’outil web phpldapadmin que nous installons par la suite.

Installation de phpldapadmin

Pour consulter et modifier l’annuaire LDAP depuis un navigateur. Le paquet phpldapadmin permet de consulter et de modifier la base de données LDAP en mode Web. Ce logiciel n’est pas obligatoire mais peut faciliter la gestion de votre annuaire.

Pour l’installer executer la commande suivante :

dc1old:~# apt-get install phpldapadmin

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 libonig2 libqdbm14 php5-cli php5-common
  php5-json php5-ldap php5-readline ssl-cert
Suggested packages:
  apache2-doc apache2-suexec-pristine apache2-suexec-custom php-pear php5-user-cache openssl-blacklist
The following NEW packages will be installed:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php5 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 libonig2 libqdbm14 php5-cli php5-common
  php5-json php5-ldap php5-readline phpldapadmin ssl-cert
0 upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,162 kB of archives.
After this operation, 33.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Après l’installation, éditer les lignes 293,300 et 326 du fichier de configuration « /etc/phpldapadmin/config.php ».

dc1old:~# vi /etc/phpldapadmin/config.php

293 $servers->setValue('server','host','127.0.0.1');
300 $servers->setValue('server','base',array('dc=formation,dc=fr'));
326 $servers->setValue('login','bind_id','cn=admin,dc=formation,dc=fr');

Accéder à l’interface web depuis votre navigateur : http://127.0.0.1:8082/phpldapadmin

2019-09-19 17.45.07-w400

Installation du service SaMBa

Installer SaMBa mode V3 depuis debian est un jeu d’enfant, il vous suffit de saisir la commande suivante :

dc1old:~# apt-get install samba smbldap-tools smbclient samba-common-bin
0 upgraded, 44 newly installed, 0 to remove and 0 not upgraded.
Need to get 12.9 MB of archives.
After this operation, 59.7 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Arrêter le service afin de pouvoir la paramétrer correctement

dc1old:~# /etc/init.d/samba stop

Editer fichier de configuration SaMBa « /etc/samba/smb.conf » avec l’authentification LDAP et le partage du répertoire personnel de l’utilisateur :

dc1old:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.ori
dc1old:~# vi /etc/samba/smb.conf

#======================= Global Definitions =======================
[global]
    workgroup = formation.fr
    netbios name = dc1
    server string = Samba-LDAP DC1 Server
    domain master = Yes
    local master = Yes
    domain logons = Yes
    winbind use default domain = Yes
    dns proxy = No
    wins support = Yes
    log file = /var/log/samba/log.%m
    max log size = 1000
    syslog = 0
    panic action = /usr/share/samba/panic-action %d
    security = user
    logon path =
    logon home =

    # Desactivation du partage imprimante
    printing = bsd
    printcap name = /dev/null
#======================= Share Definitions =======================
[homes]
    path = /home/%u
    comment = Home Directories
    valid users = %S
    guest ok = no
    browseable = no
    writable = yes
    create mask = 0700
    directory mask = 2700

[netlogon]
    comment = The domain logon service
    path = /home/netlogon
    public = no
    writeable = no
    browsable = no    

Tester les paramètres du fichier « /etc/samba/smb.conf » et vérifier la présence de la ligne Server role: ROLE_DOMAIN_PDC :

dc1old:~# testparm -s
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Loaded services file OK.
Server role: **ROLE_DOMAIN_PDC**
...
...

Interconnection SaMBa et OpenLDAP

Récupération du SID du serveur SaMBa actif afin de pouvoir le renseigner dans les prochains fichiers de configuration.

dc1old:~# net getlocalsid
SID for domain DC1 is: S-1-5-21-2419060621-4054198091-1795147476

Ajouter les paramètres LDAP suivant au fichier de configuration « /etc/samba/smb.conf » dans la section [GLOBAL] :

    # LDAP
    ldap passwd sync = Yes
    ldap ssl = off
    passdb backend = ldapsam:ldap://127.0.0.1/
    ldap admin dn = cn=admin,dc=formation,dc=fr
    ldap suffix = dc=formation,dc=fr
    ldap group suffix = ou=groups
    ldap user suffix = ou=users
    ldap machine suffix = ou=computers
    add user script = /usr/sbin/smbldap-useradd -m "%u"
    ldap delete dn = Yes
    delete user script = /usr/sbin/smbldap-userdel "%u"
    add machine script = /usr/sbin/smbldap-useradd -w "%u"
    add group script = /usr/sbin/smbldap-groupadd -p "%g"
    add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
    delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
    set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

Suite à l’installation de SaMBa il faut lui renseigner le mot de passe admin de l’annuaire. La commande suivante permet d’indiquer ce mot de passe :

dc1old:~# smbpasswd -w 'Pa$$w0rd'
Setting stored password for "cn=admin,dc=formation,dc=fr" in secrets.tdb

Attention : si votre mot de passe possède des caractères spéciaux, il vous faudra les échapper avec des simples quotes.

Démarrage des services SaMBa et LDAP

dc1old:~# /etc/init.d/slapd restart && /etc/init.d/samba start

Le paquet « smbldap-tools » précédemment installé n’est pas directement opérationnel, il faut le configurer comme indiqué dans le « README.Debian » :

dc1old:~# zless /usr/share/doc/smbldap-tools/README.Debian.gz

Ce document demande de mettre en place deux fichiers de configuration dans « /etc/smbldap-tools » :

dc1old:~# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
dc1old:~# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.conf

Enfin, éditer les fichiers précédemment copiés dans « /etc/smbldap-tools » avec les exemples suivants ;

Dans le fichier « /etc/smbldap-tools/smbldap_bind.conf » renseigner, le nom et le mot de passe de l’administrateur LDAP.

dc1old:~# vi /etc/smbldap-tools/smbldap_bind.conf
slaveDN="cn=admin,dc=formation,dc=fr"
slavePw="Pa$$w0rd"
masterDN="cn=admin,dc=formation,dc=fr"
masterPw="Pa$$w0rd"

Dans le fichier « /etc/smbldap-tools/smbldap.conf », indiquer le bon domaine sur les lignes concernées et il faut également indiquer le SID trouvé précédemment :

Attention : chaque VM a son propre identifiant !

dc1old:~# mv /etc/smbldap-tools/smbldap.conf /etc/smbldap-tools/smbldap.conf.ori
dc1old:~# vi /etc/smbldap-tools/smbldap.conf
SID="S-1-5-21-2419060621-4054198091-1795147476"
sambaDomain="formation.fr"
#slaveLDAP="ldap://ldap.example.com/"
#masterLDAP="ldap://ldap.example.com/"
#ldapTLS="1"
#verify="require"
#cafile="/etc/smbldap-tools/ca.pem"
#clientcert="/etc/smbldap-tools/smbldap-tools.example.com.pem"
#clientkey="/etc/smbldap-tools/smbldap-tools.example.com.key"
suffix="dc=formation,dc=fr"
usersdn="ou=users,${suffix}"
computersdn="ou=computers,${suffix}"
groupsdn="ou=groups,${suffix}"
idmapdn="ou=idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
password_hash="SSHA"
password_crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
shadowAccount="1"
defaultMaxPasswordAge="45"
#userSmbHome="\\PDC-SRV\%U"
#userProfile="\\PDC-SRV\profiles\%U"
#userHomeDrive="H:"
userScript="logon.bat"
mailDomain="formation.fr"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

Initialisation de la base de données LDAP

La commande suivante va permettre de créer l’architecture de l’annuaire LDAP avec les informations de votre structure renseignées dans le fichier « /etc/smbldap-tools/smbldap.conf »

dc1old:~# smbldap-populate
Populating LDAP directory for domain formation.fr (S-1-5-21-3234176791-4107811042-2478210050)
(using builtin directory structure)

adding new entry: dc=formation,dc=fr
adding new entry: ou=users,dc=formation,dc=fr
adding new entry: ou=groups,dc=formation,dc=fr
adding new entry: ou=computers,dc=formation,dc=fr
adding new entry: ou=idmap,dc=formation,dc=fr
adding new entry: sambaDomainName=cnrs,dc=formation,dc=fr
adding new entry: uid=root,ou=users,dc=formation,dc=fr
adding new entry: uid=nobody,ou=users,dc=formation,dc=fr
adding new entry: cn=Domain Admins,ou=groups,dc=formation,dc=fr
adding new entry: cn=Domain Users,ou=groups,dc=formation,dc=fr
adding new entry: cn=Domain Guests,ou=groups,dc=formation,dc=fr
adding new entry: cn=Domain Computers,ou=groups,dc=formation,dc=fr
adding new entry: cn=Administrators,ou=groups,dc=formation,dc=fr
adding new entry: cn=Account Operators,ou=groups,dc=formation,dc=fr
adding new entry: cn=Print Operators,ou=groups,dc=formation,dc=fr
adding new entry: cn=Backup Operators,ou=groups,dc=formation,dc=fr
adding new entry: cn=Replicators,ou=groups,dc=formation,dc=fr

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password: Pa$$w0rd
Retype new password: Pa$$w0rd

Si tout se passe bien, vous devez normalement saisir deux fois le mot de passe root à la fin. Pour résumer, cette commande crée :

  • Les différentes OU (Organisation Unit) qui contiendront les Computers, Users et Groups
  • Deux UID : root et nobody qui seront dans OU = Users
  • Plusieurs CN (Common Name): Les groupes qui seront dans OU = Groups

Remarque : Si par hasard vous avez mal configuré l’outil smbldap-tools et donc mal peuplé votre base, executer les commandes suivantes afin de relancer la procédure précédente;

# /etc/init.d/slapd stop && /etc/init.d/samba stop
# rm -rf /var/lib/slapd/*
# rm -rf /var/lib/ldap/*
# rm /var/lib/samba/secrets.tdb
# /etc/init.d/slapd start && /etc/init.d/samba start

Ajout des utilisateurs

La base de données vide n’ayant pas grand intérêt, il s’agit maintenant d’y importer des utilisateurs, des groupes, des services et des hôtes. Vous avez 2 possibilités afin d’y parvenir :
* Manuellement en utilisant la commande « smbldap-useradd »
* En récupérant les informations depuis les fichiers (/etc/passwd, /etc/group, /etc/services, /etc/hosts, etc.)

Remplissage de l’annuaire : en mode manuel

Nous pouvons tester l’ajout d’un utilisateur. Cela se fait grâce à la commande « smbldap-useradd » :

dc1old:~# ln -s /usr/sbin/smbldap-passwd /usr/sbin/smbldap-passwd.cmd
dc1old:~# smbldap-useradd -a -P colombet

Si vous avez loupé la concordance des password :

dc1old:~# smbldap-passwd colombet
  • -a : désigne un utilisateur
  • -c : Information Gecos : Le nom entier
  • -m : Créé le répertoire personnel
  • -P : création du mot de passe

Après la création du compte et pour éviter que le mot de passe expire au bout de 3 semaines, il faut supprimer l’attribut « SambaPwdMustChange » avec par exemple l’interface web « phpldapadmin » ou ajouter la lettre « X » à l’attribut « sambaAcctFlags » qui contient déjà « U ».

  • D: Desactivé
  • U: Utilisateur
  • W: Ordinateur
  • X: Le mot de passe n’expire pas

phpldapadmin2

Editer la fiche de l’utilisateur précédemment créé :
phpldapadmin3

Les commandes suivantes sont essentiels pour l’administration d’un utilisateur en CLI:

Afficher la fiche complète d’un utilisateur en ligne de commande

dc1old:~# smbldap-usershow colombet

dn: uid=colombet,ou=users,dc=formation,dc=fr
objectClass: top,person,organizationalPerson,posixAccount,shadowAccount,inetOrgPerson,sambaSamAccount
cn: colombet
sn: colombet
uid: colombet
uidNumber: 1000
gidNumber: 513
homeDirectory: /home/colombet
loginShell: /bin/bash
gecos: System User
givenName: colombet
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: colombet
sambaSID: S-1-5-21-974850198-1505400730-1293609509-3000
sambaPrimaryGroupSID: S-1-5-21-974850198-1505400730-1293609509-513
sambaLogonScript: logon.bat
sambaPwdMustChange: 1536311362
sambaPwdLastSet: 1532423362
sambaNTPassword: 92937945B518814341DE3F726500D4FF
sambaLMPassword: 727E3576618FA1754A3B108F3FA6CB6D
sambaAcctFlags: [U]
userPassword: {SSHA}iCSo/PYs7avk0YhOuWuZZmiiAEdLVkRT
shadowLastChange: 17736
shadowMax: 45

Changer le mot de passe de l’utilisateur

dc1old:~# smbldap-passwd colombet

Supprimer l’utilisateur (ne pas faire dans le TP)

dc1old:~# smbldap-userdel colombet
Remplissage de l’annuaire : en mode migrationtool

Le paquet Debian « migrationtools » offre un ensemble de scripts permettant de récupérer les informations depuis les annuaires (/etc/passwd, /etc/group, /etc/services, /etc/hosts, etc.), afin de les intégrer dans l’annuaire LDAP.

dc1old:~# apt-get install migrationtools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  migrationtools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Après l’installation du paquet, il faut éditer le fichier « /etc/migrationtools/migrate_common.ph » aux lignes 50,58,61,71,74,86,96 et 97.

Vous devez activer les options IGNORE_UID_BELOW et IGNORE_GID_BELOW (les décommenter) et mettre à jour les champs comme dans l’exemple suivant. Penser à faire une copie du fichier avant de le modifier.

dc1old:~# cp /etc/migrationtools/migrate_common.ph /etc/migrationtools/migrate_common.ph.orig
dc1old:~# vi /etc/migrationtools/migrate_common.ph
...
 50 $NAMINGCONTEXT{'hosts'} = "ou=computers";
 58 $NAMINGCONTEXT{'passwd'} = "ou=users";
 61 $NAMINGCONTEXT{'group'} = "ou=groups";
 71 $DEFAULT_MAIL_DOMAIN = "formation.fr";
 74 $DEFAULT_BASE = "dc=formation,dc=fr";
 86 $DEFAULT_MAIL_HOST = "formation.fr";
 96 $IGNORE_UID_BELOW = 1000;
 97 $IGNORE_GID_BELOW = 100;
...

Dans cet exemple, nous allons utiliser seulement un morceau des outils « migrationtools » en réalisant un export en ldif du fichier « /etc/passwd ». Si vous souhaitez exporter plus d’information de vos anciennes bases, je vous invite à lire la documentation suivant au paragraphe 11.7.2 : https://debian-handbook.info/browse/fr-FR/stable/sect.ldap-directory.html.

Nous procédons à l’export du fichier « /etc/passwd » avec le script perl « migrate_passwd.pl » disponible dans le répertoire « /usr/share/migrationtools » :

dc1old:~# cd /usr/share/migrationtools
dc1old:~# ./migrate_passwd.pl /etc/passwd /root/password.formation.fr.ldif

Voici un exemple de contenu suite à l’export précédent :

root@dc1:~# more /root/password.formation.fr.ldif
dn: uid=asr,ou=users,dc=formation,dc=fr
uid: asr
cn: asr
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$ZkjEtQh1$8jja57HaSa0UacivoTPQWBn8NY/pEjuFGzA2HBFeqV96/kEiw2Uq6GSRJqSMQIPIW/dN/SVT6WpLPPyX4dX/91
shadowLastChange: 17735
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/asr


A ce stade, il nous est maintenant possible d’injecter directement le fichier ldif précédemment généré dans l’annuaire LDAP avec la commande ldapadd :

dc1old:~# ldapadd -x -D "cn=admin,dc=formation,dc=fr" -f password.formation.fr.ldif -W
Enter LDAP Password:
adding new entry "uid=asr,ou=users,dc=formation,dc=fr"

Remarque : Pour ajouter les attributs type numéro de bureau, adresse mail, numéro de téléphone à l’utilisateur, il faudra passer par « phpldapadmin » ou avec le logiciel « jxplorer ».

Authentification des utilisateurs sur linux avec libnss-ldap et libpam-ldap

Par défaut, l’authentification Unix se fait à l’aide du fichier « /etc/passwd ». Cependant, il est tout à fait possible d’indiquer au système de choisir une autre base d’authentification. Nous allons donc interfacer notre serveur à la base LDAP fraichement installé. Pour cela, nous allons installé un module NSS qui va permettre d’aller chercher les informations nécessaires à l’authentification dans le LDAP. Pour cela, nous avons besoin d’installer deux paquets qui s’interface avec PAM (Pluggable Authentication Modules) :

dc1old:~# apt-get install libnss-ldap libpam-ldap
[GNOME] : Installer une souris 9 boutons [UBUNTU] : Installer GCstar logiciel de gestion de collections [UBUNTU] : Installer le gestionnaire d'albums photos Picasa [GNOME] : « NumLock on » automatique dans GDM [REMOTE] : Script de connexion VNC sur une connexion SSH [OPENSSH] : Installer 2 services SSH avec 2 configurations distinctes sur la même machine [VIM] : Colorisation syntaxique de l'éditeur [OPENLDAP] : Script pour la création automatique de key public/private et intégration dans OPENLDAP 2.4.11-1 [OPENLDAP] : Stockage de clé publique ssh dans un annuaire [DEAMON] : Activer/désactiver des services au démarage de votre Debian
<
>
GCstar est une application libre et gratuite pour gérer vos collections de films, jeux vidéo, livres, musique,... Les informations associées à chaque élément peuvent être récupérées automatiquement depuis Internet.

Vérifier le fichier « /etc/libnss-ldap.conf » afin d’activer la directive « bind_policy soft » :

dc1old:~# egrep /etc/libnss-ldap.conf
base dc=formation,dc=fr
uri ldap://127.0.0.1/
ldap_version 3
rootbinddn cn=admin,dc=formation,dc=fr
bind_policy soft

Vérifier le fichier « /etc/pam_ldap.conf » :

dc1old:~# egrep /etc/pam_ldap.conf
base dc=formation,dc=fr
uri ldap://127.0.0.1/
ldap_version 3
rootbinddn cn=admin,dc=formation,dc=fr
pam_password crypt

Modifier le fichier « /etc/nsswitch.conf » comme-ci dessous (ajout de l’option ldap):

dc1old:~# egrep /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap
...

Après avoir configuré l’ensemble des fichiers précédents et rebooté la VM, la liaison entre les utilisateurs LDAP et UNIX est effective. Vous pouvez vérifier le bon fonctionnement avec la commande suivante :

dc1old:~# getent passwd
colombet:x:1000:513:System User:/home/colombet:/bin/bash

dc1old:~# id colombet
uid=1000(colombet) gid=513(Domain Users) groups=513(Domain Users)
dc1old:~# mkdir /home/colombet
dc1old:~# chown colombet: /home/colombet/

La commande suivante permet de vérifier que cet utilisateur arrive bien à se connecter aux partages SaMBa :

~~# smbclient -L \dc1old -U colombet~~

dc1old:~# smbclient -L "$HOSTNAME" -U colombet

Enter colombet's password:
Domain=[FORMATION.FR] OS=[Windows X.X] Server=[Samba X.X.X-Debian]

    Sharename       Type      Comment
    ---------       ----      -------
    IPC$            IPC       IPC Service (Samba-LDAP DC1OLD Server)
    colombet        Disk      Home Directories
Domain=[FORMATION.FR] OS=[Windows X.X] Server=[Samba X.X.X-Debian]

    Server               Comment
    ---------            -------
    DC1OLD                  Samba-LDAP DC1OLD Server

    Workgroup            Master
    ---------            -------
    FORMATION.FR         DC1OLD

En cas de problème, vous pouvez vider le cache nscd avec les commandes suivantes :

dc1old:~# nscd --invalidate=hosts
dc1old:~# nscd --invalidate=passwd
dc1old:~# nscd --invalidate=group

Intégration dans le domaine formation.fr d’un poste client Windows 7

Remarque : Pour le TP, le poste client Windows7 est disponible à cette adresse : https://mycore.core-cloud.net/index.php/s/2gLOipJIY02iJIp

Pour intégrer votre poste Windows 7, il vous ajouter deux clés de registre afin d’intégrer le poste dans votre domaine. Pour cela, créer un fichier nommer samba_7_2008_fix.reg et executer le depuis une session Administrateur.

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters]
"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000

Migration vers SaMBa4 à partir de vos environnements – TP n°2

Mise en place des briques nécessaire à la migration vers SaMBa4

Dans le TP n°1 nous avons simulé une ancienne architecture basé sur le couple OpenLDAP et SaMBa. Afin de profiter des nouveautés et de la technologie AD nous allons procéder à l’installation d’une nouvelle machine en Debian Stretch 9 (dc1ad) en suivant les instructions de la vidéo suivante :

Remarque : Vous pouvez également directement télécharger une version prêtre à l’emploi depuis : https://mycore.core-cloud.net/index.php/s/2gLOipJIY02iJIp

OBLIGATOIRE : Après l’installation et le paramétrage de cette machine Debian Stretch 9 vous procédez à un snapshot de celle-ci.

Paramétrage du fuseau horaire et synchronisation du temps

Vérifiez si la date et l’horaire sont bien configurés.

dc1ad:~# date
Wed Jul 25 03:11:10 CEST 2018

Vous constatez que l’heure est incorrecte. Pour vérifier la bonne définition du timezone normalement renseigné durant l’installation saisir la commande suivante :

dc1ad:~# dpkg-reconfigure tzdata
Current default time zone: 'Europe/Paris'
Local time is now:      Wed Jul 25 03:11:08 CEST 2018.
Universal Time is now:  Wed Jul 25 01:11:08 UTC 2018.

Même après l’execution de la commande dpkg-reconfigure tzdata le problème de synchronisation de temps est toujours présent. Avant l’arrivée de systemd, nous utilisions le couple de commande ntp et date ; mais ça c’était avant. Afin de corriger ces problèmes, nous allons utiliser une nouvelle commande timedatectl. Celle-ci permet de gérer dans sa globalité l’horloge du système.

En une seule commande, il est possible de régler la date, l’heure, choisir le fuseau horaire et synchroniser depuis un serveur de temps. Génial !

dc1ad:~# timedatectl
      Local time: Sun 2019-10-20 09:47:19 CEST
  Universal time: Sun 2019-10-20 07:47:19 UTC
        RTC time: Sun 2019-10-20 07:47:18
       Time zone: Europe/Paris (CEST, +0200)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

Afin de synchroniser la VM avec un ou des serveurs de temps, il suffit de modifier le fichier de configuration « /etc/systemd/timesyncd.conf » et définir les serveurs de temps :

dc1ad:~# vi /etc/systemd/timesyncd.conf
[Time]
NTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org

Activer la synchronisation :

dc1ad:~# timedatectl set-ntp true
dc1ad:~#timedatectl
      Local time: Sun 2019-10-20 09:48:10 CEST
  Universal time: Sun 2019-10-20 07:48:10 UTC
        RTC time: Sun 2019-10-20 07:48:08
       Time zone: Europe/Paris (CEST, +0200)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Stopper la synchronisation :

dc1ad:~# timedatectl set-ntp false

Remarque : Voici un petit mémo sur l’utilisation de la commande timedatectl :

Régler l’heure (HH:mm:s = heures,minutes,secondes):
dc1ad:~# timedatectl set-time ‘HH:mm:ss’

Régler la date (A:M:J = année,mois,jour):
dc1ad:~# timedatectl set-time ‘A:M:J’

Régler l’heure et la date :
dc1ad:~# timedatectl set-time ‘A:M:J HH:mm:ss’

Lister les fuseaux horaires :
dc1ad:~# timedatectl list-timezones

*Choisir un fuseau horaire (Timezone)** :
dc1ad:~# timedatectl set-timezone Europe/Paris

Installation de SaMBa4

A partir d’ici vous avez deux possibilités pour déployer votre SaMBa4:
* Soit en passant par la compilation depuis les sources officiels
* Soit en passant par la version packagé depuis le dépôt officiel Debian ou celui personnalisé de chez Tranquil IT

La compilation vous permettra d’obtenir la version 4.8 de chez SaMBa4 tandis que la version packagé vous permettra d’obtenir la version 4.5 chez Debian et 4.7 chez TIS.

La version compilée prend plus de temps à installer et demande une bonne maitrise des concepts de la compilation tandis que la version packagé vous permettra de déployer SaMBa4 plus rapidement et avec la philosophie d’administration d’un serveur Linux Debian.

Si vous ne souhaitez pas compiler les sources de SaMBa4, vous pouvez passer directement au chapitre suivant car pour l’ensemble du TP N°2 nous utiliserons la version officielle disponible sur les dépôts Debian.

Compilation de SaMBa4 depuis les sources officielles

cf : https://wiki.samba.org/index.php/Build_Samba_from_Source

Nous devons dans un premier temps installer les dépendances nécessaire à la compilation de SaMBa4 :

dc1ad:~# export DEBIAN_FRONTEND=noninteractive
dc1ad:~# apt-get update
dc1ad:~# apt-get install ruby-dev libreadline-dev git build-essential libattr1-dev libblkid-dev libpam0g-dev autoconf python-dev python-dnspython libacl1-dev gdb pkg-config libpopt-dev libldap2-dev libtirpc-dev libxslt1-dev python-pycryptopp libgnutls28-dev dnsutils acl attr libbsd-dev libcups2-dev libgnutls28-dev curl wget docbook-xsl libacl1-dev gdb liblmdb-dev libjansson-dev libpam0g-dev libgpgme-dev tracker libtracker-sparql-1.0-dev libavahi-client-dev libavahi-common-dev bison flex libarchive-dev
dc1ad:~# gem install fpm
dc1ad:~# unset DEBIAN_FRONTEND

Remarque : La variable DEBIAN_FRONTEND permet d’indiquer à l’utilisateur s’il souhaite durant l’installation renseigner des informations nécessaire aux paquets.

Compilation de SaMBa 4.9.0 (20/10/2019) :

dc1ad:~# cd /usr/src
root@dc1ad:/usr/src# wget https://download.samba.org/pub/samba/stable/samba-4.9.0.tar.gz
2019-10-20 09:54:43 (1.19 MB/s) - ‘samba-4.9.0.tar.gz’ saved [18516111/18516111]
root@dc1ad:/usr/src# tar xvfz samba-4.9.0.tar.gz
root@dc1ad:/usr/src# cd samba-4.9.0

Si vous souhaitez connaitre les options de compilation executer la commande suivante :

root@dc1ad:/usr/src# ./configure --help

Main commands (example: ./waf build -j4)
  build       : build all targets
  clean       : cleans the project
  configure   : configures the project
  ctags       : build 'tags' file using ctags
  dist        : makes a tarball for distribution
  distcheck   : test that distribution tarball builds and installs
  distclean   : removes build folders and data
  etags       : build TAGS file using etags
  install     : installs the targets on the system
  list        : lists the targets to execute
  pep8        : run pep8 validator
  pydoctor    : build python apidocs
  reconfigure : reconfigure if config scripts have changed
  step        : executes tasks in a step-by-step fashion, for debugging
  test        : Run the test suite (see test options below)
  testonly    : run tests without doing a build first
  uninstall   : removes the targets installed
  wafdocs     : build wafsamba apidocs
  wildcard_cmd: called on a unknown command

Optionnel : Pour stocker les binaires smbd et samba dans le répertoire « /sbin/ » à la place de « /usr/local/samba/sbin/ » exécuter la configuration de compilation avec l’option suivante :

dc1ad:~# ./configure ... --sbindir=/sbin/
'configure' finished successfully (52.233s)

Optionnel : Pour stocker le fichier de configuration « smb.conf » dans /etc/samba/* » à la place de « /usr/local/samba/etc/ », exécuter la configuration de compilation avec l’option suivante :

dc1ad:~# ./configure ... --sysconfdir=/etc/samba/

Optionnel : Pour stocker le manuel SaMBa4 dans le répertoire « /usr/share/man/ », exécuter la configuration de compilation avec l’option suivante :

dc1ad:~# ./configure ... --mandir=/usr/share/man/

Voici un exemple de commande avec toutes les options désirées :

root@dc1ad:/usr/src# ./configure --with-ads --systemd-install-services --with-shared-modules=idmap_ad --enable-debug --enable-selftest --with-systemd --enable-spotlight
'configure' finished successfully (57.665s)

Avant de compiler définitivement la version finale de SaMBa4, il faut vous assurer de la bonne réussite de la commande précédente. Il ne doit pas y avoir une seule erreur, et les dépendances doivent-être satisfaites.

root@dc1ad:/usr/src# make   
'build' finished successfully (9m21.105s)
root@dc1ad:/usr/src# make install
'install' finished successfully (3m6.120s)

Enfin, il vous faut ajouter le chemin de SaMBa4 à votre PATH du fichier bashrc afin de ne pas saisir le chemin complet pour l’execution des binaires :

dc1ad:~# echo "export PATH=$PATH:/usr/local/samba/sbin:/usr/local/samba/bin"
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/samba/sbin:/usr/local/samba/bin
dc1ad:~# vi /root/.bashrc

Après la compilation, nous devons ajouter le service SaMBa4 à systemd. Créer le fichier /etc/systemd/system/samba4.service en y insérant les informations suivantes :

dc1ad:~# vi /etc/systemd/system/samba4.service
[Unit]
Description=Samba4 AD Daemon
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
LimitNOFILE=16384
EnvironmentFile=-/usr/local/samba/etc
ExecStart=/usr/local/samba/sbin/samba $SAMBAOPTIONS
ExecReload=/usr/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

Une fois créé, penser à l’activer et à recharger systemd :

dc1ad:~# systemctl daemon-reload
dc1ad:~# systemctl enable samba4.service
dc1ad:~# systemctl start samba4.service

Vous pouvez à présent passer directement au chapitre suivant assurant la création du domaine Active Directory SaMBa4.

Installation de SaMBa4 depuis le dépôt officiel Debian

Rien de plus simple sur la version officielle de Debian 9 il vous suffit de saisir les quelques commandes suivantes :

dc1ad:~# export DEBIAN_FRONTEND=noninteractive
dc1ad:~# apt-get update && apt-get upgrade -y
dc1ad:~# apt-get install samba ldb-tools smbclient krb5-user winbind samba-vfs-modules
dc1ad:~# unset DEBIAN_FRONTEND

Remarque : Si vous souhaitez utiliser le dépôt de chez Tanquil IT afin de disposer de la dernière version de SaMBa4 packagé, il vous faudra ajouter un dépôt tierce et relancer les commandes précédentes :
dc1ad:~# wget -O – http://samba.tranquil.it/tissamba-pubkey.gpg | apt- key add –
dc1ad:~# echo « deb http://samba.tranquil.it/debian/samba-4.8/ stretch main » > /etc/apt/sources.list.d/sambaTIS.list

Vous pouvez à présent passer directement au chapitre suivant assurant la création du domaine Active Directory SaMBa4.

Création du domaine Active Directory SaMBa4
Configuration de Kerberos

Sauvegarder et vider le fichier de /etc/krb5.conf afin d’y mettre la configuration suivante :

dc1ad:~# cp /etc/krb5.conf /etc/krb5.conf.orig
dc1ad:~# 0>/etc/krb5.conf
dc1ad:~# vi /etc/krb5.conf
[libdefaults]
        default_realm = FORMATION.FR
        dns_lookup_realm = false
        dns_lookup_kdc = true

[realms]
        FORMATION.FR = {
                kdc = @IP-DC1
                kdc = @IP-DC2
                admin_server = @IP-DC1 @IP-DC2
        }

[domain_realms]
    .formation.fr = FORMATION.FR
    formation.fr = FORMATION.FR

Remarque : Si vous avez compiler SaMBa4, vous devez dans un premier temps créer un lien symbolique depuis la configuration Kerberos situé dans « /usr/local/samba/share/setup/krb5.conf » vers racine « /etc/ » du système :

dc1ad:~# cp /usr/local/samba/share/setup/krb5.conf /usr/local/samba/share/setup/krb5.conf.orig
dc1ad:~# ln -sf /usr/local/samba/share/setup/krb5.conf /etc/krb5.conf
dc1ad:~# 0>/etc/krb5.conf
Création du domaine AD formation.fr

Avant de procéder à la création du domaine formation.fr vérifier les pré-requis suivant :

  1. Effacez le fichier /etc/samba/smb.conf s’il a déjà été généré (il sera régénéré par la commande de provisionning samba-tool)
  2. Le bon paramétrage du fichier /etc/krb5.conf
  3. Attention : La complexité du mot de passe doit-être respecté, le nombre de caractères est >=8 comprenant des chiffres et des caractères spéciaux. Éviter les $, @, ! et # pour la génération du domaine sinon vous risquez de rencontrer des erreurs (nous le changerons par la suite avec la commande samba-tool.

dc1ad:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.ori dc1ad:~# samba-tool domain provision --realm=FORMATION.FR --domain FORMATION --adminpass Passw0rd --server-role=dc --use-rfc2307 Looking up IPv6 addresses No IPv6 address will be assigned Setting up share.ldb Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=formation,DC=fr Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=formation,DC=fr Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf Setting up fake yp server settings Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: dc1ad NetBIOS Domain: FORMATION DNS Domain: formation.fr DOMAIN SID: S-1-5-21-1714617562-204349356-3624841221

Remarque :
–host-ip : on définit la carte réseau a utiliser
–use-rfc2307 : option permettant d’utiliser le stockage des droits posix dans l’AD

Dans le résultat de la commande précédente, nous remarquons qu’un nouveau fichier krb5.conf a été généré. Nous le remplaçons par celui précédemment créé :

dc1ad:~# mv /etc/krb5.conf /var/lib/samba/private/
dc1ad:~# ln -s /var/lib/samba/private/krb5.conf /etc/

Pour la suite du TP et pour des questions de facilité, nous allons dans un premier temps utiliser le DNS interne de SaMBa4. En production et assurer de la performance, nous passerons sur Bind9 via le chapitre : DNS migrer de SaMBaDNS vers Bind9

Définir dans le fichier « /etc/resolv.conf » le serveur lui-même en tant que DNS.

dc1ad:~# vi /etc/resolv.conf
domain formation.fr
search formation.fr
nameserver 127.0.0.1

MEMO, ne pas prendre en compte :Protection du fichier « /etc/resolv.conf » contre l’écrasement en raison de la présence du seconde carte réseau activée en DHCP chattr +i /etc/resolv.conf chattr -i /etc/resolv.conf

Vérifiez les forwarders DNS configurés dans le fichier « /etc/samba/smb.conf » par un serveur DNS externe :

# Global parameters
[global]
    netbios name = DC1AD
    realm = FORMATION.FR
    workgroup = FORMATION
    server role = active directory domain controller
   template shell = /bin/bash
   template homedir = /home/%ACCOUNTNAME%
   # Desactivation du partage imprimante
   printing = bsd
   printcap name = /dev/null
   # Desactivation du service DNS avec le moins "-"
   # server services = -dns
   # server services = rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbind, ntp_signd, kcc, dnsupdate, dns, s3fs
    dns forwarder = 8.8.8.8
    # Enable NIS extensions (rfc2307)
    idmap_ldb:use rfc2307 = yes
    # Resolution netbios
    #wins support = yes
    #name resolve order = wins bcast host
    #dns proxy = yes
   #allow dns updates = false
   #allow dns updates = nonsecure and secure
    # desactiver ipv6
    #interfaces = 127.0.0.1 @ipdc
    #bind interfaces only = yes

    # suite la migration en samba 4.2
    # alire : https://access.redhat.com/fr/node/2260371
    #ntlm auth = yes
    #raw NTLMv2 auth = yes
    #ldap server require strong auth = no
    #tls verify peer = no_check
    #client ipc signing = auto

    # BUGS dans les logs :
    # /var/lib/samba/usershares/admin$ failed. No such file or directory
    # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772154
    #usershare path =

[netlogon]
    path = /var/lib/samba/sysvol/formation.fr/scripts
    read only = No

[sysvol]
    path = /var/lib/samba/sysvol
    read only = No

Par défaut, sous Debian le paquet samba utilise le service samba-ad-dc et non plus le service samba.

dc1ad:~# systemctl unmask samba-ad-dc
dc1ad:~# systemctl enable samba-ad-dc
Synchronizing state of samba-ad-dc.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable samba-ad-dc
dc1ad:~# systemctl disable samba winbind nmbd smbd
Synchronizing state of samba.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable samba
update-rc.d: error: samba Default-Start contains no runlevels, aborting.
dc1ad:~# systemctl mask samba winbind nmbd smbd
Created symlink /etc/systemd/system/samba.service → /dev/null.
Created symlink /etc/systemd/system/winbind.service → /dev/null.
Created symlink /etc/systemd/system/nmbd.service → /dev/null.
Created symlink /etc/systemd/system/smbd.service → /dev/null.

Afin de prendre en compte tous les paramétrages, je recommande de rebooter la VM

dc1ad:~# reboot

Suit au reboot de la machine, vous pouvez à présent passer à la partie vérification :

Vérifications

Après votre reboot il vous faut vérifier que l’ensemble des briques nécessaire au bon fonctionnement de SaMBa4 sont opérationnelles :

dc1ad:~# ps -ef --forest
root       366     1  0 08:54 ?        00:00:00 /usr/sbin/samba
root       388   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       393   388  0 08:54 ?        00:00:00  |   \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root       408   393  0 08:54 ?        00:00:00  |       \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root       409   393  0 08:54 ?        00:00:00  |       \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root       411   393  0 08:54 ?        00:00:00  |       \_ /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground
root       389   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       390   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       391   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       392   366  0 08:54 ?        00:00:05  \_ /usr/sbin/samba
root       394   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       395   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       396   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       397   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       401   397  0 08:54 ?        00:00:00  |   \_ /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root       413   401  0 08:54 ?        00:00:00  |       \_ /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground
root       398   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       399   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       400   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba
root       402   366  0 08:54 ?        00:00:00  \_ /usr/sbin/samba

Vérifier la partie authentification avec Kerberos :

Remarque : Le compte Administrateur par défaut est Administrator, en raison d’un caractère parasite nous avons remplacé le @ par un A majuscule pour la création du domaine précedement.

Executer la commande kinit en mode verbose afin de diagnostiquer les éventuelles erreurs de kerberos (ici problème de mot de passe)

dc1ad:~# kinit -V Administrator
Password for Administrator@FORMATION.FR: P@ssw0rd
Using default cache: /tmp/krb5cc_1000
Using principal: Administrator@FORMATION.FR
Password for Administrator@FORMATION.FR:
kinit: Password incorrect while getting initial credentials

Ici la commande kinit nous retourne un problème d’expiration de mot de passe. Nous plus loin dans le TP le méthode pour

dc1ad:~# kinit -V Administrator
Password for Administrator@FORMATION.FR: Passw0rd
Using default cache: /tmp/krb5cc_0
Warning: Your password will expire in 41 days on Mon 25 Nov 2019 08:28:00 AM CET
Authenticated to Kerberos v5

Les jetons kerberos sont stockés dans le répertoire « /tmp ». Il faut pense à verifier que celui-ci dispose de suffisamment d’espace afin de pouvoir fonctionner.

dc1ad:~# ll /tmp/
-rw------- 1 users0     domain users 1.5K Sep  9 10:29 krb5cc_884002014_xEXDGy
-rw------- 1 users1     domain users 1.5K Sep  8 17:12 krb5cc_884002004_HDTeR0
-rw------- 1 users2     domain users 1.5K Sep  8 22:03 krb5cc_884002005_7EI9cQ
-rw------- 1 users3     domain users 1.5K Sep  7 17:47 krb5cc_884002007_BTl4OU
-rw------- 1 users4     domain users 1.5K Sep  9 08:21 krb5cc_884002008_Zppk75
-rw------- 1 users5     domain users 1.5K Sep  9 10:07 krb5cc_884002009_JBGnaV
-rw------- 1 users6     domain users 1.5K Sep  8 15:55 krb5cc_884002010_KbZGSF
-rw------- 1 users7     domain users 1.5K Sep  8 18:24 krb5cc_884002011_vEW2qS
-rw------- 1 users8     domain users 1.6K Sep  9 10:34 krb5cc_884002012_EXZt5T
-rw------- 1 users9     domain users 1.5K Sep  8 13:15 krb5cc_884002013_Gc8Gl7

Il est possible de vérifier la lites des tickets Kerberos

dc1ad:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@FORMATION.FR

Valid starting       Expires              Service principal
09/10/2018 10:34:55  09/10/2018 20:34:55  krbtgt/FORMATION.FR@FORMATION.FR
    renew until 09/11/2018 10:34:51

Remarque : Si vous souhaitez changer le mot de passe avant la lecture du chapitre La commande miracle : samba-tool samba-tool user setpassword Administrator

Vérifier la partie DNS :

dc1ad:~# dig @localhost cnrs.fr
dc1ad:~# dig @localhost dc1ad.formation.fr
dc1ad:~# dig -t SRV @localhost _ldap._tcp.formation.fr

Vérifier que les champs DNS nécessaire à votre domaine sont bien créés :

dc1ad:~# samba_dnsupdate --verbose
...
No DNS updates needed

S’il subsiste des erreurs, utiliser la commande suivante pour outre passer Kerberos :

dc1ad:~# samba_dnsupdate  --use-samba-tool
Transférer les données du TP N°1 SaMBa3 vers le SaMBa4

Vérifier la présence de l’outils rsync sinon l’installer :

dc1ad:~# apt-get install rsync

Activer le droit d’utiliser la compte root via ssh :

dc1ad:~# vi /etc/ssh/sshd_config
...
PermitRootLogin yes
...
dc1ad:~# /etc/init.d/ssh restart

Créer le fichier « /root/SaMBaOLD » sur le serveur cible dc1ad

dc1ad:~# mkdir /root/SaMBaOLD

Transférer les données du DC1OLD vers DC1AD

Depuis le serveur DC1OLD

dc1old:~# /etc/init.d/samba stop
dc1old:~# rsync -aP /var/lib/samba/ root@dc1ad:/root/SaMBaOLD/
dc1old:~# rsync -aP /etc/samba/smb.conf root@dc1ad:/root/SaMBaOLD/

Depuis le serveur DC1AD

Editer afin de corriger le fichier « /root/SaMBaOLD/smb.conf » :

  1. Remplacer le nom du serveur
  2. Modifier le nom du workgroup car vous risquez de recevoir le message Realm ‘FORMATION.FR’ must not be equal to short domain name ‘FORMATION.FR’!
  3. Supprimer toute la partie configuration LDAP
    workgroup = FORMATION
    netbios name = dc1ad
    server string = Samba-AD DC1 Server

Si l’ensemble des paramètres précédents sont OK, vous pouvez migrer de SaMBa3LDAP à SaMBa4AD

Import des anciens computers/users avec création du domaine AD

dc1ad:~# rm /etc/samba/smb.conf
dc1ad:~# mv /root/SaMBaOLD/private/* /root/SaMBaOLD/
    workgroup = formation.fr
    netbios name = dc1ad
    server string = Samba-AD DC1 Server
    passdb backend = ldapsam:ldap://10.0.2.6/
dc1ad:~# samba-tool domain classicupgrade --dbdir=/root/SaMBaOLD/ --realm=LABTEST.FR /root/SaMBaOLD/smb.conf
Reading smb.conf
Provisioning
Exporting account policy
Exporting groups
Exporting users
  Skipping wellknown rid=501 (for username=nobody)
Next rid = 3001
Exporting posix attributes
Reading WINS database
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=labtest,DC=fr
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Setting acl on sysvol skipped
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=labtest,DC=fr
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Admin password:        !ENW(hROE6+N,(X![e$.sfNfI
Server Role:           active directory domain controller
Hostname:              dc1ad
NetBIOS Domain:        FORMATION.FR
DNS Domain:            labtest.fr
DOMAIN SID:            S-1-5-21-927081477-359489940-3057051776
Importing WINS database
Importing Account policy
Importing idmap database
Cannot open idmap database, Ignoring: [Errno 2] No such file or directory
Adding groups
Importing groups
Group already exists sid=S-1-5-21-927081477-359489940-3057051776-512, groupname=Domain Admins existing_groupname=Domain Admins, Ignoring.
Group already exists sid=S-1-5-21-927081477-359489940-3057051776-513, groupname=Domain Users existing_groupname=Domain Users, Ignoring.
Group already exists sid=S-1-5-21-927081477-359489940-3057051776-514, groupname=Domain Guests existing_groupname=Domain Guests, Ignoring.
Group already exists sid=S-1-5-21-927081477-359489940-3057051776-515, groupname=Domain Computers existing_groupname=Domain Computers, Ignoring.
Group already exists sid=S-1-5-32-544, groupname=Administrators existing_groupname=Administrators, Ignoring.
Group already exists sid=S-1-5-32-548, groupname=Account Operators existing_groupname=Account Operators, Ignoring.
Group already exists sid=S-1-5-32-550, groupname=Print Operators existing_groupname=Print Operators, Ignoring.
Group already exists sid=S-1-5-32-551, groupname=Backup Operators existing_groupname=Backup Operators, Ignoring.
Group already exists sid=S-1-5-32-552, groupname=Replicators existing_groupname=Replicator, Ignoring.
Committing 'add groups' transaction to disk
Adding users
Importing users
Committing 'add users' transaction to disk
Adding users to groups
Committing 'add users to groups' transaction to disk
  • [ ] Après la migration de SaMBa3LDAP à SaMBa4AD, dans le fichier « /etc/samba/smb.conf », rajouter le forwarder DNS et l’ID mappings :
dns forwarder = 8.8.8.8
idmap_ldb:use rfc2307 = yes

Vérifier la présence des extensions NIS dans l’AD

root@dc1ad:/etc/samba# ldbsearch -H /var/lib/samba/private/sam.ldb -s base -b CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System,DC=formation,DC=fr cn

# record 1
dn: CN=ypservers,CN=ypServ30,CN=RpcServices,CN=System,DC=formation,DC=fr
cn: ypservers

# returned 1 records
# 1 entries
# 0 referrals

Reappliquer un mot de passe au compte Administrator

dc1ad:~# samba-tool user setpassword Administrator

Suite à cette migration, vous pouvez enchainer sur les chapitres :

Maîtriser les particularités d’implémentation d’un service SaMBa4

Les astuces d’Active Directory

La commande miracle : samba-tool

dc1ad:~# samba-tool
Usage: samba-tool <subcommand>
  dbcheck     - Check local AD database for errors.
  delegation  - Delegation management.
  dns         - Domain Name Service (DNS) management.
  domain      - Domain management.
  drs         - Directory Replication Services (DRS) management.
  dsacl       - DS ACLs manipulation.
  fsmo        - Flexible Single Master Operations (FSMO) roles management.
  gpo         - Group Policy Object (GPO) management.
  group       - Group management.
  ldapcmp     - Compare two ldap databases.
  ntacl       - NT ACLs manipulation.
  processes   - List processes (to aid debugging on systems without setproctitle).
  rodc        - Read-Only Domain Controller (RODC) management.
  sites       - Sites management.
  spn         - Service Principal Name (SPN) management.
  testparm    - Syntax check the configuration file.
  time        - Retrieve the time on a server.
  user        - User management.
  visualize   - Produces graphical representations of Samba network state

Vérifier l’intégrité de la base AD

dc1ad:~# samba-tool dbcheck
Checking 216 objects
Checked 216 bjects (0 errors)

Vérifier et réparer de la base AD

dc1ad:~# samba-tool dbcheck --fix
Checking 216 objects
Checked 216 objects (0 errors)

Ajouter un enregistrement DNS de type A

dc1ad:~# samba-tool dns add -U Administrator --password='Pa$$w0rd' 10.0.2.4 formation.fr www A 10.0.2.100

Ajouter un enregistrement DNS de type PTR

dc1ad:~# samba-tool dns add -U Administrator --password='Pa$$w0rd' 10.0.2.100 2.0.10.in-addr.arpa 100 PTR www.formation.fr

Ajouter l’utilisateur admin avec le mot de passe admin2018

dc1ad:~# samba-tool user add admin admin2018 --given-name=Admin --surname=ISTRATOR --department=info --company="FORMATION" --mail-address=admin@formation.fr 

Ajouter l’utilisateur admin avec un mot de passe aléatoire

dc1ad:~# samba-tool user add admin --random-password --given-name=Admin --surname=ISTRATOR --department=info --company="FORMATION" --mail-address=admin@formation.fr 

Ajouter l’utilisateur admin dans le groupe info

dc1ad:~# samba-tool group addmembers info admin

Supprimer l’utilisateur

# samba-tool user delete admin

Définir un nouveau mot de passe à l’utilisateur admin

dc1ad:~# samba-tool user setpassword --newpassword=titi admin

ou 

dc1ad:~# samba-tool user setpassword admin

Supprimer l’utilisateur admin du groupe info

dc1ad:~# samba-tool group removemembers info admin

Remarque :
Changer le mot de passe en ligne de commande
printf « %s\n%s\n » ‘*colombet!’ ‘colombet’|smbpasswd -s colombet

Désactiver l’expiration du mot de passe
net sam set pwnoexp « colombet » no

Désactiver le changement de mot de passe à l’ouverture de session
net sam set pwdmustchangenow « colombet » no

Déverrouiller le compte
net sam set disabled colombet no

Intégrer un second contrôleur au domaine formation.fr

Après avoir cloné le premier contrôleur de domaine DC1AD depuis la console VirtualBox en nouveau contrôleur vierge DC2AD (reset MAC@) vous pouvez.

dc2ad:~# samba-tool domain join FORMATION.FR DC -UAdministrator
Finding a writeable DC for domain 'FORMATION.FR'
Found DC dc1ad.formation.fr
Password for [WORKGROUP\Administrator]:
workgroup is WORKGROUP
realm is formation.fr
Adding CN=DC2AD,OU=Domain Controllers,DC=formation,DC=fr
Adding CN=DC2AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
Adding CN=NTDS Settings,CN=DC2AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
Adding SPNs to CN=DC2AD,OU=Domain Controllers,DC=formation,DC=fr
Setting account password for DC2AD$
Enabling account
Calling bare provision
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Provision OK for domain DN DC=formation,DC=fr
Starting replication
Schema-DN[CN=Schema,CN=Configuration,DC=formation,DC=fr] objects[402/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=formation,DC=fr] objects[804/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=formation,DC=fr] objects[1206/1550] linked_values[0/0]
Schema-DN[CN=Schema,CN=Configuration,DC=formation,DC=fr] objects[1550/1550] linked_values[0/0]
Analyze and apply schema objects
Partition[CN=Configuration,DC=formation,DC=fr] objects[402/1614] linked_values[0/0]
Partition[CN=Configuration,DC=formation,DC=fr] objects[804/1614] linked_values[0/0]
Partition[CN=Configuration,DC=formation,DC=fr] objects[1206/1614] linked_values[0/0]
Partition[CN=Configuration,DC=formation,DC=fr] objects[1608/1614] linked_values[0/0]
Partition[CN=Configuration,DC=formation,DC=fr] objects[1614/1614] linked_values[30/0]
Replicating critical objects from the base DN of the domain
Partition[DC=formation,DC=fr] objects[97/97] linked_values[23/0]
Partition[DC=formation,DC=fr] objects[360/263] linked_values[23/0]
Done with always replicated NC (base, config, schema)
Replicating DC=DomainDnsZones,DC=formation,DC=fr
Partition[DC=DomainDnsZones,DC=formation,DC=fr] objects[40/40] linked_values[0/0]
Replicating DC=ForestDnsZones,DC=formation,DC=fr
Partition[DC=ForestDnsZones,DC=formation,DC=fr] objects[18/18] linked_values[0/0]
Committing SAM database
Sending DsReplicaUpdateRefs for all the replicated partitions
Setting isSynchronized and dsServiceName
Setting up secrets database
Joined domain WORKGROUP (SID S-1-5-21-648631170-3456211842-3251463303) as a DC

Il faut impérativement redémarrer la machine DC2AD.

dc2ad:~# samba-tool drs showrepl

Default-First-Site-Name\DC2AD
DSA Options: 0x00000001
DSA object GUID: caec22d8-ba0d-42df-9aa2-1edf8fc7ee32
DSA invocationId: abe1c11c-bf4a-483d-bc8d-7e8361c8ddad

==== INBOUND NEIGHBORS ====

DC=formation,DC=fr
    Default-First-Site-Name\DC1AD via RPC
        DSA object GUID: 63ef3f0f-3591-480d-adf5-489dfbe234be
        Last attempt @ Mon Sep 17 14:20:23 2018 CEST was successful
        0 consecutive failure(s).
        Last success @ Mon Sep 17 14:20:23 2018 CEST

CN=Configuration,DC=formation,DC=fr
    Default-First-Site-Name\DC1AD via RPC
        DSA object GUID: 63ef3f0f-3591-480d-adf5-489dfbe234be
        Last attempt @ Mon Sep 17 14:20:23 2018 CEST was successful
        0 consecutive failure(s).
        Last success @ Mon Sep 17 14:20:23 2018 CEST

DC=DomainDnsZones,DC=formation,DC=fr
    Default-First-Site-Name\DC1AD via RPC
        DSA object GUID: 63ef3f0f-3591-480d-adf5-489dfbe234be
        Last attempt @ Mon Sep 17 14:20:23 2018 CEST was successful
        0 consecutive failure(s).
        Last success @ Mon Sep 17 14:20:23 2018 CEST

DC=ForestDnsZones,DC=formation,DC=fr
    Default-First-Site-Name\DC1AD via RPC
        DSA object GUID: 63ef3f0f-3591-480d-adf5-489dfbe234be
        Last attempt @ Mon Sep 17 14:20:23 2018 CEST was successful
        0 consecutive failure(s).
        Last success @ Mon Sep 17 14:20:23 2018 CEST

CN=Schema,CN=Configuration,DC=formation,DC=fr
    Default-First-Site-Name\DC1AD via RPC
        DSA object GUID: 63ef3f0f-3591-480d-adf5-489dfbe234be
        Last attempt @ Mon Sep 17 14:20:23 2018 CEST was successful
        0 consecutive failure(s).
        Last success @ Mon Sep 17 14:20:23 2018 CEST

==== OUTBOUND NEIGHBORS ====

==== KCC CONNECTION OBJECTS ====

Connection --
    Connection name: 4cb78de6-49cf-4943-8518-cb178e54d798
    Enabled        : TRUE
    Server DNS name : dc1ad.formation.fr
    Server DN name  : CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
        TransportType: RPC
        options: 0x00000001
Warning: No NC replicated for Connection!

Forcer une replication manuelle de toutes les branches

dc1ad:~# samba-tool drs replicate DC2AD DC1AD dc=formation,dc=fr --full-sync
Replicate from DC1AD to DC2AD was successful.

Depuis les outils RSAT vous pouvez vérifier l’état des 2 serveurs :

rsat-online-d-w400

Serveur NTP pour le temps Windows

La configuration du service NTP est une notion très importante dans SaMBa4 Active Directory car celui-ci est basé sur l’échange de ticket via Kerberos. Les machines doivent-être parfaitement synchronisées au niveau temps afin de valider les ouvertures de sessions aux utilisateurs.

Depuis Debian 8, il est conseillé de passer par systemd. Ci-dessous, l’ancien mode pour mettre à jour le serveur DC.

~~dc1ad:~# apt-get install ntpdate
dc1ad:~# ntpdate fr.pool.ntp.org
10 Sep 10:42:08 ntpdate[600]: adjust time server 37.187.2.84 offset 0.005462 sec

Installation du service de temps pour notre réseau formation.fr :

dc1ad:~# apt-get install ntp

Rajouter les lignes suivantes au fichier « /etc/ntp.conf » afin que les postes Windows puissent se mettre à jour automatiquement via le protocol MS-SNTP signé.

dc1ad:~# vi /etc/ntp.conf
....
ntpsigndsocket /var/lib/samba/ntp_signd
restrict -4 default kod notrap nomodify nopeer noquery mssntp
restrict -6 default kod notrap nomodify nopeer noquery mssntp
....

Vérifier les droits présents sur le répertoire stockant le socket SaMBa4 pour l’authentification NTP.

dc1ad:~# chgrp ntp /var/lib/samba/ntp_signd
dc1ad:~# usermod -a -G staff ntp

Relancer le serveur de temps et vérifier la prise en compte du socket ntp_signed:

dc1ad:~# /etc/init.d/ntp restart
[ ok ] Restarting ntp (via systemctl): ntp.

dc1ad:~# netstat -xpln | grep signd
unix  2      [ ACC ]     STREAM     LISTENING     12161    421/samba   /var/lib/samba/ntp_signd/socket

Vous pouvez également vérifier dans le fichier de log « /var/log/syslog » la présence de la ligne suivante :

Sep 10 10:54:41 dc1ad ntpd[1732]: ntpd 4.2.8p10@1.3728-o Sun Feb 25 21:22:55 UTC 2018 (1): Starting
Sep 10 10:54:41 dc1ad ntpd[1732]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:113
Sep 10 10:54:41 dc1ad ntp[1723]: Starting NTP server: ntpd.
Sep 10 10:54:41 dc1ad ntpd[1735]: MS-SNTP signd operations currently block ntpd degrading service to all clients.

Valider la communication avec les autres stratum :

dc1ad:~# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 1.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 2.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 3.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
......

Depuis un poste client Windows vous pouvez forcer une (re)synchronisation en executant la commande suivante depuis une console DOS avec les droits administrateurs. La commande w32tm demande au serveur ntp client local windows de faire une synchronisation avec le DC. (il faut être patient …)

console_w32t-w400

Remarque : La commande a utiliser : w32tm /resync /nowait

Mode debug sur les clients NTP Windows :

  • Reconfigurer vos postes clients afin qu’ils utilisent l’AD pour le ntp :
w32tm /config /syncfromflags:domhier
w32tm /config /update
w32tm /resync /nowait
  • Sélectionner un des deux mode de fonctionnement du client ntp windows :
    • Fonctionnement en mode client ADS; c’est le mode Nt5DS par default pour un domaine SaMBa4. Pour cela, éditer via regedit la clé de registre suivante :
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
    ...
    "Type"="Nt5DS"
    
    • Fonctionnement en mode ancien client NTP. Pour basculer dans ce mode, depuis une console DOS avec les droits administrateurs executer la commande : net time /setsntp:ntp.formation.fr. Vous pouvez vérifier le résultat en éditant via regedit la clé de registre suivante :
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
    ...
    "Type"="NTP"
    "ntpserver"="ntp.formation.fr"
    
  • Vérifier que le client ntp pointe vers votre serveur depuis une console DOS avec les droits administrateurs executer la commande :
w32tm /monitor

Synchroniser le répertoire SYSVOL via RSYNC pour les GPO

Sur le serveur DC1AD installer l’outil de synchronisation RSYNC :

dc1ad:~# apt-get install rsync

Editer le fichier « /etc/default/rsync » afin de l’activer en mode daemon :

dc1ad:~# vi /etc/default/rsync
RSYNC_ENABLE=true

Créer le fichier « /etc/rsyncd.conf » indiquant le dossier SYSVOL à synchroniser :

dc1ad:~# vi /etc/rsyncd.conf
reverse lookup = no
[SysVol]
path = /var/lib/samba/sysvol/
comment = Samba Sysvol Share
uid = root
gid = root
read only = yes
auth users = sysvol-replication
secrets file = /etc/samba/rsyncd.secret

Créer le fichier de secret « /etc/samba/rsyncd.secret » :

dc1ad:~# vi /etc/samba/rsyncd.secret
sysvol-replication:L9FchHVPNyqNSi1

Appliquer les droits uniquement pour l’utilisateur root :

dc1ad:~# chmod 600 /etc/samba/rsyncd.secret

Lancer le service rsyncd :

dc1ad:~# /etc/init.d/rsync status
● rsync.service - fast remote file copy program daemon
   Loaded: loaded (/lib/systemd/system/rsync.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2019-10-20 17:49:34 CEST; 800ms ago
 Main PID: 2201 (rsync)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/rsync.service
           └─2201 /usr/bin/rsync --daemon --no-detach
Oct 20 17:49:34 dc1ad systemd[1]: Started fast remote file copy program daemon.
Oct 20 17:49:34 dc1ad rsyncd[2201]: rsyncd version 3.1.2 starting, listening on port 873

Remarque : Vous pouvez utiliser cette astuce pour générer un mot de passe : openssl rand -base64 16

Vérifier les ACL sur le Sysvol, et le cas échéant ré-initialiser les ACLs

dc1ad:~# samba-tool ntacl sysvolreset 
dc1ad:~# samba-tool ntacl sysvolcheck 

Sur le serveur DC2AD installer l’outil de synchronisation RSYNC :

dc2ad:~# apt-get install rsync

Renseigner le mot de passe de l’utilisateur sysvol-replication du dc1ad :

dc2ad:~# vi /etc/samba/rsync-sysvol.secret
L9FchHVPNyqNSi1

Appliquer les droits uniquement pour l’utilisateur root :

dc2ad:~# chmod 600 /etc/samba/rsync-sysvol.secret

Tester la synchronisation sans modification (mode dry):

dc2ad:~# rsync --dry-run -XAavz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@dc1ad/SysVol/ /var/lib/samba/sysvol/
receiving file list ... done
./
formation.fr/
formation.fr/Policies/
formation.fr/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/
formation.fr/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI
formation.fr/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/
formation.fr/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/USER/
formation.fr/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/
formation.fr/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/GPT.INI
formation.fr/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/MACHINE/
formation.fr/Policies/{6AC1786C-016F-11D2-945F-00C04FB984F9}/USER/
formation.fr/scripts/

sent 59 bytes  received 1,212 bytes  847.33 bytes/sec
total size is 40  speedup is 0.03 (DRY RUN)

Programmer la synchronisation toutes les 5 minutes :

dc2ad:~# crontab -e
*/5 * * * * rsync -avz --delete-after --password-file=/etc/samba/rsync-sysvol.secret rsync://sysvol-replication@10.X.X.X/SysVol/ /var/lib/samba/sysvol/ >/dev/null 2>&1

Logs sur DC1AD suite à une synchronisation initié depuis DC2AD:

Sep 24 08:27:49 dc1ad rsyncd[664]: connect from UNDETERMINED (10.X.X.X)
Sep 24 08:27:49 dc1ad rsyncd[664]: rsync on SysVol/ from sysvol-replication@UNDETERMINED (10.X.X.X)
Sep 24 08:27:49 dc1ad rsyncd[664]: building file list
Sep 24 08:27:49 dc1ad rsyncd[664]: sent 1236 bytes  received 69 bytes  total size 40

DNS migrer de SaMBaDNS vers Bind9

Le DNS intégré dans SaMBa4 est parfaitement adapté et fonctionnel à des fins de test mais de la passer en production, je le déconseille fortement.

En effet, le DNS interne de SaMBa4 est très simple à mettre en place mais il a deux inconvénients majeurs, il ne fait pas de cache et il est impossible de faire une configuration DNS avancée comme par exemple les vues, logs détaillés …

Afin d’y remédier il est nécessaire de basculer en mode Bind DLZ. Pour cela, il est nécessaire d’installer un serveur Bind9 en frontal de SaMBa4 et ajouter l’extension DLZ pour bénéficier de la performance et de la souplesse de Bind9. La gestion des zones DNS intégrées à Active Directory sera identique a celle du DNS interne.

Vérifier la présence des paramètres suivants au fichier « /etc/hosts »

dc1ad:~# vi /etc/hosts
127.0.0.1   localhost
@IPDC1 dc1ad.formation.fr dc1ad
@IPDC2 dc2ad.formation.fr dc2ad

Installer Bind9 sur DC1AD et DC2AD:

dc1ad:~# apt-get install bind9
Adding system user `bind' (UID 108) ...
Adding new user `bind' (UID 108) with group `bind' ...
Not creating home directory `/var/cache/bind'.
wrote key file "/etc/bind/rndc.key"

Basculer du DNS interne à BIND9, en supprimant lu rôle DNS sur le serveur SaMBa4 depuis le fichier « /etc/samba/smb.conf » :

[global]
...
server services = -dns
...

Commenter ou supprimer la ligne de forwarder DNS dans le fichier « /etc/samba/smb.conf » car elle n’est plus nécessaire.

...
# dns forwarders = 8.8.8.8
...

Activer la prise en charge de SaMBa4 pour Bind9

# vi /etc/bind/named.conf

// SaMBa4
include "/var/lib/samba/private/named.conf";

Créer le fichier « /var/lib/samba/private/named.conf » et activer l’extension en fonction de votre version de Bind9 et Linux.

Détecter la version :

dc1ad:~# named -v
BIND 9.10.3-P4-Debian <id:ebd72b3>

Créer le fichier « /var/lib/samba/private/named.conf »

dc1ad:~# vi /var/lib/samba/private/named.conf
dlz "AD DNS Zone" {
    # For BIND 9.8.x
    #database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9.so";

    # For BIND 9.9.x
    #database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_9.so";

    # For BIND 9.10.x
    database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_10.so";

    # For BIND 9.11.x
    #database "dlopen /usr/lib/x86_64-linux-gnu/samba/bind9/dlz_bind9_11.so";
};

Créer le dossier de logs de Bind9

dc1ad:~# mkdir /var/log/named
dc1ad:~# chown bind:bind /var/log/named

Ajouter les options suivantes au fichier « /etc/bind/named.conf.options »

dc1ad:~# vi /etc/bind/named.conf.options
options {
...

     // Masquage de la version
     version "[secured]";

     // On cache les requetes
     forwarders {
                8.8.8.8;
     };

     // DNSSEC
     dnssec-validation no;

    // On autorise notre réseau 
    allow-recursion { 127.0.0.1; 10.0.2.0/24; };
    allow-query-cache { 127.0.0.1; 10.0.2.0/24; };

     // MAJ DNS dynamique via Kerberos
      tkey-gssapi-keytab "/var/lib/samba/private/dns.keytab";

};

MAJ automatique des enregistrements DNS via Kerberos

dc1ad:~# touch /var/lib/samba/private/dns.keytab
dc1ad:~# chmod 640 /var/lib/samba/private/dns.keytab
dc1ad:~# chown root:bind /var/lib/samba/private/dns.keytab

Nous pouvons à présent migrer du DNS interne vers Bind9

dc1ad:~# samba_upgradedns --dns-backend=BIND9_DLZ
Reading domain information
DNS accounts already exist
No zone file /var/lib/samba/private/dns/FORMATION.FR.zone
DNS records will be automatically created
DNS partitions already exist
Adding dns-dc1ad account
See /var/lib/samba/private/named.conf for an example configuration include file for BIND
and /var/lib/samba/private/named.txt for further documentation required for secure DNS updates
Finished upgrading DNS
You have switched to using BIND9_DLZ as your dns backend, but still have the internal dns starting. Please make sure you add '-dns' to your server services line in your smb.conf.

Relance du serveur DNS Bind9

dc1ad:~# service bind9 restart

Vérification que le serveur Bind9 écoute bien sur le port 53 :

dc1ad:~# netstat -tapn | grep 53
tcp        0      0 10.X.X.X:53         0.0.0.0:*               LISTEN      397/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      397/named
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      397/named
tcp6       0      0 :::53                   :::*                    LISTEN      397/named
tcp6       0      0 ::1:953                 :::*                    LISTEN      397/named

Valider la bonne MAJ des enregistrements

dc2ad:~# samba_dnsupdate --verbose --all-names
...
update(nsupdate): SRV _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.formation.fr dc2ad.formation.fr 389
Calling nsupdate for SRV _ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.formation.fr dc2ad.formation.fr 389 (add)
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id:      0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; UPDATE SECTION:
_ldap._tcp.Default-First-Site-Name._sites.ForestDnsZones.formation.fr. 900 IN SRV 0 100 389 dc2ad.formation.fr.
...

Tester la résolution DNS

dc1ad:~# dig @localhost dc1ad.formation.fr
dc1ad:~# dig -t SRV @localhost _ldap._tcp.formation.fr

Si vous rencontrez des problèmes avec Bind9, vous pouvons l’executer en mode DEBUG:

dc1ad:~# named -u bind -f -g 2>&1 | tee /tmp/named.log

Optionnel : revenir au DNS interne SaMBa4

# samba_upgradedns --dns-backend=SAMBA_INTERNAL
Dans /usr/local/samba/etc/smb.conf
server services = dns

Diagnostiquer et résoudre les problèmes les plus courants

Gestion des logs

Cf : https://wiki.samba.org/index.php/Client_specific_logging

SaMBa4

Il est très important d’avoir des logs qui donnent des infos pertinentes. Par défaut SaMBa4 est réglé sur un niveau de détail de 0. Par conséquence, le fichier journal n’aura pas l’information dont vous avez besoin, vous devez donc augmenter le niveau des logs en ajoutant la ligne suivante à la section [global] de votre smb.conf (/etc/samba/smb.conf):

log level = 3

BIND9

logging {
        channel simple_log {
                file "/var/log/named/bind.log" versions 3;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        channel audit_log {
                file "/var/log/named/audit.log" versions 3;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        channel query_log {
                file "/var/log/named/query.log" versions 3;
                print-time yes;
                print-severity yes;
                print-category yes;
        };

        category default        { simple_log; };
        category general        { simple_log; };
        category security       { audit_log; simple_log; };
        category config         { simple_log; };
        category resolver       { audit_log; };
        category xfer-in        { audit_log; };
        category xfer-out       { audit_log; };
        category notify         { audit_log; };
        category client         { audit_log; };
        category network        { audit_log; };
        category update         { audit_log; };
        category queries        { query_log; };
        category lame-servers     { null; };
};

Migration de SaMBa4 stretch to buster – TP n°3

Prérequis avant migration en Debian

dc1ad:~# systemctl disable nmbd
dc1ad:~# systemctl disable smbd
dc1ad:~# systemctl unmask samba-ad-dc
dc1ad:~# systemctl enable samba-ad-dc 
dc1ad:~# systemctl unmask nfs-common.service

Recherche d’objet dans la corbeille pouvant poser problème durant la migration :

dc1ad:~# ldbsearch --cross-ncs --show-deleted -H /var/lib/samba/private/sam.ldb | grep '\0ADEL'

dn: cn=vieuxcompte\0ADEL:0492c6c3-1111-578d-86db-5fe4a7fbd650,CN=Deleted Objects,DC=formation,DC=fr

Si présent, les supprimer depuis l’outil ADExplorer ou avec la commande suivante :

dc1ad:~# ldbdel --cross-ncs --show-deleted --relax -H /var/lib/samba/private/sam.ldb

'cn=vieuxcompte\0ADEL:0492c6c3-1111-578d-86db-5fe4a7fbd650,CN=Deleted Objects,DC=formation,DC=fr'

Deleted 1 record

Vérification de la base AD

dc1ad:~# samba-tool dbcheck
dc1ad:~# samba-tool dbcheck --cross-ncs --fix
dc1ad:~# samba-tool dbcheck --cross-ncs --reset-well-known-acls --fix --yes
Checking 3489 objects
Checked 3489 objects (0 errors)

Affichage des rôles depuis DC2AD

dc2ad:~# samba-tool fsmo show
SchemaMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
InfrastructureMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
RidAllocationMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
DomainNamingMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=DC1AD,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=formation,DC=fr

Migration des rôles vers DC2AD

dc2ad:~# samba-tool fsmo seize --role=all
Attempting transfer...
This DC already has the 'rid' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'pdc' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'naming' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'infrastructure' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'schema' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'domaindns' FSMO role
Transfer successful, not seizing role
Attempting transfer...
This DC already has the 'forestdns' FSMO role
Transfer successful, not seizing role

On désactive winbind pour la migration

dc1ad:~# /etc/init.d/winbind stop
dc1ad:~# systemctl disable winbind
dc1ad:~# systemctl mask winbind

On bascule les sources debian sur Stretch

dc1ad:~# sed -i 's/jessie/stretch/g' /etc/apt/sources.list

Lancer la migration de Debian 8 en Debian 9

dc1ad:~# apt-get update
dc1ad:~# apt full-upgrade
dc1ad:~# apt-get --fix-broken install
dc1ad:~# apt-get autoremove --purge

Si vous êtes en BIND9_DLZ, corriger en fonction de votre version les fichiers suivants

vi /var/lib/samba/private/named.conf

Fixer les derniers problèmes éventuels sur la base AD

samba-tool dbcheck --cross-ncs --fix --yes 'fix_replmetadata_unsorted_attid'
samba-tool dbcheck --cross-ncs --fix --yes 'fix_replica_locations'
samba-tool dbcheck --cross-ncs --fix --yes

cf : https://wiki.samba.org/index.php/Updating_Samba#Samba_AD_DC_Database_Check
cf : https://wiki.samba.org/index.php/Transferring_and_Seizing_FSMO_Roles
cf : https://wiki.samba.org/index.php/Manually_Replicating_Directory_Partitions
cf : https://wiki.samba.org/index.php/Verifying_and_Creating_a_DC_DNS_Record
cf : https://help.univention.com/t/samba-4-deleted-objects/6445

Découvrir les nouveaux usages rendus possibles avec SaMBa4

Maitriser les GPO et les ADMX

Les fichiers ADMX sont les paramètres GPO de Windows qui sont représentés sous la forme de fichiers « .admx » (anciennement ADM). Chaque OS à ces fichiers ADMX (depuis Windows Vista jusqu’à 10).

Ces fichiers contiennent des instructions XML permettant de définir les différentes stratégies de groupe pour votre parc Microsoft. Ils sont lisibles et modifiables uniquement à partir de Windows Server.

Dans un premier temps, télécharger et installer les ADMX pour l’administration depuis votre Windows Server ou votre Windows 10 RSAT: Administrative Templates (.admx) for Windows 10 April 2018 Update (1803) – Français

L’installation des ADMX s’effectue dans « C:\Program Files (x86)\Microsoft Group Policy\Windows 10 April 2018 Update (1803) v2\ ». Dans ce répertoire vous trouverez de nombreux fichiers ADMX. Chacun de ces fichiers correspond à une série de paramètres définissables dans les GPO.

Afin de disposer des ADMX depuis n’importe qu’elle machine ayant les outils RSAT, nous devons les copiers dans le repertoire SYSVOL de votre domaine. Ici nous ferons une copie de « C:\Program Files (x86)\Microsoft Group Policy\Windows 10 April 2018 Update (1803) v2\ » vers « \dc1ad\sysvol\formation.fr\Policies\ »

L’intégration des GPO dans le contrôleur de domaine est terminée, nous allons maintenant procéder à la vérification via la création d’une GPO ondrive :

GPO suppression Onedrive avec filtre WMI

gpo_ondrive_1
gpo_ondrive_11

Explication : Créer un nouvel objet de stratégie de groupe en faisant clic droit sur le domaine formation.fr contenant les stratégies de groupe puis créez un nouvel objet. Éditez ensuite cet objet grâce à un clic droit dessus et cliquez sur « Modifier ».

gpo_ondrive_2

Explication : Nommer le nouvel objet, par exemple ici on utilise la règle de nommage nomdudomaine_ordinateur/utilisateur_cible.

gpo_ondrive_3

Explication :Cette stratégie s’applique uniquement aux ordinateurs et suivant la règle de nommage précédente.

gpo_ondrive_4

Explication : Création d’un filtre WMI qui cible uniquement les machines Windows 10

gpo_ondrive_5

Explication : Dans Stratégie d’ordinateur, Modèles d’administration, Composants Windows, Onedrive, sélectionner les options de la capture.

gpo_ondrive_6

Explication : Resumé détaillant la GPO.

GPO activer le chiffrement Bitlocker sur Windows 10

Créer un nouvealle GPO ordinateur et paramétrer la stratégie suivante depuis : Stratégies -> Paramètres du logiciel -> Modèles d’administration… -> Chriffrement :

bitlocke
bitlocke

bitlocke

#=====================================================================
# Active Directory Domain Services schema extension for 
# BitLocker Drive Encryption and Trusted Platform Module (TPM) recovery
# This file contains attributes and class objects that enable
# Windows Server 2003 SP1 and Windows Server 2003 R2 domain controllers
# to store BitLocker and TPM recovery information. 
# Change History: 
#   11/2005 - Schema additions for Vista Beta 2 (matches \"Longhorn\" Server Beta 2)
#    5/2006 - Schema additions and updates for Vista RC1 (matches \"Longhorn\" Server Beta 3)
# NOTE: A schema extension is not necessary if the forest includes an installation
# of Windows Server Codename \"Longhorn\".
# To extend the schema, use the LDIFDE tool on the schema master of the forest.
# Sample command:
#   ldifde -i -v -f BitLockerTPMSchemaExtension.ldf -c \"DC=X\" \"DC=nttest,dc=microsoft,dc=com\" -k -j .
# For more information on LDIFDE tool, see
# http://support.microsoft.com/default.aspx?scid=kb;en-us;237677 
# See related guide for setting up Active Directory Domain Services
# for BitLocker and TPM recovery.
#=====================================================================


#=====================================================================
# [Vista Beta 2 and up] TPM Recovery Information - Attributes
#=====================================================================

# ms-TPM-OwnerInformation
dn: CN=ms-TPM-OwnerInformation,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: attributeSchema
ldapDisplayName: msTPM-OwnerInformation
adminDisplayName: TPM-OwnerInformation
adminDescription: This attribute contains the owner information of a particular TPM.
attributeId: 1.2.840.113556.1.4.1966
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
searchFlags: 136
schemaIdGuid:: bRpOqg1VBU6MNUr8uRep/g==
showInAdvancedViewOnly: TRUE


#======================================================================
# [Vista Beta 2 and up] Bitlocker Recovery Information - Attributes
# NOTE: FVE is the acronym for Full Volume Encryption, a pre-release name
#=====================================================================

# ms-FVE-RecoveryGuid
dn: CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: attributeSchema
ldapDisplayName: msFVE-RecoveryGuid
adminDisplayName: FVE-RecoveryGuid
adminDescription: This attribute contains the GUID associated with a Full Volume Encryption (FVE) recovery password.
attributeID: 1.2.840.113556.1.4.1965
attributeSyntax: 2.5.5.10
omSyntax: 4
isSingleValued: TRUE
searchFlags: 137
schemaIdGuid:: vAlp93jmoEews/hqAETAbQ==
showInAdvancedViewOnly: TRUE

# ms-FVE-RecoveryPassword
dn: CN=ms-FVE-RecoveryPassword,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: attributeSchema
ldapDisplayName: msFVE-RecoveryPassword
adminDisplayName: FVE-RecoveryPassword
adminDescription: This attribute contains the password required to recover a Full Volume Encryption (FVE) volume.
attributeId: 1.2.840.113556.1.4.1964
attributeSyntax: 2.5.5.12
omSyntax: 64
isSingleValued: TRUE
searchFlags: 136
schemaIdGuid:: wRoGQ63IzEy3hSv6wg/GCg==
showInAdvancedViewOnly: TRUE



#=====================================================================
# [Vista Beta 2 and up] Attributes - Schema Update
#======================================================================

dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-

#=====================================================================
# [Vista Beta 2 and up] BitLocker Recovery Information - Class
#=====================================================================

# ms-FVE-RecoveryInformation
dn: CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: classSchema
ldapDisplayName: msFVE-RecoveryInformation
adminDisplayName: FVE-RecoveryInformation
adminDescription: This class contains a Full Volume Encryption recovery password with its associated GUID.
governsID: 1.2.840.113556.1.5.253
objectClassCategory: 1
subClassOf: top
systemMustContain: msFVE-RecoveryGuid
systemMustContain: msFVE-RecoveryPassword
systemPossSuperiors: computer
schemaIdGUID:: MF1x6lOP0EC9HmEJGG14LA==
defaultSecurityDescriptor: D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)
defaultHidingValue: TRUE
defaultObjectCategory: CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=X


#=====================================================================
# [Vista Beta 2 and up] Classes - Schema Update
#=====================================================================

dn: CN=computer,CN=Schema,CN=Configuration,DC=X
#changetype: ntdsSchemaModify
changetype: modify
add: mayContain
mayContain: msTPM-OwnerInformation
-

dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-

#=====================================================================
# [Vista RC1 and up] Bitlocker Recovery Information - Additional Attributes 
#=====================================================================

# ms-FVE-VolumeGuid
dn: CN=ms-FVE-VolumeGuid,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: attributeSchema
ldapDisplayName: msFVE-VolumeGuid
adminDisplayName: FVE-VolumeGuid
adminDescription: This attribute contains the GUID associated with a BitLocker-supported disk volume. Full Volume Encryption (FVE) was the pre-release name for BitLocker Drive Encryption.
attributeID: 1.2.840.113556.1.4.1998
attributeSyntax: 2.5.5.10
omSyntax: 4
isSingleValued: TRUE
searchFlags: 27
schemaIdGuid:: z6Xlhe7cdUCc/aydtqLyRQ==
showInAdvancedViewOnly: TRUE
isMemberOfPartialAttributeSet: TRUE
rangeUpper: 128

# ms-FVE-KeyPackage
dn: CN=ms-FVE-KeyPackage,CN=Schema,CN=Configuration,DC=X
changetype: add
objectClass: attributeSchema
ldapDisplayName: msFVE-KeyPackage
adminDisplayName: FVE-KeyPackage
adminDescription: This attribute contains a volume's BitLocker encryption key secured by the corresponding recovery password. Full Volume Encryption (FVE) was the pre-release name for BitLocker Drive Encryption.
attributeId: 1.2.840.113556.1.4.1999
attributeSyntax: 2.5.5.10
omSyntax: 4
isSingleValued: TRUE
searchFlags: 152
schemaIdGuid:: qF7VH6eI3EeBKQ2qlxhqVA==
showInAdvancedViewOnly: TRUE
isMemberOfPartialAttributeSet: FALSE
rangeUpper: 102400

#=====================================================================
# [Vista RC1 and up] Additional Attributes - Schema Update
#=====================================================================

dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-

#=====================================================================
# [Vista RC1 and up] Updates to BitLocker Recovery Information Class
#======================================================================

dn: CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: adminDescription
adminDescription: This class contains BitLocker recovery information including GUIDs, recovery passwords, and keys. Full Volume Encryption (FVE) was the pre-release name for BitLocker Drive Encryption.
-

dn: CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=X
changetype: modify
add: mayContain
mayContain: msFVE-VolumeGuid
mayContain: msFVE-KeyPackage
-

#=====================================================================
# [Vista RC1 and up] Updates to pre-RC1 Attributes 
#=====================================================================

# Updates to ms-TPM-OwnerInformation

dn: CN=ms-TPM-OwnerInformation,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: searchFlags
searchFlags: 152
-

dn: CN=ms-TPM-OwnerInformation,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: rangeUpper
rangeUpper: 128
-

# Updates to ms-FVE-RecoveryGuid

dn: CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: adminDescription
adminDescription: This attribute contains the GUID associated with a BitLocker recovery password. Full Volume Encryption (FVE) was the pre-release name for BitLocker Drive Encryption.
-

dn: CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: searchFlags
searchFlags: 27
-

dn: CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: rangeUpper
rangeUpper: 128
-

dn: CN=ms-FVE-RecoveryGuid,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: isMemberOfPartialAttributeSet
isMemberOfPartialAttributeSet: TRUE
-


# Updates to ms-FVE-RecoveryPassword

dn: CN=ms-FVE-RecoveryPassword,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: adminDescription
adminDescription: This attribute contains a password that can recover a BitLocker-encrypted volume. Full Volume Encryption (FVE) was the pre-release name for BitLocker Drive Encryption.
-

dn: CN=ms-FVE-RecoveryPassword,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: searchFlags
searchFlags: 152
-

dn: CN=ms-FVE-RecoveryPassword,CN=Schema,CN=Configuration,DC=X
changetype: modify
replace: rangeUpper
rangeUpper: 256
-

# Reload the schema cache to pick up updated attributes

dn:
changetype: modify
add: schemaUpdateNow
schemaUpdateNow: 1
-
dc1ad:~# cat BitLockerTPMSchemaExtension.ldf | sed 's/DC=X/DC=formation,DC=fr/' > bitlocker.ldif
dc1ad:~# ldbmodify -H /var/lib/samba/private/sam.ldb  --option="dsdb:schema update allowed=true" bitlocker.ldif
ERR: (Entry already exists) "Entry CN=ms-TPM-OwnerInformation,CN=Schema,CN=Configuration,DC=formation,DC=fr already exists" on DN CN=ms-TPM-OwnerInformation,CN=Schema,CN=Configuration,DC=formation,DC=fr at block before line 40
Modify failed after processing 0 records

cf : https://kidcartouche.blogspot.com/2013/03/bitlocker-drive-encryption-and-samba4.html

cf : https://docs.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc766251(v=ws.10)?redirectedfrom=MSDN

cf : https://jackstromberg.com/2015/02/tutorial-configuring-bitlocker-to-store-recovery-keys-in-active-directory/

GPO activer une politique des mots de passe avec LAPS

https://homepages.lcc-toulouse.fr/colombet/samba-mise-en-place-de-laps-local-administrator/

Intégrer des outils à votre AD avec SSSD

Linux via SSSD

SSSD permet de remplacer Winbind avec une solution plus élégante et dédiée à la gestion d’identité (alors que Winbind est surtout un composant de SaMBa).

sssd-ad

Avantages :

Il y a plusieurs type de connecteurs: en mode natif pour Active Directory ou par LDAP. On peut cacher les informations afin de travailler en mode déconnecté, mais aussi pour réduire les latences et la charge sur le serveur d’identification. SSSD est beaucoup plus simple à debugger que Winbind.

Inconvénients :

Cette solution existe depuis moins longtemps. L’intégration complète avec un Active Directory existe depuis SSSD 1.9 (fourni avec RHEL6.4+). On peut toutefois intégrer des clients RHEL5 et RHEL6.
Elle nécessite de payer une licence d’accès client Windows pour chaque machine Linux, si l’on opte pour une intégration native (c’est à dire pas LDAP).
Bien que cela soit possible, les règles sudo ne peuvent pas être centralisées facilement. Il faut donc souvent peupler le fichier sudoers par un autre mécanisme (notamment avec Puppet).
On ne peut pas automatiser complètement l’intégration d’une nouvelle machine dans le domaine (à un moment donné, il faut faire un net ads join et rentrer le mot de passe administrateur).

root@debian9:~# apt-get install sssd-tools sssd libnss-sss libpam-sss realmd adcli

root@debian9:~# mkdir -p /var/lib/samba/private

root@debian9:~# adcli join --user=Administrator FORMATION.FR

ANCIENNE COMMANDE NE PAS FAIRE : realm join --user=Administrator FORMATION.FR : ANCIENNE COMMANDE NE PAS FAIRE

root@debian9:~# echo "session required pam_mkhomedir.so skel=/etc/skel/ umask=0022" | tee -a /etc/pam.d/common-session

root@debian9:~# vi /etc/sssd/sssd.conf.ori

[sssd]
domains = formation.fr
config_file_version = 2
services = nss, pam

[domain/formation.fr]
ad_domain = formation.fr
krb5_realm = FORMATION.FR
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
access_provider = ad

root@debian9:~# cp /etc/sssd/sssd.conf.ori /etc/sssd/sssd.conf

root@debian9:~# chmod 600 /etc/sssd/sssd.conf*

root@debian9:~# systemctl enable sssd && systemctl start sssd

root@debian9:~# pam-auth-update --force

root@debian9:~# apt-get install libsss-sudo

root@debian9:~# echo "%domain\ admins ALL=(ALL:ALL) NOPASSWD:ALL" | tee -a /etc/sudoers.d/domain_admins

root@debian9:~# vi /etc/nsswitch.conf
sudoers:        files

Rebooter la VM et vérifier la bonne marche

root@debian9:~# id asr
uid=685800500(administrator) gid=685800513(domain users) groups=685800513(domain users),685800572(denied rodc password replication group),685800520(group policy creator owners),685800518(schema admins),685800519(enterprise admins),685800512(domain admins)

Service fichiers SaMBa4 en mode standalone

root@debian9:~# apt-get install samba
root@debian9:~# vi /etc/samba/smb.conf
[global]
    security = ads
    workgroup = FORMATION
        realm = FORMATION.FR
    server string = Backup Server
    kerberos method = system keytab

    # Logs
    log file = /var/log/samba/log.%m
    #log level = 4
    max log size = 100
        # Desactivation du partage imprimante
    load printers = no
        printing = bsd
        printcap name = /dev/null

#============================ Share Homes ==============================

[homes]
    browseable = yes
    read only = no
    guest ok = no
    veto files = /._*/.DS_Store/
    delete veto files = yes
    path = /home/%u
root@debian9:~# /etc/init.d/samba restart

Depuis la console du clientwindows10 ajouter le dossier du serveur SaMBA4 au profile de votre utilisateur :

lecteur_reseau_users-w400

Executer un gpupdate /force depuis une console cmd. Déconnectez et reconnectez vous à la session afin d’avoir votre lecteur réseau monté automatiquement

lecteur_reseau_users-2-w200

Synchroniser un annuaire OpenLDAP depuis ActiveDirectory avec LSC

debian9:~# apt-get install slapd apt-transport-https

debian9:~# mv /etc/ldap/slapd.d/ /etc/ldap/slapd.d.orig/

Importer la configuration slapd.conf déjà utilisé au début du TP. Dans ce fichier, supprimer toutes les références aux mots Samba et samba.

debian9:~# cd /etc/ldap

debian9:~# vi /etc/ldap/slapd.conf

debian9:~# chown openldap:openldap /etc/ldap/slapd.conf

debian9:~# rm -rf /var/lib/ldap/*

debian9:~# /etc/init.d/slapd start

debian9:~# vi /root/import_racine.ldif
dn: dc=formation,dc=fr
objectclass: dcObject
objectclass: organization
o: formation
dc: formation

dn: ou=users,dc=formation,dc=fr
objectclass: top
objectclass: organizationalUnit
ou: users

dn: ou=groups,dc=formation,dc=fr
objectclass: top
objectclass: organizationalUnit
ou: groups


Import de la racine dans OpenLDAP

debian9:~# ldapadd -x -D "cn=admin,dc=formation,dc=fr" -w 'Pa$$w0rd' -f /root/import_racine.ldif
adding new entry "dc=formation,dc=fr"
adding new entry "ou=users,dc=formation,dc=fr"
adding new entry "ou=groups,dc=formation,dc=fr"

debian9:~# ldapsearch -x -b "dc=formation,dc=fr"

Installation de LSC et des dépendances

debian9:~# vi /etc/apt/sources.list.d/lsc-project.list
deb     http://lsc-project.org/debian lsc main
deb-src http://lsc-project.org/debian lsc main

debian9:~# wget -O - http://ltb-project.org/wiki/lib/RPM-GPG-KEY-LTB-project | sudo apt-key add -

debian9:~# apt-get update

debian9:~# apt-get install lsc

debian9:/etc/ldap# apt-get install lsc

debian9:/etc/ldap# lsc
2019/10/22 18:35:56 [lsc] No java executable found on PATH or in JAVA_HOME! Aborting.
2019/10/22 18:35:56 [lsc] Define JAVA_HOME or adjust your PATH variable to include java.

debian9:/etc/ldap# apt-get install openjdk-8-jre

debian9:/etc/ldap# lsc
usage: lsc
 -a,--asynchronous-synchronize <arg>   Asynchronous synchronization task
                                       (one of the available tasks or
                                       'all')
 -c,--clean <arg>                      Cleaning type (one of the available
                                       tasks or 'all')
 -f,--config <arg>                     Specify configuration directory
 -h,--help                             Get this text
 -i,--time-limit <arg>                 Time limit in parallel server mode
                                       in seconds (default: 3600)
 -n,--dryrun                           Don't update the directory at all
 -nc,--nocreate                        Don't create any entry
 -nd,--nodelete                        Don't delete
 -nr,--nomodrdn                        Don't rename (MODRDN)
 -nu,--noupdate                        Don't update
 -s,--synchronize <arg>                Synchronization task (one of the
                                       available tasks or 'all')
 -t,--threads <arg>                    Number of parallel threads to
                                       synchronize a task (default: 5)
 -v,--validate                         Validate configuration (check
                                       connections ...)
 -x,--convert                          Convert lsc.properties to lsc.xml
                                       (-f is mandatory while converting)
debian9:~# mv /etc/lsc/lsc.xml /etc/lsc/lsc.xml.orig
debian9:~# vi /etc/lsc/lsc.xml

Fichier lsc.xml

Commande pour debug des annuaires OpenLDAP et AD

# vi /root/import_racine.ldif
dn: uid=colombet,ou=users,dc=formation,dc=fr
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: colombet
cn: jerome
sn: colombet

# ldapadd -x -D "cn=admin,dc=formation,dc=fr" -w 'Pa$$w0rd' -f /root/import_racine.ldif

# ldapsearch -xLLL -H ldap://10.0.2.9:389 -D "CN=Administrator,CN=Users,dc=formation,dc=fr" -W -b "dc=formation,dc=fr"

sshPublicKey – stocker vos clés publiques SSH dans AD

https://homepages.lcc-toulouse.fr/colombet/samba-stocker-vos-cles-publiques-ssh-dans-active-directory/

Dokuwiki

Installer le serveur web apache2

root@debian9:# apt-get install apache2

Activer le module authnz_ldap pour apache2

root@debian9:# a2enmod authnz_ldap

Editer le fichier par défaut

root@debian9:# vi /etc/apache2/sites-enabled/000-default.conf
<Directory /var/www/html/ldap>
        AuthName "AD authentification"
        AuthType basic
        AuthBasicProvider ldap
        AuthLDAPGroupAttribute member
        AuthLDAPGroupAttributeIsDN On
        AuthLDAPBindDN CN=Administrator,CN=Users,DC=formation,DC=fr
        AuthLDAPBindPassword "Pa$$w0rd"
        AuthLDAPURL "ldap://10.X.X.X:3268/?sAMAccountName?sub"
        #Require ldap-group CN=informatique,OU=groups,DC=formation,DC=fr
        Require valid-user
</Directory>

Redémarrer apache2 :

root@debian9:# mkdir /var/www/html/ldap
root@debian9:# /etc/init.d/apache2 restart

Tester via un navigateur :

http://10.0.2.14/ldap

DokuWiki

Installation des pré-requis pour DokuWiki

root@debian9:~# apt install wget bash-completion zip unzip curl imagemagick

Vérifier le nom de la VM sinon la renommer

root@debian9:~# hostnamectl
   Static hostname: debian9.formation.fr
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 7dc75f17f7ab47e4bdf0a813e865ff13
           Boot ID: 8afcf77b249e43debfa0e714b0c5bcf2
    Virtualization: oracle
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.9.0-8-amd64
      Architecture: x86-64

root@debian9:~# hostnamectl set-hostname debian9.formation.fr

DokuWiki est une plateforme web de type wiki CMS, elle est écrite en langage de programmation PHP côté serveur. Afin d’exécuter les scripts PHP de l’application, un serveur Web, tel que le serveur HTTP Apache, et une passerelle de traitement PHP doivent être installés et opérationnels sur la VM. Installer sur la machine dabian9 Apache et l’interpréteur PHP7 ainsi que tous les modules PHP nécessaires au bon fonctionnement de l’application. Pour cela, exécuter la commande suivante dans votre console.

root@debian9:~# apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-curl php7.0-gd php7.0-opcache php7.0-json php7.0-mbstring php7.0-intl php-imagick php7.0-xml php-ldap

Vérifier la bonne marche du serveur :

root@debian9:~# /etc/init.d/apache2 status
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-25 13:48:29 CEST; 56s ago
  Process: 13588 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
  Process: 13594 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 13599 (apache2)
    Tasks: 6 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─13599 /usr/sbin/apache2 -k start
           ├─13601 /usr/sbin/apache2 -k start
           ├─13602 /usr/sbin/apache2 -k start
           ├─13603 /usr/sbin/apache2 -k start
           ├─13604 /usr/sbin/apache2 -k start
           └─13605 /usr/sbin/apache2 -k start

Sep 25 13:48:29 debian9.formation.fr systemd[1]: Stopped The Apache HTTP Server.
Sep 25 13:48:29 debian9.formation.fr systemd[1]: Starting The Apache HTTP Server...
Sep 25 13:48:29 debian9.formation.fr systemd[1]: Started The Apache HTTP Server.

Activer le module apache de réécriture :

root@debian9:~# a2enmod rewrite
Enabling module rewrite.
To activate the new configuration, you need to run:
  systemctl restart apache2

Depuis votre navigateur local accéder au site web :

Picture1

http://10.X.X.X/

Editer le fichier « /etc/php/7.0/apache2/php.ini » et modifier la timezone à la ligne 924

...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Paris
...

Créer un fichier PHP en exécutant la commande suivante et vérifier la timezone renseigné précédemment.

root@debian9:~#echo ''| tee /var/www/html/info.php
root@debian9:~# /etc/init.d/apache2 restart

-w742

http://10.X.X.X:XXXX/info.php. Défiler vers le bas jusqu’au réglage de la date pour vérifier la configuration du fuseau horaire.

root@debian9:~# wget https://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz 
root@debian9:~# ll
total 3.6M
drwxr-xr-x 8 1001 1002 4.0K May  3 08:36 dokuwiki-2018-04-22a
-rw-r--r-- 1 root root 3.6M May  3 08:40 dokuwiki-stable.tgz

root@debian9:~# rm /var/www/html/index.html

root@debian9:~# rm /var/www/html/info.php

root@debian9:~# cp -rf dokuwiki-2018-04-22a/* /var/www/html/
root@debian9:~# cp -rf dokuwiki-2018-04-22a/.htaccess.dist /var/www/html/
root@debian9:~# chown -R www-data:www-data /var/www/html/
root@debian9:~# ls -al /var/www/html/
total 108
drwxr-xr-x  8 www-data www-data  4096 Sep 25 14:04 .
drwxr-xr-x  3 root     root      4096 Sep 25 13:42 ..
drwxr-xr-x  2 www-data www-data  4096 Sep 25 14:04 bin
drwxr-xr-x  2 www-data www-data  4096 Sep 25 14:04 conf
-rw-r--r--  1 www-data www-data 18092 Sep 25 14:04 COPYING
drwxr-xr-x 12 www-data www-data  4096 Sep 25 14:04 data
-rw-r--r--  1 www-data www-data  3547 Sep 25 14:04 doku.php
-rw-r--r--  1 www-data www-data 19141 Sep 25 14:04 feed.php
drwxr-xr-x  8 www-data www-data  4096 Sep 25 14:04 inc
-rw-r--r--  1 www-data www-data  2097 Sep 25 14:04 index.php
-rw-r--r--  1 www-data www-data 19233 Sep 25 14:04 install.php
drwxr-xr-x  8 www-data www-data  4096 Sep 25 14:04 lib
-rw-r--r--  1 www-data www-data   306 Sep 25 14:04 README
drwxr-xr-x 11 www-data www-data  4096 Sep 25 14:04 vendor
-rw-r--r--  1 www-data www-data    21 Sep 25 14:04 VERSION

Depuis votre navigateur local accéder au site web afin de lancer l’installation de DokuWiki :

dokuwiki1

http://10.X.X.X:XXXX/install.php
dokuwiki2
dokuwiki3

Avant de vous connecter au panneau d’administration de DokuWiki, depuis la console, supprimer le fichier d’installation et sécuriser les fichiers de configuration de DokuWiki.

root@debian9:~# rm -rf /var/www/html/install.php
root@debian9:~# chown -R root:root /var/www/html/
root@debian9:~# chown -R www-data:root /var/www/html/data/
root@debian9:~# chown -R www-data:root /var/www/html/lib/plugins/
root@debian9:~# chown -R www-data:root /var/www/html/lib/tpl/
root@debian9:~# chown -R www-data:root /var/www/html/conf/local.php*
root@debian9:~# chown -R www-data:root /var/www/html/conf/users.auth.php
root@debian9:~# chown -R www-data:root /var/www/html/conf/acl.auth.php
root@debian9:~# chown -R www-data:root /var/www/html/conf/plugins.local.php*

Connecrez-vous à la console d’administration web de DokuWiki afin d’activer le plugin Active Directory Auth Plugin dans le gestionnaire d’extension :

dokuwiki4

Editer le fichier de configuration de DokuWiki afin de prendre en compte l’authentification depuis l’Active Directory :

root@debian9:~# vi /var/www/html/conf/local.php
$conf['title'] = 'Formation.fr';
$conf['lang'] = 'fr';
$conf['license'] = '';
$conf['useacl'] = 1;
$conf['superuser'] = '@admin';
$conf['disableactions'] = 'register';

$conf['plugin']['authad']['debug'] = 1;
$conf['authtype'] = 'authad';
$conf['plugin']['authad']['account_suffix'] = '@formation.fr';
$conf['plugin']['authad']['base_dn'] = 'DC=formation,DC=fr';
$conf['plugin']['authad']['domain_controllers'] = '10.X.X.X,10.X.X.X';

FreeRadius

Ce chapitre va détailler l’installation d’un service radius via l’outils FreeRADIUS afin de créer un serveur institutionnel eduroam. Les instructions suivantes détailleront l’interconnexion de SaMBa4 et de l’utilitaire ntlm_auth pour effectuer les authentifications.

Il y aura quatre fichiers a définir pour personnaliser la configuration du serveur FreeRADIUS : eap.conf, proxy.conf, clients.conf, et sites-enabled/inner-tunnel. Pour utiliser MS-CHAPv2 (intégration avec Active Directory), il faudra modifier les modules/mschap.

Remarque : Avant de commencer, il faut savoir qu’il est plus facile de partir d’une installation fraiche de FreeRADIUS et de configurer eduroam que de modifier votre instance FreeRADIUS déjà en production.

Dans un premier temps installer le service FreeRADIUS :

root@debian9:~# apt-get install freeradius krb5-user winbind samba freeradius-utils samba-vfs-modules

Paramétrer le fichier « /etc/krb5.conf »

root@debian9:~# vi /etc/krb5.conf
[libdefaults]
    default_realm = FORMATION.FR
        ticket_lifetime = 600
        dns_lookup_realm = yes
        dns_lookup_kdc = yes
        renew_lifetime = 7d

[realms]
    FORMATION.FR = {
        kdc = 10.X.X.X
        kdc = 10.X.X.X
        admin_server = 10.X.X.X 10.X.X.X
    }

Tester le configuration Kerberos

root@debian9:~# kinit -V colombet@FORMATION.FR
Using default cache: /tmp/krb5cc_0
Using principal: colombet@FORMATION.FR
Password for colombet@FORMATION.FR:
Authenticated to Kerberos v5

root@debian9:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: colombet@FORMATION.FR

Valid starting       Expires              Service principal
09/26/2018 10:52:37  09/26/2018 11:02:34  krbtgt/FORMATION.FR@FORMATION.FR
    renew until 10/03/2018 10:52:34

Editer le fichier « /etc/samba/smb.conf »

root@debian9:~# cp /etc/samba/smb.conf /etc/samba/smb.conf.ori
root@debian9:~# 0>/etc/samba/smb.conf
root@debian9:~# vi /etc/samba/smb.conf
workgroup = FORMATION
security = ADS
realm = FORMATION.FR
encrypt passwords = yes
idmap config *:backend = rid
idmap config *:range = 20000000-29999999
winbind trusted domains only = no
winbind use default domain = yes
winbind enum users  = yes
winbind enum groups = yes
winbind refresh tickets = yes
template shell = /bin/bash
load printers = no
disable spoolss = yes
printing = bsd
printcap name = /dev/null

Tester le bonne marche du fichier « /etc/samba/smb.conf »

root@debian9:~# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
root@debian9:~# vi /etc/security/limits.conf
* - nofile 16384

Suite à la modification du paramètre précédente vous devez rebooter votre machine

Désactiver le cache winbind :

root@debian9:~# vi /etc/default/winbind
WINBINDD_OPTS = "-n"

Rejoindre le domaine FORMATION.FR

root@debian9:~# net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- FORMATION
Joined 'DEBIAN9' to dns domain 'formation.fr'

Remarque : Si vous souhaitez sortir du domaine : root@debian9:~# net ads leave -U Administrator

Vérifier la jonction au domaine

root@debian9:~# net rpc testjoin
Join to 'FORMATION' is OK

root@debian9:~# wbinfo --online-status
BUILTIN : online
DEBIAN9 : online
WORKGROUP : online

root@debian9:~# net ads info
LDAP server: 10.X.X.X
LDAP server name: dc2ad.formation.fr
Realm: FORMATION.FR
Bind Path: dc=FORMATION,dc=FR
LDAP port: 389
Server time: Wed, 26 Sep 2018 12:55:15 CEST
KDC server: 10.X.X.X
Server time offset: 1
Last machine account password change: Wed, 26 Sep 2018 11:02:09 CEST

Afficher la liste des utilisateurs du domaine

root@debian9:~# wbinfo -u
colombet
administrator
dns-dc1ad
dns-dc2ad
krbtgt
guest

Afficher la liste des groupes du domaine

root@debian9:~# wbinfo -g
allowed rodc password replication group
enterprise read-only domain controllers
denied rodc password replication group
read-only domain controllers
group policy creator owners
ras and ias servers
domain controllers
enterprise admins
domain computers
cert publishers
dnsupdateproxy
domain admins
domain guests
schema admins
domain users
dnsadmins

Il y a un problème entre FreeRADIUS et mschap / winbind. L’utilisateur freerad ne peut pas utiliser le dameon winbind et provoque l’erreur :

Exec-Program output: Reading winbind reply failed! (0xc0000001)
Exec-Program-Wait: plaintext: Reading winbind reply failed! (0xc0000001)

Il faut vérifier les droits sur le répertoire « /var/lib/samba/winbindd_privileged »

root@debian9:~#  ll /var/lib/samba
total 1.4M
-rw-------  1 root root          412K Sep 26 10:50 account_policy.tdb
-rw-------  1 root root           696 Sep 26 10:50 group_mapping.tdb
drwxr-xr-x 10 root root          4.0K Sep 26 10:50 printers
drwxr-xr-x  3 root root          4.0K Sep 26 10:58 private
-rw-------  1 root root          516K Sep 26 10:50 registry.tdb
-rw-------  1 root root          412K Sep 26 10:50 share_info.tdb
drwxrwx--T  2 root sambashare    4.0K Sep 26 10:50 usershares
-rw-------  1 root root           32K Sep 26 11:10 winbindd_cache.tdb
drwxr-x---  2 root winbindd_priv 4.0K Sep 26 11:09 winbindd_privileged

Appliquer les droits pour corriger l’erreur :

root@debian9:~#  usermod -a -G winbindd_priv freerad
root@debian9:~#  chown root:winbindd_priv /var/lib/samba/winbindd_privileged/

Tester l’authentification sur l’AD avec ntlm_auth de SaMBa. Si le status est en success on peut configurer FreeRADIUS.

root@debian9:~# ntlm_auth --request-nt-key --domain=FORMATION.FR --username=colombet
Password:
NT_STATUS_OK: Success (0x0)

root@debian9:~# wbinfo -a colombet%Passw0rd
plaintext password authentication succeeded
challenge/response password authentication succeeded

Dans le fichier « eap.conf », vous devez configurer les méthodes de PAE (TTLS, PEAP, ou les deux) que vous prévoyez soutenir dans votre établissement (commentaires supprimés par souci de concision) :

root@debian9:~# cp /etc/freeradius/3.0/mods-available/eap /etc/freeradius/3.0/mods-available/eap.orig
root@debian9:~# vi /etc/freeradius/3.0/mods-available/eap 

eap {
  default_eap_type = ttls
  timer_expire = 60
  ignore_unknown_eap_types = no
  cisco_accounting_username_bug = no
  max_sessions = ${max_requests}

  md5 {
  }

  leap {
  }

  tls-config tls-common{
    certdir = ${confdir}/certs
    cadir = ${confdir}/certs
    private_key_file = ${certdir}/serverkey.key
    certificate_file = ${certdir}/servercert.cert
    dh_file = ${certdir}/dh
    random_file = ${certdir}/random
    cipher_list = "DEFAULT"
    make_cert_command = "${certdir}/bootstrap"
    cache {
    enable = no
    max_entries = 255
  }

  ttls {
    tls = tls-common
    default_eap_type = mschapv2
    copy_request_to_tunnel = yes
    use_tunneled_reply = yes
    virtual_server = "inner-tunnel"
  }

  peap {
    tls = tls-common
    default_eap_type = mschapv2
    copy_request_to_tunnel = yes
    use_tunneled_reply = yes
    virtual_server = "inner-tunnel"
  }

    mschapv2 {
  }
}

Dans votre bloc de configuration eap, spécifiez la méthode externe EAP (TLS, TTLS ou PEAP) que vous utilisez par défaut avec la directive default_eap_type.

Quel que soit le type d’EAP, la configuration TLS est nécessaire pour définir le certificat présenté à vos utilisateurs lorsqu’ils créent leur tunnel crypté vers le serveur RADIUS eduroam.

Pour les tests, il est plus facile d’utiliser les certificats fournis avec FreeRADIUS car la configuration du certificat est souvent la partie la plus difficile de ce processus.

Avant d’entrer en production, prévoir de mettre à jour cette configuration avec un certificat de production. Pour une plus grande compatibilité entre les appareils, un certificat signé par une AC commerciale est recommandé.

Afin de prendre en charge TTLS et/ou PEAP, les sous-blocs sont définis par défaut en mschapv2 car nous utilisons AD comme IdP. Pour utiliser un service de répertoire différent, il faudra adapter le type_eap_type par défaut dans le bloc ttls ou peap (ou les deux).

« proxy.conf » a besoin de différents proxy RADIUS pour router les utilisateurs par domaine et devrait ressembler à ce qui suit :

root@debian9:~# cp /etc/freeradius/3.0/proxy.conf /etc/freeradius/3.0/proxy.conf.orig
root@debian9:~# 0>/etc/freeradius/3.0/proxy.conf
root@debian9:~# vi /etc/freeradius/3.0/proxy.conf


proxy server {
  default_fallback = no
  retry_delay = 5
  retry_count = 3
  dead_time = 600
}

realm NULL {
}

realm LOCAL {
}

realm formation.fr {
    type = radius
    authhost = LOCAL
    accthost = LOCAL
}

home_server rad1.eduroam.fr {
        type            = auth
        ipaddr          = 193.49.160.187
        port            = 1812
         secret     = <votre_radius_secret>
        require_message_authenticator = yes
        response_window = 20
        zombie_period   = 40
        status_check    = status-server
        check_interval  = 20
        num_answers_to_alive = 3
}

home_server rad2.eduroam.fr {
    type            = auth
    ipaddr          = 193.49.159.82
    port            = 1812
    secret      = <votre_radius_secret>
    require_message_authenticator = yes
    response_window = 20
    zombie_period   = 40
    status_check    = status-server
    check_interval  = 20
    num_answers_to_alive = 3
}

home_server_pool pool-eduroam-fr {
    type = fail-over
    home_server = rad1.eduroam.fr
    home_server = rad2.eduroam.fr
}

realm DEFAULT {
        auth_pool = pool-eduroam-fr
        nostrip
}

Il faut également configurer le fichier clients.conf pour qu’il corresponde au fichier « proxy.conf » :

root@debian9:~# cp /etc/freeradius/3.0/clients.conf  /etc/freeradius/3.0/clients.conf.orig
root@debian9:~# vi /etc/freeradius/3.0/clients.conf

client localhost {
    ipaddr = 127.0.0.1
    secret    = <votre_radius_secret>
    require_message_authenticator = no
    shortname    = localhost
    nastype        = other
}

client rad1.eduroam.fr {
     secret     = <votre_radius_secret>
     ipaddr = 193.49.160.187
}

client rad2.eduroam.fr {
     secret     = <votre_radius_secret>
     ipaddr     = 193.49.159.82
}

Dans notre configuration sites-enabled/inner-tunnel, nous avons simplement désactivé l’authentification par fichiers et par mot de passe UNIX et ajouté ntlm_auth pour supporter l’ Active Directory. Si vous prévoyez de transmettre vos requêtes RADIUS par procuration à un serveur RADIUS existant, qui à son tour est déjà configuré pour s’authentifier par rapport à votre service d’annuaire, cette configuration n’est pas nécessaire.

Dans les modules/mschap, les paramètres suivants doivent être modifiés. Les paramètres de cryptage permettent au matériel de la clé cryptographique d’être renvoyé au NAS et la configuration ntlm_auth utilise l’authentification SaMBa4.

root@debian9:~# cp /etc/freeradius/3.0/mods-enabled/mschap /etc/freeradius/3.0/mods-enabled/mschap.orig
root@debian9:~# vi /etc/freeradius/3.0/mods-enabled/mschap

mschap {
  # if use_mppe is not set to no mschap will
  # add MS-CHAP-MPPE-Keys for MS-CHAPv1 and
  # MS-MPPE-Recv-Key/MS-MPPE-Send-Key for MS-CHAPv2
  # use_mppe= no

  # if mppe is enabled require_encryption makes
  # encryption moderate
  # require_encryption = yes

  # require_strong always requires 128 bit key
  # encryption
  # require_strong = yes

  # Windows sends us a username in the form of
  # DOMAIN\user, but sends the challenge response
  # based on only the user portion.  This hack
  # corrects for that incorrect behavior.
  with_ntdomain_hack = yes

  # Configure to use your local NTLM authentication mechanism
  ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

}

Ajouter aux fichiers sites-enabled/default et sites-enabled/inner-tunnel le module d’authentification ntlm_auth

root@debian9:~# vi /etc/freeradius/3.0/sites-enabled/default && vi /etc/freeradius/3.0/sites-enabled/inner-tunnel
authenticate {
        ...
        ntlm_auth
        ...
}

Relancer FreeRADIUS et simuler une connexion avec le client radtest

root@debian9:~# service freeradius restart
root@debian9:~# radtest -t mschap colombet Passw0rd localhost 0 "testing123"
Sent Access-Request Id 128 from 0.0.0.0:60906 to 127.0.0.1:1812 length 134
    User-Name = "colombet"
    MS-CHAP-Password = "Passw0rd"
    NAS-IP-Address = 127.0.1.1
    NAS-Port = 0
    Message-Authenticator = 0x00
    Cleartext-Password = "Passw0rd"
    MS-CHAP-Challenge = 0x531f682468007286
    MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000377b5e4970e10837cccf17cd9bc8ee2491c737e3de7fc29f
Received Access-Accept Id 128 from 127.0.0.1:1812 to 0.0.0.0:0 length 84
    MS-CHAP-MPPE-Keys = 0x0000000000000000c7490004b726697b3a8f42295eb6f6cc
    MS-MPPE-Encryption-Policy = Encryption-Allowed
    MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed

cf : https://wiki.cyberblabla.fr/doku.php?id=configuration-radius

NFSv4

Configurer notre serveur SaMBa4 pour qu’il intègre le rôle de serveur nfs4.

Sur le serveur de DC1AD

dc1ad:~# apt-get install nfs-kernel-server

Création d’un utilisateur nfs-user pour le service NFS :

dc1ad:~# samba-tool user create nfs-user
Note: samba-tool user add is deprecated.  Please use samba-tool user create for the same function.
New Password: Pa$$w0rd
Retype Password: Pa$$w0rd
User 'nfs-user' created successfully

dc1ad:~# samba-tool user setexpiry nfs-user --noexpiry
Expiry for user 'nfs-user' disabled.

Copier la keytab sur un client linux avec l’authentification SSSD activée :

dc1ad:~# samba-tool spn add nfs/samba.krb nfs-user

dc1ad:~# samba-tool domain exportkeytab /etc/krb5.keytab --principal=nfs/samba.krb
Export one principal to /etc/krb5.keytab

dc1ad:~# samba-tool domain exportkeytab /etc/krb5.keytab --principal=nfs/SAMBA$
Export one principal to /etc/krb5.keytab

dc1ad:~# scp /etc/krb5.keytab 10.X.X.X:/etc/

Le service NFSv4 dépend de l’outil nfs-kernel-server, il doit être installé et configuré comme suit car le montage NFSv4 se fait par une authentification Kerberos 5. Pour cela, modifier le fichier « /etc/default/nfs-kernel-server » :

dc1ad:~# vi /etc/default/nfs-kernel-server

Exporter les homes dans le fichier « /etc/exports » avec une protection Kerberos :

dc1ad:~# vi /etc/exports
[...]
/home gss/krb5(rw,insecure,fsid=0,async,no_subtree_check,anonuid=65534,anongid=65534)
dc1ad:~# exportfs -av
exporting gss/krb5:/home

Modifier le fichier « /etc/idmapd.conf » :

dc1ad:~#Domain = krb

Redémarrer le service nfs-kernel-server:

dc1ad:~# service nfs-kernel-server restart

Montage manuelle du /home

root@debian9:/etc# mount -t nfs4 -o sec=krb5 10.X.X.X:/ /home/
mount: wrong fs type, bad option, bad superblock on 10.X.X.X:/,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
root@debian9:/etc# apt-get install nfs-common

cf : https://www-fourier.ujf-grenoble.fr/informatique/doku.php?id=samba4

CUPS

Il s’agit d’un serveur d’impression gérant les files d’attente, ainsi que le partage des imprimantes pour des postes clients d’un réseau. Site officiel : http://www.cups.org/

En configurant des imprimantes au niveau de CUPS, SaMBa est capable de dialoguer avec ce service pour les proposer à ses clients Windows, Linux, Mac. CUPS propose des outils de gestion des imprimantes pour SaMBa afin de ne pas avoir à installer les drivers sur les postes clients. Le serveur d’impression peut ainsi les mettre à disposition directement.

Samba se base sur les imprimantes définies dans CUPS pour proposer le service d’impression à ses clients. Il faut donc commencer par configurer ce service.

La configuration se fait via une un navigateur internet et en saisissant l’URL http://:631

La configuration par défaut de cet outil d’administration n’autorise que les connexions venant de la machine locale. Il faut donc commencer par donner la possibilité d’y accéder par une autre machine.

Installer le service CUPS

root@spool:~# apt-get update
root@spool:~# apt-get install samba krb5-config krb5-user winbind libpam-winbind libnss-winbind

Modifier le fichier /etc/cups/cupsd.conf

[...]
**Listen 0.0.0.0:631**

# Restrict access to the server...
<Location />
  Order allow,deny
  **Allow all**
</Location>
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow all
</Location>
[...]

Relancer CUPS

root@spool:~# /etc/init.d/cups restart

Configurer SaMBa4 en serveur d’impression :

root@spool:~# vi /etc/samba/smb.conf

[global]
   workgroup = FORMATION
   security = ADS
   netbios name = debian9
   realm = FORMATION.FR
   encrypt passwords = yes

   dns forwarder = 10.X.X.X

   idmap config * : backend = tdb
   idmap config *:range = 50000-1000000

   template homedir = /home/%U
   template shell = /bin/bash
   winbind use default domain = true
   winbind offline logon = false
   winbind nss info = rfc2307
   winbind enum users = yes
   winbind enum groups = yes

   vfs objects = acl_xattr
   map acl inherit = yes
   store dos attributes = yes

   # CUPS
   printcap cache time = 60
   printcap name = cups
   printing = cups
   rpc_server:spoolss = external
   rpc_daemon:spoolssd = fork
   use client driver = yes

 [printers]
   comment = All Printers
   path = /var/spool/samba
   printable = Yes
   printing = CUPS

 [print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   read only = No
   writeable = yes

Joindre la machine spool au domaine FORMATION.FR

root@spool:~# kinit Administrator
root@spool:~# /etc/init.d/samba restart 
root@spool:~# net ads join -U Administrator
root@spool:~# vi /etc/nsswitch.conf

passwd:         compat winbind
group:          compat winbind

Attribution des privilèges print operator au compte Administrator :

root@spool:~# net rpc rights grant "FORMATION\Domain Admins" SePrintOperatorPrivilege -U "FORMATION\Administrator"
Enter FORMATION\Administrator's password:
Successfully granted rights.

Vérifier l’attribution des privilèges :

root@spool:~# net rpc rights list privileges SePrintOperatorPrivilege -U "FORMATION\administrator"
Enter FORMATION\administrator's password:
SePrintOperatorPrivilege:
  BUILTIN\Administrators
  FORMATION\domain admins

Création des répertoires de spool et du répertoire de stockage des drivers

mkdir -p /var/lib/samba/printers
chmod -R 2755 /var/lib/samba/printers/
setfacl -R -m g:"domain admins":rwx /var/lib/samba/printers
setfacl -R -d -m g:"domain admins":rwx /var/lib/samba/printers
chmod -R g+rwx /var/lib/samba/printers
chown -R administrator:"domain admins" /var/lib/samba/printers
chmod 1777 /var/spool/samba/

Afin de gérer l’upload des drivers, il est recommandé de passer par l’outils

cups

Si vous n’avez pas de serveur d’impression sur votre SaMBa et que vous avez des messages d’erreurs dans votre /var/log/syslog :

Sep 27 11:19:10 dc1ad smbd[3210]: [2018/09/27 11:19:10.88096,0] ../source3/printing/print_standard.c:68(std_pcap_cache_reload)
Sep 27 11:19:10 thor smbd[3210]:   Unable to open printcap file /etc/printcap for read!

Dans ce cas, vous pouvez rajouter les lignes suivante au fichier smb.conf afin de désactiver la fonction CUPS :

[global]
[...]
printcap name = /dev/null
load printers = no
[...]

cf : https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Print_Server
cf : https://www.tecmint.com/join-ubuntu-to-active-directory-domain-member-samba-winbind/

Augmenter le niveau fonctionnel du domaine SaMBa4

Niveaux fonctionnels supportés par SaMBa4 :

Functional Level Included in Samba Version
2012_R2 4.4 et plus*
2012 4.4 et plus*
2008_R2 4.0 et plus
2008 4.0 et plus
2003 4.0 et plus

Afficher l’état du domaine fonctionnel :

dc1ad:~# samba-tool domain level show
Domain and forest function level for domain 'DC=formation,DC=fr'

Forest function level: (Windows) 2003
Domain function level: (Windows) 2003
Lowest function level of a DC: (Windows) 2008 R2

Augmenter le niveau fonctionnel en Windows 2008 server R2 :

dc1ad:~# samba-tool domain level raise --domain-level=2008_R2
Domain function level changed!
All changes applied successfully!
dc1ad:~# samba-tool domain level raise --forest-level=2008_R2
Forest function level changed!
All changes applied successfully!

Vérifier le montée en version du domaine et de la forêt :

dc1ad:~# samba-tool domain level show
Domain and forest function level for domain 'DC=formation,DC=fr'

Forest function level: (Windows) 2008 R2
Domain function level: (Windows) 2008 R2
Lowest function level of a DC: (Windows) 2008 R2

Intégrer un contrôleur Windows Server 2008 R2

Joindre un Windows Server 2008 R2 DC à un SaMBa4 AD

Depuis votre installation fraiche Windows 2008R2 Server, executer la commande dcpromo.exe et suivre les instructions :

Synchroniser SYSVOL via une tache automatique

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
"SysvolReady"=dword:00000001
  • Exécuter le REG et rebooter la machine
  • Vérifier la présence du partage SYSVOL dans l’explorateur de fichiers \dc2\sysvol\formation.fr

srvwin2008-sysvo

  • La vidéo suivant détail la création d’une tache automatique (équivalent au RSYNC sous linux) afin de synchroniser de manière unidirectionnel le SYSVOL du DC1 vers la DC2 :
  • Se connecter au contrôleur de domaine Windows Server 2008 R2
  • Cliquer sur « Démarrer », « Executer », saisir la commande « taskschd.msc » et « Valider »
  • Clic droit sur la bibliothèque de taches / choisir « Créer une tache »
  • Définir un nom : par exemple « SysVol Replication »
  • Sélectionner « Exécuter même si l’utilisateur n’est pas connecté »
  • Dans l’onglet « Déclencheur », cliquer sur le bouton « nouveau »
  • Sélectionner « Jour », cocher « Répéter la tache toute les : 5 minutes », « pour une durée : 1 jour » et sauvegarder
  • Dans l’onglet « Actions », cliquer sur le bouton « nouveau »
  • Choose « Start a program » and fill the fields with following path/arguments:
Program/script:               C:\Program Files (x86)\Windows Resource Kits\Tools\robocopy.exe
Add arguments (optional):     \\dc1ad\SYSVOL\formation.fr\ C:\Windows\SYSVOL\domain\ /mir /sec
  • Sauvegarder l’action et sauvegarder la tache.
  • Une fenêtre vous demande de saisir les identifiants du compte « Administrator », valider.

Afficher les statuts de réplication sur Windows DC2

Pour afficher la réplication entrante sur le Windows DC2 :

  • Ouvrir une invite de commande.
  • Utiliser l’utilitaire repadmin pour afficher les états des connexions entrantes :
repadmin /showrepl

srvwin2008-repadmin

cf : https://wiki.samba.org/index.php/Joining_a_Windows_Server_2008_/_2008_R2_DC_to_a_Samba_AD
cf : https://wiki.samba.org/index.php/Verifying_the_Directory_Replication_Statuses#Displaying_the_Replication_Statuses_on_a_Windows_DC
cf : https://wiki.samba.org/index.php/Enabling_the_Sysvol_Share_on_a_Windows_DC
cf : https://wiki.samba.org/index.php/Robocopy_based_SysVol_replication_workaround

Appréhender la méthodologie pour réussir le déploiement ou la migration de SaMBa4 dans votre infrastructure : retour d’expérience du CNRS – LCC

SaMBa4_retour_d_expérience

Références

Notes :


  1. Capacité d’un système à fonctionner avec d’autres produits de manière compatible 
  2. http://pve.proxmox.com/wiki/Proxmox_VE_Cluster