6
votes

Violation de contraintes LDAP lors de la modification du mot de passe dans la publicité via LDAPModify

J'essaie actuellement de modifier les mots de passe dans notre envoinment Active Directory via LDAP sous Linux, car les utilisateurs en question n'ont pas accès à une machine Windows et nous souhaitons le garder de cette façon. Afin de modifier le mot de passe, je suis actuellement coincé sur la manière d'utiliser LDAPMOFIFY pour le faire. Après beaucoup de lecture sur différents sites / forums / groupes de discussion, je suis beaucoup plus confus qu'avant

Toutefois: J'essaie la commande suivante de le faire: xxx

le contenu de la LDIF.Example: xxx

(Don ' t crain - ces mots de passe ne sont utilisés nulle part et ce n'est pas une envoi de production)

maintenant - chaque fois que j'exécute la commande, je reçois l'erreur suivante: xxx

Maintenant, après ce que j'ai lu la raison de cette erreur, c'est que le mot de passe est mal formaté ou que la stratégie de mot de passe ne permet pas le mot de passe que j'ai utilisé. J'ai vérifié la politique - plusieurs fois maintenant - et le nouveau mot de passe est définitivement conforme à la politique de tous les critères. Si je définis le mot de passe à l'aide d'une machine Windows, cela fonctionne également bien (bien sûr, j'ai changé le "Oldpassword" et "Newpassword", puisque je ne suis pas autorisé par la stratégie de passer à un mot de passe antérieur). Le mot de passe que j'entre après avoir passé l'option "-w" à LDAPModify est également définitivement correct, sinon l'erreur crache par ldapModifie est que j'ai utilisé des informations d'identification non valides au lieu d'une violation de contrainte. Donc, la seule raison pour laquelle je peux penser est en effet un mot de passe formaté de mauvais formaté - mais je ne peux pas comprendre où la mauvaise formatage devrait venir de puis que j'utilise l'algorythm de base64 normal pour coder le mot de passe.

Quelqu'un a-t-il une idée de ce qui se passe? Quelqu'un peut-il me pousser dans la bonne direction?

L'aide est très appréciée et je vous remercie d'avance.

EDIT: Quelque chose qui me bugs: Lorsque j'exécute les chaînes codées de la base à travers la base64, il continue à me dire "entrée non valide". Maintenant, je suis allé de l'avant et je suis juste à nouveau codé les mots de passe avec l'utilisation de base64 sur la machine Linux - mais lorsque j'exécute la chaîne générée via la fonction de décodage à nouveau, la base64 continue de me dire "entrée non valide" ... les cordes aussi légèrement changé entre la chaîne codée Windows-Base64 et la chaîne codée Linux. Mais Base64 dit simplement "entrée non valide", peu importe ce que je mets là.

EDIT2: NeverMind - lire le but de la fonction que je rassemble que cela jette cette erreur en raison des points et de la marque d'exclamation dans le mot de passe.


2 commentaires

Je ne suis pas sûr que vous devriez faire un codage du tout. Le serveur LDAP devrait le faire. Essayez de fournir les deux mots de passe en texte brut.


Oui, en effet - sans encoder le mot de passe, il semble fonctionner correctement. Comme je l'ai dit: J'ai beaucoup lu sur ce sujet et tout ce que j'ai lu suggère que je avoir d'utiliser une chaîne codée pour modifier le mot de passe. Évidemment - ce n'est pas tout à fait vrai. Merci!


5 Réponses :


1
votes

Qu'en est-il de rechercher un mot de passe existant et de travail d'un utilisateur différent et d'essayer d'inclure cela dans votre LDIF?

De cette façon, vous êtes sûr que votre mot de passe fonctionne. P>

second, ne pas Utilisez Supprimer / Ajouter une utilisation Remplacer à la place dans le LDIF. Peut-être que la suppression provoquera une violation d'objetClass. P>

Troisième, vous n'avez besoin que de base64 coder un attribut s'il contient des caractères non imprimables ou spéciaux. Il existe une ligne vide à la fin du fichier LDIF. P>

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com
changetype: modify
replace: unicodePwd
unicodePwd: BlaUUki12.


3 commentaires

Merci pour votre réponse - remplacez effectivement fonctionne bien, mais le problème est que je dois utiliser une liaison administrative afin d'utiliser la fonction de remplacement. Mais cela va probablement, je vais simplement créer un autre compte. Depuis que je l'ai résolu avec SMBPasswD au lieu de LDAP techniquement, je n'en ai plus besoin - mais je le ferai de toute façon car je creuse actuellement à LDAP. Merci encore!


Ceci est une ancienne question mais remplacer est uniquement pour admin et non les utilisateurs


Comme indiqué, Remplacer ne fonctionne pas pour l'utilisateur pour remplacer leur propre mot de passe. Cela ne devrait pas être la réponse acceptée.



3
votes

Pour une référence future, si quelqu'un devait rencontrer des problèmes similaires: La solution simple? Il suffit d'utiliser smbasswd au lieu de LDAP pour changer le mot de passe - qui fonctionne parfaitement! Je suis vraiment grinchée que je ne l'ai pas pensé avant: d

Cependant, la façon de changer votre mot de passe dans l'Active Directory à l'aide de Samba (à l'aide de CENTOS): P>

~#yum install samba
~#smbpasswd -r domaincontroller.example.com -U testuser1
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user testuser1 on domaincontroller.example.com


0 commentaires

1
votes

Yum Install Samba Code> n'a pas fonctionné pour moi car il a installé le programme SMBPasswD de Samba version 3.6.9.

Qu'est-ce qui a fonctionné était Yum Installez samba4-client code>. Ceci installe le programme SMBPasswD pour Samba 4 et cette version de SMBPasswD Actualy peut changer de mot de passe sur le contrôleur de domaine Windows Server 2008 R2. J'ai utilisé Samba4-Client comme je n'ai pas besoin du serveur Samba Seuls ses utilitaires clients. P>

La syntaxe de la commande SMBPasswd est la même: P>

smbpasswd -r domaincontroller.example.com -U testuser1    


0 commentaires

2
votes

Une erreur de contrainte peut signifier que vous utilisez un ancien mot de passe qui ne correspond pas à la politique de, par exemple, ne peut pas utiliser les 24 derniers mots de passe. Pour les futures références: Connectez-vous au serveur AD (BIND): 1. En tant qu'administrateur: vous pouvez modifier et réinitialiser le mot de passe pour tout le monde. Il y a une différence entre le changement et la réinitialisation. Change = AD appliquera la politique de mot de passe. Réinitialiser = pas. 2. En tant qu'utilisateur: vous pouvez modifier votre mot de passe mais non autorisé à le réinitialiser. Change = AD appliquera la politique de mot de passe. J'espère que cela vous aide bien que c'est un peu tardif!


0 commentaires

3
votes

Lors de la définition du mot de passe, il doit être utilisé UTF-16LE et BASE64 codé. En Java, cela pourrait être fait avec:

String source = "\"car\"";
String utf16base64 = new String(Base64.getEncoder().encode(source.getBytes("UTF-16LE")));


0 commentaires