Architecture

Changer le mot de passe d'amadmin

Sur cette page

amadmin est le super-administrateur de TOSIAM. Son mot de passe est choisi à l’installation (ADMIN_PWD). Ce compte n’est rangé dans aucun magasin d’identités : il est enregistré dans le Config Store, partagé par tous les serveurs du déploiement. Un changement de mot de passe vaut donc pour tous les serveurs à la fois.

Cette page décrit le changement avec ssoadm, la mise à jour des fichiers et des secrets qui contiennent l’ancien mot de passe, puis la réinitialisation par LDAP quand le mot de passe est perdu.

Avant de commencer#

Repérez d’abord tout ce qui se connecte en tant qu’amadmin. Ces fichiers et ces secrets gardent l’ancien mot de passe tant que vous ne les mettez pas à jour :

Faites défiler le tableau
OùRôle
~/tosiam/.pwd.txt (installation pas à pas), tools/admin/.pwd.txt (QuickStart)Fichier de mot de passe de ssoadm
Clé amadmin-password du secret (image Docker, charts Helm)Configuration d’un nouveau serveur, commande ssoadm de l’image, import de la configuration déclarative, job de nettoyage des serveurs retirés
Variables et fichiers des scripts, pipelines de CI, tosiam-configAppels de l’API et de ssoadm

Ne confondez pas amadmin avec les comptes de l’annuaire :

  • le compte qui lie TOSIAM au Config Store (DS_DIRMGRDN, uid=tosiam,ou=system,…) a son propre mot de passe ;
  • ampassword --admin change le mot de passe de ce compte de l’annuaire, pas celui d’amadmin.

Changer le mot de passe avec ssoadm#

La commande set-identity-attrs remplace l’attribut userpassword d’amadmin. Elle s’authentifie avec l’ancien mot de passe. Les exemples suivent les chemins de l’installation pas à pas.

  1. Écrivez le nouveau mot de passe dans un fichier de données, lisible par vous seul. Le fichier évite de passer le mot de passe en argument : il resterait visible dans la liste des processus et dans l’historique du shell, et ses caractères spéciaux devraient être échappés.

    bash
    umask 077
    read -rs -p "Nouveau mot de passe : " NEW_PWD; echo
    printf 'userpassword=%s\n' "$NEW_PWD" > /tmp/amadmin.properties
    unset NEW_PWD
  2. Lancez la commande. --password-file désigne le fichier qui contient encore l’ancien mot de passe :

    bash
    ~/tosiam/admin/tosiam/bin/ssoadm set-identity-attrs \
      --realm / --idtype User --idname amadmin \
      --datafile /tmp/amadmin.properties \
      --adminid amadmin --password-file ~/tosiam/.pwd.txt
    sortie
    Attribute values of identity, amadmin of type, User in realm, / was modified.
  3. Mettez à jour le fichier de mot de passe de ssoadm avec la même valeur, puis supprimez le fichier de données. ssoadm refuse un fichier de mot de passe qui n’a pas les droits 400 :

    bash
    chmod 600 ~/tosiam/.pwd.txt
    sed -n 's/^userpassword=//p' /tmp/amadmin.properties > ~/tosiam/.pwd.txt
    chmod 400 ~/tosiam/.pwd.txt
    rm /tmp/amadmin.properties
  4. Vérifiez la connexion. Le nouveau mot de passe donne un jeton, l’ancien est refusé (401) :

    bash
    curl -s -X POST "https://tosiam.example.fr/tosiam/json/authenticate" \
      -H "Content-Type: application/json" \
      -H "X-Requested-With: XMLHttpRequest" \
      -H "Accept-API-Version: resource=2.0, protocol=1.0" \
      -H "X-OpenAM-Username: amadmin" \
      -H "X-OpenAM-Password: $(cat ~/tosiam/.pwd.txt)"
    sortie
    {"tokenId":"EION-OGXUphdCtPa0UUXQtcKDRo.*AAJTSQACMDIAAlNLABx…","successUrl":"/console/"}

Le changement est immédiat, sans redémarrage, et il est conservé au redémarrage du serveur. Les sessions déjà ouvertes par amadmin restent valides jusqu’à leur expiration.

Mettez ensuite à jour les autres fichiers et secrets repérés avant de commencer.

Image Docker et Kubernetes#

Dans l’image Docker de TOSIAM, la commande ssoadm lit le mot de passe dans le secret monté /run/secrets/tosiam/amadmin-password. Respectez l’ordre suivant :

  1. Préparez le fichier de données comme à l’étape 1 ci-dessus, puis changez le mot de passe depuis un pod, pendant que le secret contient encore l’ancien mot de passe. La commande ssoadm de l’image ajoute elle-même --adminid et --password-file :

    bash
    kubectl exec -i tosiam-0 -- sh -c 'umask 077; cat > /tmp/amadmin.properties
      ssoadm set-identity-attrs --realm / --idtype User --idname amadmin \
        --datafile /tmp/amadmin.properties
      rm -f /tmp/amadmin.properties' < /tmp/amadmin.properties
  2. Mettez le secret à jour avec le nouveau mot de passe. Avec le chart tosiam-stack, c’est le secret désigné par secrets.name (par défaut tosiam-stack-secrets). jq construit le patch, ce qui évite d’échapper les caractères spéciaux :

    bash
    kubectl patch secret tosiam-stack-secrets --type merge \
      -p "$(sed -n 's/^userpassword=//p' /tmp/amadmin.properties \
            | jq -Rc '{stringData: {"amadmin-password": .}}')"
    rm /tmp/amadmin.properties

    Une mise à jour du chart (helm upgrade) conserve les valeurs du secret existant.

