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 ».
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
- Comprendre un système de type Active Directory et les différents services associés (DNS, LDAP, Kerberos, NTP)
- Installer et configurer SaMBa ; des outils d’administration natifs aux outils d’administration de serveur distant (RSAT)
- L’ancêtre couple OpenLDAP/SaMBaPDC – TP n°1
- Installation du service OpenLDAP
- Installation de phpldapadmin
- Installation du service SaMBa
- Interconnection SaMBa et OpenLDAP
- Initialisation de la base de données LDAP
- Ajout des utilisateurs (en mode manuel ou migrationtool)
- Authentification des utilisateurs sur linux (libnss-ldap et libpam-ldap)
- Intégration dans le domaine formation.fr d’un poste client Windows 7
- Migration vers SaMBa4 à partir de vos environnements – TP n°2
- Migration de votre vieux domaine SaMBa3 OpenLDAP vers SaMBa4
- Création de votre domaine SaMBa4
- L’ancêtre couple OpenLDAP/SaMBaPDC – TP n°1
JOUR2
- Maîtriser les particularités d’implémentation d’un service SaMBa4
- Découvrir les nouveaux usages rendus possibles avec SaMBa4
- 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
Pré-requis
-
Installation de VirtualBox 6.0.12
- Installation des VirtualBox Extension Pack
- Configurer le réseau NatNetwork dans les paramètres globaux de Virtualbox
– Configurer les redirections suivantes afin de pouvoir vous connecter en ssh depuis l’hôte :
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 !
- 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).
- 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.
- 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.
LDAP est asynchrone, c’est-à-dire que si le client émet plusieurs requêtes successivement, elles peuvent arriver dans un ordre différent.
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.
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 :
- sub : l’action est effectuée de manière recursive à partir de la base spécifiée sur toute l’arborescence.
- 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 ».
- 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 :
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
- 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.
- 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.
- 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.).
- é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é.
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.
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.
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.
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é.
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.
Fonctionnement :Le service déchiffre TicketService et récupère Ksession. Il renvoie Ksession {timestamp}.
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.
- 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
- 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.
- Un nom unique permet d’accéder à toutes les ressources, il n’est pas nécessaire de mapper une lettre sur chaque ressource
- É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 » :
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
Créer un disque virtuel :
Au format « vmdk », pour une meilleur compatibilité avec un cluster Proxmox2 par exemple :
En sélectionnant « Dynamiquement alloué » votre image grossira en fonction du remplissage de la VM :
Nommer le disque avec le même nom que votre VM , ici « dc1 » :
Sélectionner le « lecteur optique » et le « disque dur » en ordre d’amorcage avec le chipset « ich9 » :
Dans l’onglet « stockage », ajouter l’ISO debian jessie au lecteur de CD :
Dans les pré-requis, vous avez dû créer un réseau privé en NAT :
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 :
Pour la localisation choisir « other » dans le premier menu :
Ensuite « Europe » :
Et enfin « France » :
On reste en « en_US.UTF-8 » :
Avec un clavier « French » :
Attendre …
Sélectionner la seconde interface réseau en mode « NAT » pour débuter l’installation via internet :
Nommer votre machine « dc1old » :
Le nom de domaine pour la formation sera « formation.fr » :
Renseigner le mot de passe root ici « Pa$$w0rd » :
Création de l’utilisateur « asr » :
avec le mot de « Pa$$w0rd » :
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
Sur l’unique disque :
Une seule partition :
Vérifier les partitions :
Et valider les changements :
La pré-installation débute :
Sélectionner un dépôt Debian :
Sur ftp.fr.debian.org par exemple :
Laisser le proxy vide si vous sortez directement :
Vous avez accès à internet si l’écran suivant apparait :
Dans le taskselector, nous choisissons un installation minimale, « SSH server » et « Standard System »:
Installer le grub sur le master boot :
Pour la VM sélectionner /dev/sda :
Installation terminée, vous pouvez rebooter :
Une fois la machine virtuelle est redémarré, connectez-vous sur la console VirtualBox via le compte « asr »
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
...
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
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
Editer la fiche de l’utilisateur précédemment créé :
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
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 :
- 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)
- Le bon paramétrage du fichier /etc/krb5.conf
- 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 » :
- Remplacer le nom du serveur
- 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’!
- 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 :
- Configurer le service NTP :Paramétrage du fuseau horaire et synchronisation du temps
- Reconfigurer les fichiers (nsswitch.conf, sssd, …) assurant l’authentification sur Linux.
- Configurer le service DNS en intégrant les entrées forward et reverse de tous les serveurs.
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 colombetDésactiver l’expiration du mot de passe
net sam set pwnoexp « colombet » noDésactiver le changement de mot de passe à l’ouverture de session
net sam set pwdmustchangenow « colombet » noDé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 :
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 …)
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 '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
ADEL'
dn: cn=vieuxcomptedc1ad:~# 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
ADEL: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=vieuxcomptedc1ad:~# 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
ADEL: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
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 ».
Explication : Nommer le nouvel objet, par exemple ici on utilise la règle de nommage nomdudomaine_ordinateur/utilisateur_cible.
Explication :Cette stratégie s’applique uniquement aux ordinateurs et suivant la règle de nommage précédente.
Explication : Création d’un filtre WMI qui cible uniquement les machines Windows 10
Explication : Dans Stratégie d’ordinateur, Modèles d’administration, Composants Windows, Onedrive, sélectionner les options de la capture.
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 :
#=====================================================================
# 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).
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 :
Executer un gpupdate /force depuis une console cmd. Déconnectez et reconnectez vous à la session afin d’avoir votre lecteur réseau monté automatiquement
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
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
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 :
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
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 :
http://10.X.X.X:XXXX/install.php
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 :
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://
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
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
- Installer le kit de ressource Microsoft Windows 2003 Resource Kit Tools.
- Créer un fichier REG avec les informations suivantes avec d’activer le partage SYSVOL sur le dc2:
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
- 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
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
Références
- Contrôleur de domaine avec SaMBa et LDAP sous Debian ETCH
- Installation d’un serveur DNS Bind 9 sur Debian
- PDC Samba + LDAP
- SambaWiki – Migrating a Samba NT4 Domain to Samba AD
- https://debian-handbook.info/browse/fr-FR/stable/sect.ldap-directory.html
- https://wiki.samba.org/index.php/Verifying_the_Directory_Replication_Statuses
- https://wiki.samba.org/index.php/Client_specific_logging
- Tranquil IT – Migration Samba3 to Samba4
Notes :
- Capacité d’un système à fonctionner avec d’autres produits de manière compatible ↩
- http://pve.proxmox.com/wiki/Proxmox_VE_Cluster ↩ ↩