La plupart des services Web auto-hébergés peuvent s'authentifier auprès d'un serveur principal à l'aide de LDAP ou Kerberos .
Héberger un serveur pour gérer l'authentification à l'aide de ces protocoles peut être une tâche intimidante pour les non-initiés.
Ce guide explique comment configurer Samba en tant que serveur d'authentification principal pour permettre à chaque utilisateur de s'authentifier auprès de plusieurs services avec un seul compte.
Le serveur d'authentification exécutera les services de domaine Active Directory en tant que contrôleur de domaine pour activer l'authentification sur LDAP et Kerberos.
Ce guide vous expliquera également comment configurer Nextcloud pour authentifier les utilisateurs à l'aide de LDAP.
Les utilisateurs pourront se connecter et modifier leurs mots de passe via l'interface Web de Nextcloud. Le même mot de passe (modifié) serait également utilisable pour d'autres services (web).
Toutes les actions de ce guide sont directement exécutées par l'utilisateur root. En fait, le faire est une mauvaise pratique. Il est préférable de travailler avec quelque chose comme sudo lors de l'exécution des actions de ce guide. La commande sudo a été évitée pour garder les commandes courtes.
Ce guide fera souvent référence au site Web de Windows et de Microsoft. L'objectif de Samba est d'offrir une implémentation d'Active Directory et des protocoles sous-jacents de manière à ce qu'ils soient compatibles avec l'implémentation originale de Microsoft. Par conséquent, la meilleure source d'informations techniques de base est parfois Microsoft.
Un avertissement de sécurité : voici des dragons
Ce guide vise à implémenter Active Directory en utilisant Samba comme contrôleur de domaine. Samba, comme Windows, stocke les mots de passe de manière non sécurisée en utilisant un seul hachage MD4 sans sel, désigné par Microsoft sous le nom de hachage NT . Un exemple de génération d'un hachage NT est donné dans Contexte : Mots de passe des comptes Active Directory .
En termes de sécurité, l'utilisation d'une fonction unidirectionnelle sans sel est l'une des pires façons de stocker les mots de passe. Les hachages NT stockés sont vulnérables aux attaques par force brute , qui peuvent être utilisées pour récupérer le mot de passe d'origine. Le temps requis peut être considérablement raccourci sur du matériel moins puissant grâce à l'utilisation de tables arc-en-ciel en raison d'un manque de sel. Cela rend les attaques réalistes viables en utilisant des ressources limitées.
Notez que cela n'est pas lié aux mots de passe en transit vers un contrôleur de domaine pour vérification. Sur un réseau, les mots de passe sont protégés par des poignées de main et des connexions sécurisées (NTLMv2, Kerberos et/ou SSL/TLS). La seule façon d'exploiter cette faiblesse dans une attaque par force brute est qu'un adversaire accède aux hachages NT stockés sur un contrôleur de domaine.
Création d'un Active Directory basé sur Samba
Conditions préalables
- Une nouvelle installation Linux. Ce guide a été testé avec Debian 10.
- Une adresse IP statique
- Définir la résolution dans /etc/resolv.conf
- Un nom d'hôte configuré. Changer le nom d'hôte après la configuration d'un Active Directory ne vaut pas la peine qu'il apporte. Dans ce guide, le serveur sera nommé 'addc01'. Un nom d'hôte peut souvent être facilement configuré à l'aide de echo "addc01" > /etc/hostname, combiné à une déconnexion/connexion ou à un redémarrage.
- Pour Active Directory (AD), vous devez avoir une idée du (sous-)domaine DNS que vous souhaitez utiliser comme nom de domaine et du nom NetBIOS que vous souhaitez utiliser pour le nom de domaine Windows NT. Peu importe quand seuls les services Web seront authentifiés, mais ce sera important si vous souhaitez également permettre à d'autres machines de rejoindre le domaine. Ce guide supposera qu'un seul domaine AD sera nécessaire pour tous les services hébergés derrière un seul domaine DNS public. Valeurs pour ce guide :
- Domaine public : exemple.com
- Nom DNS du domaine AD (non utilisé sur Internet) : ad.example.com
- Nom NetBIOS du domaine NT : EXEMPLE
Installez Samba et les autres packages requis
Voir installation de samba dans sa dernière version.
apt-get update
apt-get install bind9utils krb5-user ntp samba
Créer un contrôleur de domaine
Ce processus est similaire à l'installation des services de domaine Active Directory sur un serveur Windows. La vieille garde se souviendra dcpromoalors que les enfants de nos jours utilisent soit le Gestionnaire de serveur, soit PowerShell pour configurer un contrôleur de domaine.
Exécutez la commande :
samba-tool domain provision --use-rfc2307 --interactive
Plusieurs valeurs seront demandées.
- Le domaine est le nom DNS du domaine en majuscules : AD.EXAMPLE.COM
- Le domaine est le nom NetBIOS du domaine NT en majuscules : EXAMPLE
- Le rôle serveur sera contrôleur de domaine : dc
- Pour le backend DNS, nous nous appuyons sur la propre implémentation de Samba : SAMBA_INTERNAL
- Adresse IP du redirecteur DNS : Dans un réseau domestique simple, l'adresse IP de la passerelle (Internet) par défaut peut être utilisée. Pour les réseaux plus complexes, cela doit pointer vers un serveur DNS existant.
- Mot de passe administrateur : ce sera le mot de passe de l'administrateur du domaine. Assurez-vous de choisir un mot de passe sécurisé, car ce compte pourra faire tout et n'importe quoi, localement et à distance. Le mot de passe doit respecter certaines exigences de complexité.
Ajuster les politiques de mot de passe
Les directives d'identité numérique NIST SP 800-63 stipulent :
Les vérificateurs NE DEVRAIENT PAS imposer d'autres règles de composition (par exemple, exiger des mélanges de différents types de caractères ou interdire des caractères répétés consécutivement) pour les secrets mémorisés. Les vérificateurs NE DEVRAIENT PAS exiger que les secrets mémorisés soient changés arbitrairement (par exemple, périodiquement).
Cela signifie que les serveurs d'authentification ne doivent pas demander aux utilisateurs d'avoir des caractères spécifiques dans leurs mots de passe, et que les mots de passe ne doivent pas expirer en fonction de leur âge.
Les mots de passe utilisateur dans AD doivent répondre à plusieurs exigences de complexité . Cela inclut le mot de passe de l'administrateur du domaine, qui a été saisi à l'étape précédente. Ces exigences de complexité ne sont pas conformes aux directives du NIST. Pour désactiver les règles de complexité, exécutez :
samba-tool domain passwordsettings set --complexity=off
Par défaut, les mots de passe utilisateur dans AD expirent. Ceci est également contraire aux directives du NIST. En outre, cela peut créer des situations de blocage dans lesquelles l'utilisateur ne peut pas modifier le mot de passe après son expiration. Pour désactiver l'expiration du mot de passe, exécutez les commandes suivantes :
samba-tool domain passwordsettings set --min-pwd-age=0
samba-tool domain passwordsettings set --max-pwd-age=0
pdbedit -P "maximum password age" -C -1
Les directives du NIST ne précisent rien sur la réutilisation des anciens mots de passe. Par défaut, l'utilisateur n'est pas autorisé à utiliser un certain nombre de mots de passe précédents. Pour désactiver cette vérification, exécutez :
samba-tool domain passwordsettings set --history-length=0
Configurer le serveur NTP
Kerberos s'appuie sur des horloges synchronisées. Pour permettre aux machines du domaine de synchroniser leurs horloges en toute sécurité, le serveur NTP doit être configuré. Cours:
install -d /var/lib/samba/ntp_signd
chown root:ntp /var/lib/samba/ntp_signd
chmod 0750 /var/lib/samba/ntp_signd
echo -e "\nntpsigndsocket /var/lib/samba/ntp_signd/" >> /etc/ntp.conf
systemctl enable ntpd.service
systemctl start ntpd.service
Configurer Kerberos
La configuration des outils clients Kerberos doit s'aligner sur Samba. Samba rend cela facile en fournissant un fichier de configuration préparé. Pour l'utiliser, exécutez :
mv /etc/krb5.conf{,.default}
ln -s /var/lib/samba/private/krb5.conf /etc/krb5.conf
Préparer l'outillage LDB
LDB est le moteur de base de données utilisé par Samba pour stocker les données LDAP (-Like). Des outils sont fournis pour fonctionner avec, mais ils doivent être activés avant de pouvoir être utilisés. Cours:
echo 'export LDB_MODULES_PATH="${LDB_MODULES_PATH}:/usr/lib/samba/ldb"' \
> /etc/profile.d/sambaldb.sh
chmod 0755 /etc/profile.d/sambaldb.sh
echo '. /etc/profile.d/sambaldb.sh' >> ~/.bashrc
. /etc/profile.d/sambaldb.sh
Démarrer et tester Samba
Pour permettre à samba de démarrer au démarrage et de le démarrer immédiatement, exécutez :
systemctl enable samba
systemctl start samba
Pour tester si DNS fonctionne correctement, exécutez :
host -t SRV _ldap._tcp.ad.example.com.
host -t SRV _kerberos._udp.ad.example.com.
host -t A addc01.ad.example.com.
Toutes les commandes doivent retourner des valeurs raisonnables.
Pour tester la prise en charge de la billetterie Kerberos, exécutez :
kinit administrator@AD.EXAMPLE.COM
klist
La première commande demandera le mot de passe de l'administrateur du domaine avant qu'un ticket ne soit donné, ce qui est affiché avec la deuxième commande. Si vous recevez l'erreur kinit: Cannot contact any KDC for realm 'AD.EXAMPLE.COMlors de l'obtention des informations d'identification initiales, supprimez la deuxième entrée du serveur DNS de /etc/systemd/resolved.conf et exécutez systemctl restart systemd-resolved.
Pour tester la prise en charge et l'authentification SMB à l'aide du ticket Kerberos, exécutez :
smbclient //addc01/netlogon -U administrator -k -c 'ls'
Sans demander de mot de passe, il devrait renvoyer la liste des fichiers du répertoire (vide) netlogon.
Activer la prise en charge de TLS pour les connexions LDAP
TLS protège la confidentialité et l'intégrité des données LDAP en transit entre le client et le serveur. De plus, certaines opérations LDAP peuvent ne pas être autorisées à l'aide de connexions en texte brut, telles que la modification des mots de passe utilisateur.
Modifier /etc/samba/smb.conf. Ajoutez les valeurs suivantes à la [global]section :
tls enabled = yes
tls cafile = tls/ca.pem
tls keyfile = tls/key.pem
tls certfile = tls/cert.pem
tls verify peer = ca_and_name
Les certificats et le fichier de clé ont été générés par Samba lors de l'approvisionnement du domaine. Ces fichiers se trouvent dans /var/lib/samba/private/tls. Plus tard, vous devrez peut-être ajouter le certificat de l'autorité de certification ca.pemà la liste des autorités de certification racine de confiance sur les clients LDAP.
Pour référence:
- LDAP utilise TCP 389 et UDP 389 pour les connexions entrantes
- LDAPS (LDAP sur SSL/TLS) utilise TCP 636 pour les connexions entrantes
Notez que tous les certificats générés ont une date d'expiration de deux ans dans le futur. Cela signifie qu'après deux ans, les clients correctement configurés refuseront de se connecter au serveur LDAP car le certificat du serveur et celui de l'autorité de certification ont expiré. Pour générer des certificats qui durent plus longtemps, exécutez :
cd /var/lib/samba/private/tls
# Make a backup of the originally generated keys and certificates
mkdir stock
mv *.pem stock
# Create a root certificate authority keypair and certificate that expires in 10 years
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
# Create an LDAP server keypair and certificate signing request
# Common Name must be the server's full DNS name, such as addc01.ad.example.com
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out cert.csr
# Create a server certificate that expires in 10 years, using the root certificate authority's keypair
openssl x509 -req -in cert.csr -CA ca.pem -CAkey ca.key -CAcreateserial -sha256 -days 3650 -out cert.pem
Autoriser le changement de mot de passe utilisateur via LDAP
Les applications frontales peuvent utiliser LDAP comme serveur d'authentification principal. Certaines de ces applications permettent également aux utilisateurs authentifiés de modifier leurs mots de passe.
AD autorise les changements de mot de passe en manipulant l' attribut unicodePwd d'un compte. Les applications Web telles que Nextcloud ne prennent en charge que les modifications de mot de passe via la manipulation de l' attribut userPassword plus commun de LDAP . Par défaut, ce dernier n'est pas autorisé dans AD. Cela peut être outrepassé en modifiant l' attribut dSHeuristics . Plus précisément, l'heuristique fUserPwdSupport doit être définie sur true. Pour ce faire, exécutez :
ldbedit -e nano -H /var/lib/samba/private/sam.ldb \
-b 'CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=ad,DC=example,DC=com' \
'(objectClass=ntDSService)'
Ajoutez la ligne suivante en bas et enregistrez :
dSHeuristics: 000000001
Cela définira la 9e heuristique de dSHeuristics, fUserPwdSupport, sur true.
Les modifications de mot de passe ne sont autorisées que sur les connexions sécurisées, c'est pourquoi la prise en charge de TLS pour les connexions LDAP a été activée plus tôt.
Travailler avec des utilisateurs et des ordinateurs Active Directory
Vous pouvez utiliser les outils d'administration de serveur distant (RSAT) pour Windows pour manipuler les utilisateurs et les ordinateurs AD. Assurez-vous que la machine Windows est un membre du domaine.
Vous pouvez également utiliser la ligne de commande sous Linux sur le contrôleur de domaine. Voir Contexte : Gestion des utilisateurs et des groupes Samba . Voir également Contexte : Manipulation des attributs utilisateur LDAP Samba pour plus d'informations sur la façon de voir et de modifier les attributs LDAP des utilisateurs existants sur la ligne de commande.
Connecter Nextcloud à Active Directory
Nextcloud est un serveur Web qui peut utiliser LDAP pour l'authentification des utilisateurs. Cela a été testé avec Nextcloud 12.
Préparer Active Directory
Tout d'abord, un compte utilisateur Nextcloud est nécessaire, afin que Nextcloud puisse se connecter à LDAP pour la récupération d'informations. Exécutez sur le contrôleur de domaine :
samba-tool user create nextcloud
Notez le mot de passe de ce compte. Il doit être configuré dans Nextcloud ultérieurement.
Pour faciliter la gestion, il est sage de placer tous les utilisateurs Web dans leur propre unité organisationnelle (OU). Préparez l'OU 'Web Hosting' en créant le fichier create-ou-webhosting.ldifavec le contenu suivant sur le contrôleur de domaine :
dn: OU=Web Hosting,DC=ad,DC=example,DC=com
changetype: add
objectClass: top
objectClass: organizationalUnit
Exécutez maintenant sur le contrôleur de domaine :
ldbadd -H /var/lib/samba/private/sam.ldb create-ou-webhosting.ldif
Pour créer un groupe d'utilisateurs appelé « Utilisateurs Nextcloud » dans l'unité d'organisation d'hébergement Web, exécutez :
samba-tool group add 'Nextcloud Users' --groupou='OU=Web Hosting'
Vous pouvez maintenant créer votre premier utilisateur Nextcloud dans l'unité d'organisation d'hébergement Web. Exécutez sur le contrôleur de domaine :
samba-tool user create testuser \
--given-name=Test --surname=User --mail=testuser@example.com --userou='OU=Web Hosting'
Les attributs donnés (nom et courrier) sont obligatoires pour que Nextcloud fonctionne correctement. Assurez-vous de donner ces attributs à chaque utilisateur Nextcloud dans LDAP.
Faites de 'testuser' un membre du groupe d'utilisateurs Nextcloud. Exécutez sur le contrôleur de domaine :
samba-tool group addmembers 'Nextcloud Users' testuser
Autoriser Nextcloud (administrateurs) à réinitialiser les mots de passe des utilisateurs LDAP
Un compte LDAP a été créé pour permettre à Nextcloud de rechercher des informations LDAP pour les connexions des utilisateurs. Ce compte peut être autorisé à réinitialiser les mots de passe des utilisateurs LDAP Nextcloud. Cela active les fonctionnalités suivantes :
- Chaque utilisateur LDAP peut modifier son propre mot de passe de compte LDAP via l'interface Web de Nextcloud.
- Si un utilisateur LDAP oublie son mot de passe, il peut demander un e-mail avec un lien de réinitialisation de mot de passe.
- Les administrateurs Nextcloud peuvent réinitialiser les mots de passe des utilisateurs.
Tout d'abord, le descripteur d'informations de sécurité (SID) du compte doit être recherché. Pour cela, exécutez sur le contrôleur de domaine :
ldbsearch -H /var/lib/samba/private/sam.ldb '(samAccountName=nextcloud)' 'objectSid'
Pour permettre à l'utilisateur nextcloud de réinitialiser les mots de passe, exécutez-le sur le contrôleur de domaine (comme une seule ligne de commande, ne le divisez pas sur plusieurs lignes comme le fait cet exemple) :
samba-tool dsacl set --action=allow --objectdn='OU=Web Hosting,DC=ad,DC=example,DC=com' \
--sddl="\
(OA;CIIO;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;\
<objectSid>)"
Voir Contexte : configuration des ACL AD DS dans Samba pour plus d'informations sur cette commande et les paramètres utilisés.
Configurer DNS sur le serveur Nextcloud
Ceci est similaire à la configuration du contrôleur de domaine. La seule différence est que l'IP du serveur DNS est celle du contrôleur de domaine au lieu de localhost.
nano /etc/resolv.conf
nameserver 192.168.1.1
Importer le certificat CA sur le serveur Nextcloud
Pour pouvoir établir des connexions sécurisées au serveur LDAP de Samba, il est nécessaire d'ajouter le certificat de l'autorité de certification au magasin de certificats racine de confiance du serveur Nextcloud.
Copiez depuis le contrôleur de domaine Samba le fichier /var/lib/samba/private/tls/ca.pemsur le serveur Nextcloud au format /etc/ca-certificates/trust-source/anchors. Vous voudrez peut-être renommer ca.pemen ad-example-ca.crtpour rendre le but du fichier plus explicite.
Avant l'importation, vous pouvez consulter sur le serveur Nextcloud les tailles de fichiers au format /etc/ca-certificates/extracted/.
Exécutez maintenant sur le serveur Nextcloud :
trust extract-compat
Les tailles de fichier dans
Autoriser les utilisateurs LDAP à se connecter dans Nextcloud
Nextcloud doit être configuré pour autoriser l'authentification des utilisateurs à l'aide des informations d'identification de LDAP. Accédez à l'interface Web Nextcloud et connectez-vous à l'aide du compte administrateur. Ouvrez Paramètres, Admin, Intégration LDAP / AD.
L'onglet Serveur de cette page s'ouvrira. Les autres onglets sont initialement désactivés. Saisissez les valeurs comme suit :
Une fois que Nextcloud a vérifié les valeurs, les autres onglets seront activés. Ouvrez l'onglet Utilisateurs. Ajustez les valeurs comme suit :
Ouvrez maintenant l'onglet Attributs de connexion. Ici, les attributs de connexion disponibles (nom d'utilisateur AD et/ou adresse e-mail) peuvent être choisis. Si les utilisateurs Web ne connaissent pas leurs noms d'utilisateur, il peut être judicieux de n'autoriser que les adresses e-mail pour la connexion, comme le montre cet exemple :
Saisissez l'adresse e-mail de l'utilisateur test ( testuser@example.com ) dans le champ " Tester le nom de connexion " et choisissez " Vérifier les paramètres ' pour vérifier que la valeur peut être utilisée.
Ouvrez l'onglet Avancé et le groupe de paramètres Paramètres du répertoire. Activez l'option « Activer les modifications de mot de passe LDAP par utilisateur » :
cela permettra aux utilisateurs de modifier leurs mots de passe. Ils ne pourront le faire que lorsqu'ils seront connectés ou via un e-mail de réinitialisation de mot de passe. L'avertissement indique que les mots de passe sont envoyés en texte brut au serveur, c'est pourquoi LDAPS (LDAP sur SSL/TLS) est utilisé pour garantir la confidentialité et l'intégrité. Notez que la capture d'écran ci-dessus est simplifiée pour réduire sa taille. Il existe de nombreux autres paramètres, mais ils ne doivent pas être modifiés.
Enfin, ouvrez le groupe de paramètres Attributs spéciaux sur le même onglet. Configurez Nextcloud pour récupérer l'adresse e-mail de l'utilisateur à partir de l'attribut LDAP 'mail' comme ceci :
Aucun autre changement n'est nécessaire. L'onglet Groupes a été ignoré par souci de simplicité, mais il peut être configuré pour importer également des informations de groupe à partir de LDAP. Notez que la prise en charge des groupes LDAP dans Nextcloud est limitée. Les groupes LDAP peuvent être utilisés dans Nextcloud pour distinguer les utilisateurs et leur attribuer des droits Nextcloud, mais les utilisateurs ne peuvent pas se voir attribuer des groupes LDAP dans l'interface Web de Nextcloud.
L'onglet Expert a également été ignoré. Il ne contient que des paramètres qu'il peut être utile de modifier dans des circonstances particulières.
Essayez de vous connecter avec le compte testuser (adresse e-mail : testuser@example.com ) qui a été créé précédemment.
Suppression des utilisateurs LDAP Nextcloud
Supprimer les utilisateurs LDAP de Nextcloud n'est pas aussi simple que les utilisateurs locaux. Un utilisateur LDAP ne peut être supprimé de Nextcloud que si toutes les conditions suivantes sont remplies :
- L'utilisateur a été supprimé dans LDAP (par exemple, en s'exécutant samba-tool user delete <username>sur le contrôleur de domaine).
- L'utilisateur supprimé dans LDAP a été détecté par Nextcloud. Une tâche d'arrière-plan Nextcloud est planifiée pour s'exécuter toutes les 51 minutes (par défaut) pour détecter les utilisateurs LDAP supprimés. Pour voir quels utilisateurs supprimés ont été détectés, exécutez sur le serveur Nextcloud dans le répertoire Nextcloud :
sudo -u http php occ ldap:show-remnants
Où 'http' est le compte qui exécute Nextcloud (en PHP).
Les utilisateurs de cette liste peuvent être supprimés en exécutant :
sudo -u http php occ user:delete <nextcloudName>
Un exemple:
Le nom Nextcloud (en surbrillance) est la valeur de l'attribut UUID de l'utilisateur LDAP (qui a été récemment supprimé de LDAP). Nextcloud utilise cette valeur pour identifier de manière unique les utilisateurs en interne.
Consultez le manuel d'administration Nextcloud pour plus d'informations sur le nettoyage des utilisateurs LDAP.
Pièces d'arrière-plan
Cette partie du guide contient plus d'informations générales sur différents sujets. Il fournit plus d'informations sur le contexte technique.
Contexte : aide-mémoire pour la gestion des utilisateurs Samba
Voici quelques lignes Samba utiles pour la gestion des utilisateurs. Pour faire court, on suppose que toutes ces commandes sont exécutées en tant que root, directement sur le contrôleur de domaine. Ajouter un utilisateur :
samba-tool user create <username> \
--given-name=<givenname> --surname=<surname> --mail=<mailaddress>
Supprimer l'utilisateur : samba-tool user delete <username>Désactiver l'utilisateur : samba-tool user disable <username>Activer l'utilisateur : samba-tool user enable <username>Liste des utilisateurs : samba-tool user listRéinitialiser le mot de passe de l'utilisateur :smbpasswd <username>
De plus, voici plusieurs one-liners pour les groupes. Ceux-ci peuvent être utiles pour séparer. Notez que les noms de groupe peuvent contenir des espaces. Créer un groupe : samba-tool group add '<group name>'Supprimer un groupe : samba-tool group delete '<group name>'Liste des groupes : samba-tool group listAjouter un utilisateur au groupe : samba-tool group addmembers '<group name>' <username>Supprimer un utilisateur du groupe : samba-tool group removemembers '<group name>' <username>Liste des utilisateurs dans le groupe :samba-tool group listmembers '<group name>'
samba-toolest bien documenté. À utiliser samba-tool --helppour une liste de commandes et samba-tool <command> [subcommand] --helppour plus d'informations sur des (sous-)commandes spécifiques.
Contexte : manipulation des attributs utilisateur LDAP Samba
Par défaut, le profil d'un utilisateur de domaine fraîchement créé est assez vide, contenant un minimum d'informations pour qu'AD fonctionne (surtout s'il a smbpasswd -a <username>été utilisé). Parfois, des attributs supplémentaires peuvent être nécessaires.
Pour voir les attributs actuels d'un utilisateur via LDAP (triés), exécutez :
ldbsearch -H /var/lib/samba/private/sam.ldb -S '(samAccountName=<username>)'
Pour modifier les attributs d'un utilisateur dans un éditeur de texte, exécutez :
ldbedit -e nano -H /var/lib/samba/private/sam.ldb '(samAccountName=<username>)'
Cela vous permet d'ajouter les attributs displayName(contenant le nom complet de l'utilisateur) et mail(contenant l'adresse e-mail de l'utilisateur) si vous aviez l'habitude smbpasswd -a <username>de créer un compte utilisateur.
Il est également possible de scripter les modifications LDAP à l'aide de ldbmodify. En savoir plus à ce sujet sur le SambaWiki
Contexte : mots de passe des comptes Active Directory
Les mots de passe sont stockés à l'aide de hachages à sens unique (non salés). Pour obtenir le hachage à partir d'un compte, exécutez :
ldbsearch -H /var/lib/samba/private/sam.ldb '(samAccountName=<username>)' 'unicodePwd'
Notez que le hachage NT ne peut être révélé qu'en interagissant directement avec la base de données de type LDAP Samba Security Accounts Manager (SAM), localement sur le contrôleur de domaine. La même requête ne fonctionnera pas sur une connexion réseau. On peut tester cela en exécutant sur un ordinateur (distant) (avec OpenLDAP installé et le certificat de l'autorité de certification auto-signé importé ) en exécutant :
ldapsearch -Z -h addc01.ad.example.com -D 'CN=Administrator,CN=Users,DC=ad,DC=example,DC=com' -W \
-b 'CN=Users,DC=ad,DC=example,DC=com' '(samAccountName=<username>)' 'unicodePwd'
L'utilisateur sera trouvé, mais unicodePwd ne fait pas partie de la réponse.
Pour créer manuellement un hachage NT, utilisez :
printf '%s' "MyPassword" | \
iconv -t utf16le | \
openssl md4 | \
sed "s/^.*= //" | \
sed 's/\([0-9a-f]\{2\}\)/\\\\\\x\1/gI' | xargs printf | \
base64
Une brève explication : printfimprime le mot de passe (sans aucun caractère de nouvelle ligne). iconvconvertit le mot de passe en une chaîne unicode telle qu'elle est utilisée dans Windows . opensslhache la chaîne unicode à l'aide de MD4 . La première sedligne supprime les opensslsorties non pertinentes . La deuxième sedligne, avec xargs, convertit la chaîne hexadécimale en binaire. base64encode les données binaires en Base64 et imprime la sortie.
Comme indiqué dans l' avertissement de sécurité au début de ce guide , cette forme de stockage de mot de passe n'est guère sécurisée. Gardez votre contrôleur de domaine à jour et réduisez la surface d'attaque au minimum en n'installant pas de logiciel supplémentaire.
Contexte : configuration des listes de contrôle d'accès AD DS dans Samba
Dans le guide, la commande suivante est utilisée pour accorder au nextcloudcompte le droit de réinitialiser les mots de passe des utilisateurs de l'unité organisationnelle Utilisateur :
samba-tool dsacl set --action=allow --objectdn='OU=Web Hosting,DC=ad,DC=example,DC=com' \
--sddl="\
(OA;CIIO;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;\
<sid>)"
Étant donné que la samba-tool dsaclcommande est assez obscure et pas bien documentée, je vais donner une explication de son utilisation ici.
DS signifie Directory Services et ACL signifie Access Control List(s). dsacl setpeut être utilisé pour manipuler les autorisations AD DS. Malheureusement, il n'y a pas de getsous-commande pour lire les autorisations AD DS.
Traditionnellement, les autorisations AD DS sont configurées via les outils d'administration de serveur distant (RSAT) de Microsoft pour Windows. RSAT fournit une interface utilisateur graphique (GUI) et un outil d'interface de ligne de commande (CLI) pour lire et manipuler les autorisations AD DS. L'interface graphique est la fenêtre bien connue « Utilisateurs et ordinateurs Active Directory » et l'outil d'interface de ligne de commande est dsacls.exe.
Bien sûr, l'interface graphique est très conviviale. Permettre à l' svc_nextcloudutilisateur de réinitialiser les mots de passe est aussi simple que :
Bien sûr, les interfaces graphiques ne sont pas efficaces pour l'automatisation. L'outil CLI est beaucoup plus utile pour cela. Pour définir la même autorisation d' svc_nextcloudutilisation de la CLI sous Windows, exécutez :
dsacls "CN=Users,DC=ad,DC=example,DC=com" /G "svc_nextcloud:CA;Reset password;user" /I:S
C'est assez sympathique à lire. Une explication des paramètres :
dsacls "CN=Users,DC=ad,DC=example,DC=com" /G "svc_nextcloud:CA;Reset password;user" /I:S
1 2 3 4 5 6 7
- L'objet AD DS pour lequel modifier les autorisations. notation LDAP.
- Paramètre qui indique que les autorisations spécifiées doivent être accordées au groupe/utilisateur spécifié.
- Le groupe ou l'utilisateur à qui l'autorisation est accordée. notation domaine\utilisateur, notation utilisateur@domaine, notation FQDN ou notation SID.
- Bits d'autorisation. Voir dsacls.exe /?pour une liste.
- Objet ou propriété sur lequel accorder l'autorisation. Afficher la notation du nom.
- Type d'objet hérité. Détermine sur quel type d'objets l'autorisation est accordée au groupe/utilisateur. Afficher la notation du nom.
- Paramètre qui indique que les indicateurs d'héritage spécifiés s'appliquent. Voir dsacls.exe /?pour une liste. L' Sindicateur indique que l'autorisation accordée n'est héritée que par les sous-objets et non par l'objet appliqué lui-même. C'est logique, car les unités d'organisation (telles que 'CN=Users,DC=ad,DC=example,DC=com') n'ont pas de mots de passe à réinitialiser, mais elles contiennent des objets qui en ont (qui sont limités au 'User ' tapez par le paramètre 6).
Comparez maintenant ceci à la samba-toolcommande (les lignes avec les numéros de paramètres sont marquées #et ne font pas partie de l'entrée) :
samba-tool dsacl set --action=allow --objectdn='OU=Web Hosting,DC=ad,DC=example,DC=com' \
# 1 2 3 4
--sddl="\
# 5
(OA;CIIO;CR;00299570-246d-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;\
# 6 7 8 9 10
<sid>)"
# 11
- Commande de l'outil Samba. Voir samba-tool --helppour une liste.
- Sous-commande Samba-tool. Voir samba-tool <command> --helppour une liste. Pour dsacl, setest la seule sous-commande disponible. Voir samba-tool dsacl set --helppour plus d'informations sur son utilisation.
- Paramètre qui indique si la ou les autorisations sont accordées ( allow) ou refusées ( deny).
- Paramètre qui spécifie de quel objet AD DS le descripteur de sécurité sera modifié. L'objet AD DS est donné en notation LDAP.
- Paramètre qui indique qu'une ou plusieurs chaînes d'entrée de contrôle d'accès (ACE) seront fournies dans le langage de définition de descripteur de sécurité (SDDL), chacune séparée par des parenthèses. Consultez cette page MSDN pour plus d'informations sur SDDL.
- Premier paramètre de la chaîne ACE (ace_type). Spécifie le type d'ACE. Voir cette page MSDN pour une liste de toutes les valeurs possibles. Pour l'autorisation accordée, la valeur est OA(ACCESS_ALLOWED_OBJECT_ACE_TYPE), qui indique que l'ACE utilisera la structure ACCESS_ALLOWED_OBJECT_ACE (définit une entrée de contrôle d'accès (ACE) qui contrôle l'accès autorisé à un objet, un ensemble de propriétés ou une propriété).
- Deuxième paramètre de la chaîne ACE (ace_flags). Spécifie un ensemble d'indicateurs de contrôle spécifiques au type ACE. Voir cette page MSDN pour une liste de toutes les valeurs possibles. Pour l'autorisation accordée, ces indicateurs sont CI(CONTAINER_INHERIT_ACE, ACE est hérité par les conteneurs) et IO(INHERIT_ONLY_ACE, ACE ne contrôle pas l'accès à l'objet auquel il est attaché).
- Troisième paramètre de la chaîne ACE (droits). Spécifie les droits d'accès contrôlés par l'ACE. Consultez cette page MSDN pour une liste des valeurs possibles. Pour l'autorisation accordée, cette valeur est CR(ADS_RIGHT_DS_CONTROL_ACCESS, le droit d'effectuer une opération contrôlée par un droit d'accès étendu).
- Quatrième paramètre de la chaîne ACE (object_guid). Spécifie le droit à accorder par son GUID. Consultez cette page MSDN pour une liste des valeurs possibles. Une autre liste peut être trouvée sur cette page Technet . Pour l'autorisation accordée, cette valeur est 00299570-246d-11d0-a768-00aa006e0529, ce qui représente l'autorisation de réinitialisation du mot de passe.
- Cinquième paramètre de la chaîne ACE (inherit_object_guid). Spécifie quel type d'objet héritera de l'autorisation. Le type d'objet est spécifié à l'aide de son ID de schéma GUID. Consultez cette page MSDN pour une liste des valeurs possibles. Pour l'autorisation accordée, il s'agit de bf967aba-0de6-11d0-a285-00aa003049e2, qui représente le type « Utilisateur ».
- Sixième paramètre de la chaîne ACE (account_sid). Spécifie le compte auquel le droit sera accordé par son identificateur de sécurité (SID). Pour obtenir le SID d'un utilisateur Active Directory via LDAP, exécutez :ldbsearch -H /var/lib/samba/private/sam.ldb '(samAccountName=<username>)' 'objectSid'
Efficacement dsacls.exeet samba-toolfaites de même dans ce scénario. Ce qui rend samba-toolbeaucoup plus complexe, ce n'est pas seulement le nombre de paramètres, mais aussi leurs valeurs non intuitives. dsacls.exefait abstraction de la plupart de ces valeurs en utilisant des noms d'affichage et des déductions.