Plusieurs serveurs#

Le mot de passe est enregistré une seule fois, dans le Config Store. Chaque serveur reçoit la modification par sa recherche persistante sur le Config Store et l’applique sans redémarrage. Il suffit donc de lancer la commande sur un seul serveur. En revanche, les fichiers de mot de passe de ssoadm sont locaux : mettez-les à jour sur chaque serveur.

Mot de passe perdu : réinitialiser par LDAP#

Sans l’ancien mot de passe, ssoadm ne peut pas s’authentifier. On écrit alors le mot de passe directement dans le Config Store. Il faut deux accès :

  • un compte d’écriture sur le Config Store, par exemple cn=Directory Manager ;
  • un shell sur un serveur TOSIAM, pour l’outil ampassword. Cet outil chiffre une valeur avec la clé de chiffrement du déploiement (AM_ENC_KEY), qu’il trouve dans la configuration de démarrage de l’instance.

Le Config Store ne contient pas le mot de passe en clair. Il en garde l’empreinte SHA-1 en Base64, chiffrée avec la clé du déploiement. Elle est rangée dans l’attribut sunKeyValue de l’entrée ou=amAdmin, sous le service sunIdentityRepositoryService.

  1. Sur le serveur TOSIAM, calculez l’empreinte du nouveau mot de passe, puis chiffrez-la :

    bash
    umask 077
    read -rs -p "Nouveau mot de passe : " NEW_PWD; echo
    printf '%s' "$NEW_PWD" | openssl dgst -sha1 -binary | base64 > /tmp/amadmin.hash
    unset NEW_PWD
    chmod 400 /tmp/amadmin.hash
    ~/tosiam/admin/tosiam/bin/ampassword --encrypt /tmp/amadmin.hash
    rm -f /tmp/amadmin.hash
    sortie
    AgMDAAAbWNZZ0tQRsiVR7lXJj/D0haQVGaaCy3kI0hmhAV/vfV2CGFQgzqtle/8XwPGXH6SiN5HcFcax2F5P8sGHwQeEe0g=
  2. Lisez l’entrée d’amadmin dans le Config Store. Remplacez dc=example,dc=fr par le ROOT_SUFFIX de l’installation :

    bash
    ldapsearch -h config.example.fr -p 1389 -D "cn=Directory Manager" -W \
      -b "ou=amAdmin,ou=users,ou=default,ou=GlobalConfig,ou=1.0,ou=sunIdentityRepositoryService,ou=services,dc=example,dc=fr" \
      -s base "(objectClass=*)" sunKeyValue
    sortie
    dn: ou=amAdmin,ou=users,ou=default,ou=GlobalConfig,ou=1.0,ou=sunIdentityReposito
     ryService,ou=services,dc=example,dc=fr
    sunKeyValue: inetUserStatus=Active
    sunKeyValue: roles=
    sunKeyValue: userPassword=AgMDAAAbWAFnXLm0GsbqfpuEJZVggKVvSnXC+wmZt2QOCJX11iWKrh
     AddTPeU/Crp1ZQvQ2lMkrg0NS8mD2BoRhJe8S0LuA=
  3. Remplacez l’attribut. Le replace réécrit toutes les valeurs de sunKeyValue : recopiez les autres valeurs lues à l’étape précédente, et mettez la valeur chiffrée de l’étape 1 après userPassword= :

    bash
    ldapmodify -h config.example.fr -p 1389 -D "cn=Directory Manager" -W <<'LDIF'
    dn: ou=amAdmin,ou=users,ou=default,ou=GlobalConfig,ou=1.0,ou=sunIdentityRepositoryService,ou=services,dc=example,dc=fr
    changetype: modify
    replace: sunKeyValue
    sunKeyValue: inetUserStatus=Active
    sunKeyValue: roles=
    sunKeyValue: userPassword=AgMDAAAbWNZZ0tQRsiVR7lXJj/D0haQVGaaCy3kI0hmhAV/vfV2CGFQgzqtle/8XwPGXH6SiN5HcFcax2F5P8sGHwQeEe0g=
    LDIF
  4. Vérifiez la connexion comme à l’étape 4 du changement avec ssoadm. Les serveurs reçoivent la modification par la recherche persistante, sans redémarrage. Mettez enfin à jour les fichiers et les secrets qui contiennent l’ancien mot de passe.

Pour aller plus loin#

Mis à jour le