adpypsrp
Description
Ce client traite les événements de type Users, Groups et UserPasswords, et stocke les données dans un Active Directory via des commandes Powershell sur pypsrp.
La liste des paramètres standardAttributes
contient les paramètres des cmdlet utilisées pour les utilisateurs (New-ADUser
/ Set-ADUser
) et les groupes (New-ADGroup
/ Set-ADGroup
).
La liste de paramètres otherAttributes
peut contenir des noms d’attributs LDAP (ldapDisplayName
) disponibles pour gérer ceux qui ne sont pas représentés par les paramètres de cmdlet pour les utilisateurs et les groupes.
Les clés du modèle de données local DOIVENT exister dans standardAttributes
ou otherAttributes
, et seront utilisées comme paramètres de cmdlet avec leurs valeurs associées, permettant de gérer tous les attributs AD.
GroupsMembers
associera uniquement un User
à un Group
.
SubGroupsMembers
associera uniquement un Group
à un Group
, permettant ainsi de gérer les groupes imbriqués.
Pour éviter les problèmes de sécurité et les cas particuliers avec la corbeille, un mot de passe aléatoire complexe est défini lors de la création de l’utilisateur. Ce mot de passe inconnu sera écrasé par le prochain événement UserPassword
de User
. Cela évite d’avoir un compte activé sans mot de passe.
La corbeille ne fait que désactiver le compte.
Configuration
hermes-client-usersgroups_adpypsrp:
WinRM: # Pour plus de détails sur les options, vous pouvez consulter https://pypi.org/project/pypsrp/ - "Connection"
# OBLIGATOIRE : URI et port du serveur AD
host: radon1.in.insa-strasbourg.fr
port: 5986
# OBLIGATOIRE : identifiants de connexion au serveur AD
login: administrator
password: "s3cReT_p4s5w0rD"
# Par défaut : true
ssl: true
# Par défaut : true
ssl_cert_validation: false
# Par défaut : true
credssp_disable_tlsv1_2: true
# Par défaut : "auto". Les valeurs valides sont [auto, always, never]
encryption: always
# Par défaut : "wsman"
path: "wsman"
# Par défaut : "negotiate". Les valeurs valides sont [basic, certificate, negotiate, ntlm, kerberos, credssp]
auth: kerberos
# Par défaut : "WSMAN". Permet de définir la partie service du SPN calculé, utilisée lors de l'authentification au serveur.
# Ceci n'est valide que si l'authentification négociée est Kerberos, ou si Kerberos a été explicitement choisi.
# Si vous obtenez l'erreur "Server not found in Kerberos database", vous pouvez essayer de définir "HTTP" ici.
negotiate_service: WSMAN
AD_domain:
# OBLIGATOIRE : nom de domaine AD et DN
name: in.insa-strasbourg.fr
dn: DC=in,DC=insa-strasbourg,DC=fr
# OBLIGATOIRE : OUs où les utilisateurs et les groupes seront stockés
users_ou: OU=INSA,OU=People,DC=in,DC=insa-strasbourg,DC=fr
groups_ou: OU=INSA,OU=Groups,DC=in,DC=insa-strasbourg,DC=fr
# Facultatif, permet de forcer l'ajout de chaque utilisateur à la liste de groupes spécifiée
# L'ajout de l'appartenance au groupe se fait uniquement à la création de l'utilisateur : tout
# changement de valeur de ce paramètre n'impactera que les utilisateurs qui seront créés ultérieurement
Users_mandatory_groups:
- MandatoryGroup1
- MandatoryGroup2
# Définit les paramètres de cmdlet qui peuvent être définis et le type valide de la valeur qui leur est associée
# Vous devriez vraiment le définir tel quel.
standardAttributes:
Users:
AccountExpirationDate: "<DateTime>"
AccountNotDelegated: "<Boolean>"
AllowReversiblePasswordEncryption: "<Boolean>"
AuthenticationPolicy: "<ADAuthenticationPolicy>"
AuthenticationPolicySilo: "<ADAuthenticationPolicySilo>"
AuthType: "<ADAuthType>"
CannotChangePassword: "<Boolean>"
ChangePasswordAtLogon: "<Boolean>"
City: "<String>"
Company: "<String>"
CompoundIdentitySupported: "<Boolean>"
Country: "<String>"
# Credential: "<PSCredential>" # Inutile : spécifie les identifiants de connexion du compte utilisateur à utiliser pour effectuer cette tâche
Department: "<String>"
Description: "<String>"
DisplayName: "<String>"
Division: "<String>"
EmailAddress: "<String>"
EmployeeID: "<String>"
EmployeeNumber: "<String>"
Enabled: "<Boolean>"
Fax: "<String>"
GivenName: "<String>"
HomeDirectory: "<String>"
HomeDrive: "<String>"
HomePage: "<String>"
HomePhone: "<String>"
KerberosEncryptionType: "<ADKerberosEncryptionType>"
LogonWorkstations: "<String>"
Manager: "<ADUser>"
MobilePhone: "<String>"
Office: "<String>"
OfficePhone: "<String>"
Organization: "<String>"
OtherName: "<String>"
PasswordNeverExpires: "<Boolean>"
PasswordNotRequired: "<Boolean>"
POBox: "<String>"
PostalCode: "<String>"
# PrincipalsAllowedToDelegateToAccount: "<ADPrincipal[]>" # Ne sera pas défini
ProfilePath: "<String>"
SamAccountName: "<String>"
ScriptPath: "<String>"
# Server: "<String>" # Inutile : spécifie l'instance de service de domaine Active Directory à laquelle se connecter
SmartcardLogonRequired: "<Boolean>"
State: "<String>"
StreetAddress: "<String>"
Surname: "<String>"
Title: "<String>"
# TrustedForDelegation: "<Boolean>" # Ne sera pas défini
UserPrincipalName: "<String>"
Groups:
AuthType: "<ADAuthType>"
# Credential: "<PSCredential>" # Inutile : spécifie les identifiants de connexion du compte utilisateur à utiliser pour effectuer cette tâche
Description: "<String>"
DisplayName: "<String>"
GroupCategory: "<ADGroupCategory>"
GroupScope: "<ADGroupScope>"
HomePage: "<String>"
ManagedBy: "<ADPrincipal>"
SamAccountName: "<String>"
# Server: "<String>" # Inutile : spécifie l'instance de service de domaine Active Directory à laquelle se connecter
# Définit les attributs LDAP (ldapDisplayName) à gérer, qui ne sont pas gérés par les attributs standard.
# Vous pouvez définir les valeurs souhaitées. Les valeurs ci-dessous sont données à titre d'exemple.
otherAttributes:
Users:
otherMobile: "<String[]>"
otherTelephone: "<String[]>"
url: "<String[]>"
# Paramètres de génération de mot de passe aléatoire facultatifs. Par défaut : les valeurs spécifiées ci-dessous
# Un mot de passe aléatoire est généré pour initialiser un utilisateur dont le mot de passe n'est pas encore disponible
random_passwords:
# Longueur du mot de passe
length: 32
# Si true, le mot de passe généré peut contenir des lettres majuscules
with_upper_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres majuscules
minimum_number_of_upper_letters: 1
# Si true, le mot de passe généré peut contenir des lettres minuscules
with_lower_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres minuscules
minimum_number_of_lower_letters: 1
# Si true, le mot de passe généré peut contenir des chiffres
with_numbers: true
# Le mot de passe généré contiendra au moins ce nombre de chiffres
minimum_number_of_numbers: 1
# Si true, le mot de passe généré peut contenir des caractères spéciaux
with_special_chars: true
# Le mot de passe généré contiendra au moins ce nombre de caractères spéciaux
minimum_number_of_special_chars: 1
# Si true, le mot de passe généré ne contiendra pas les caractères spécifiés dans 'ambigous_chars_dictionary'
avoid_ambigous_chars: false
# Le dictionnaire des caractères ambigus (sensibles à la casse) qui peuvent être interdits dans le mot de passe, même si certains sont présents dans d'autres dictionnaires
ambigous_chars_dictionary: "lIO01"
# Le dictionnaire des lettres (insensibles à la casse) autorisées dans le mot de passe
letters_dictionary: "abcdefghijklmnopqrstuvwxyz"
# Le dictionnaire des caractères spéciaux autorisés dans le mot de passe
special_chars_dictionary: "!@#$%^&*"
Datamodel
Les types de données suivants peuvent être configurés :
Users
: nécessite que l’attribut SamAccountName
soit défini
UserPasswords
: nécessite évidemment Users
, et que l’attribut user_pkey
corresponde aux clés primaires de Users
, et nécessite l’attribut password
. Tous les autres attributs seront ignorés
Groups
: nécessite que l’attribut SamAccountName
soit défini
GroupsMembers
: nécessite évidemment Users
et Groups
, et nécessite que les attributs user_pkey
et group_pkey
correspondent aux clés primaires de Users
et Groups
. Tous les autres attributs seront ignorés
SubGroupsMembers
: nécessite évidemment Groups
, et nécessite que les attributs subgroup_pkey
et group_pkey
correspondent respectivement à la clé primaire du sous-groupe à affecter, et à celle du groupe d’affectation. Tous les autres attributs seront ignorés
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
SamAccountName: login_on_server
UserPrincipalName: "{{ login_on_server ~ '@YOU.AD.DOMAIN.TLD' }}"
# Pas obligatoire, juste présent pour exemple :
MobilePhone: "{{ (mobile | default([None]))[0] }}" # <String>
otherMobile: "{{ (mobile | default([]))[1:] }}" # <String[]>
# ...
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
password: cleartext_password_on_server
# ...
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
group_pkey: group_primary_key_on_server
SamAccountName: group_name_on_server
# ...
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
group_pkey: group_primary_key_on_server
# ...
SubGroupsMembers:
hermesType: your_server_SubGroupsMembers_type_name
attrsmapping:
subgroup_pkey: subgroup_primary_key_on_server
group_pkey: group_primary_key_on_server
# ...
bsspartage
Description
Ce client traite les évènements de type Users, UserPasswords, Groups, GroupsMembers, GroupsSenders et Ressources, et stocke les données dans le tableau de bord de PARTAGE via son API, gérée par libPythonBssApi.
Pour éviter les problèmes de sécurité, si aucun hash n’est disponible à la création de l’utilisateur, un mot de passe aléatoire complexe sera défini. Ce mot de passe inconnu sera modifié lorsqu’un attribut userPassword
sera défini sur User
ou sur UserPassword
. Cela évite d’avoir un compte activé sans mot de passe.
La corbeille ne fait que désactiver le compte.
Configuration
Vous devez configurer un mapping d’authentification authentication
contenant tous les domaines gérés par ce client en tant que clés et leur clé API en tant que valeurs.
hermes-client-usersgroups_bsspartage:
authentication:
example.com: "Secret_API_key_of_example.com"
subdomain.example.com: "Secret_API_key_of_subdomain.example.com"
# Lorsqu'un attribut n'a plus de valeur, le comportement par défaut est de conserver sa dernière valeur en place.
# Ce paramètre permet de remplacer ce comportement pour les attributs spécifiés, avec des valeurs de remplacement.
# Veuillez noter qu'il est interdit de définir Users.userPassword, car le comportement par défaut est de générer un nouveau mot de passe aléatoire.
# Il est également interdit de définir des valeurs nulles, car cela revient au comportement par défaut. Dans ce cas, supprimez simplement l'attribut concerné de cette liste.
#
# Les valeurs définies ci-dessous sont les valeurs par défaut utilisées si default_removed_values n'est pas défini
default_removed_values:
Users:
co: ""
company: ""
description: ""
displayName: ""
facsimileTelephoneNumber: ""
givenName: ""
homePhone: ""
initials: ""
l: ""
mobile: ""
name: ""
pager: ""
postalCode: ""
st: ""
street: ""
telephoneNumber: ""
title: ""
zimbraNotes: ""
zimbraPrefMailForwardingAddress: ""
zimbraMailCanonicalAddress: ""
zimbraPrefFromDisplay: ""
zimbraMailQuota: 0
Groups:
# Ces valeurs devraient être définies comme des chaînes vides, mais un bug dans l'API les ignore.
# Ce bug a été signalé à l'équipe de PARTAGE.
description: "-"
displayName: "-"
zimbraNotes: "-"
Resources:
co: ""
description: ""
l: ""
postalCode: ""
st: ""
street: ""
zimbraCalResBuilding: ""
zimbraCalResContactEmail: ""
zimbraCalResContactName: ""
zimbraCalResContactPhone: ""
zimbraCalResFloor: ""
zimbraCalResLocationDisplayName: ""
zimbraCalResRoom: ""
zimbraCalResSite: ""
zimbraNotes: ""
zimbraCalResCapacity: "-1"
# Paramètres de génération de mot de passe aléatoire facultatifs. Par défaut : les valeurs spécifiées ci-dessous
# Un mot de passe aléatoire est généré pour initialiser un utilisateur dont le mot de passe n'est pas encore disponible
random_passwords:
# Longueur du mot de passe
length: 32
# Si true, le mot de passe généré peut contenir des lettres majuscules
with_upper_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres majuscules
minimum_number_of_upper_letters: 1
# Si true, le mot de passe généré peut contenir des lettres minuscules
with_lower_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres minuscules
minimum_number_of_lower_letters: 1
# Si true, le mot de passe généré peut contenir des chiffres
with_numbers: true
# Le mot de passe généré contiendra au moins ce nombre de chiffres
minimum_number_of_numbers: 1
# Si true, le mot de passe généré peut contenir des caractères spéciaux
with_special_chars: true
# Le mot de passe généré contiendra au moins ce nombre de caractères spéciaux
minimum_number_of_special_chars: 1
# Si true, le mot de passe généré ne contiendra pas les caractères spécifiés dans 'ambigous_chars_dictionary'
avoid_ambigous_chars: false
# Le dictionnaire des caractères ambigus (sensibles à la casse) qui peuvent être interdits dans le mot de passe, même si certains sont présents dans d'autres dictionnaires
ambigous_chars_dictionary: "lIO01"
# Le dictionnaire des lettres (insensibles à la casse) autorisées dans le mot de passe
letters_dictionary: "abcdefghijklmnopqrstuvwxyz"
# Le dictionnaire des caractères spéciaux autorisés dans le mot de passe
special_chars_dictionary: "!@#$%^&*"
Datamodel
Les types de données suivants peuvent être configurés :
Users
: pour les comptes utilisateurs. Nécessite la définition des attributs name
et sn
, un attribut facultatif aliases
peut être défini, et les autres sont des attributs tels que définis et utilisés par libPythonBssApi et sont facultatifs.
Notez que les attributs zimbraAllowFromAddress
, zimbraFeatureContactsEnabled
et zimbraMailForwardingAddress
ne sont pas pris en charge par libPythonBssApi.
UserPasswords
: nécessite évidemment Users
et que ses clés primaires correspondent aux clés primaires de Users
, et nécessite l’attribut userPassword
qui doit contenir un hash LDAP valide. Tous les autres attributs seront ignorés. Comme l’attribut userPassword
peut également être géré par Users
, vous devez choisir : soit vous le gérez par Users
, soit par UserPasswords
, mais pour des raisons évidentes vous ne devez en aucun cas utiliser les deux en même temps.
Groups
: pour les groupes et les listes de distribution. Nécessite que les attributs name
et zimbraMailStatus
soient définis, un attribut facultatif aliases
peut être défini, et les autres sont des attributs tels que définis et utilisés par libPythonBssApi et sont facultatifs.
GroupsMembers
: pour ajouter des utilisateurs en tant que membres du groupe. Nécessite évidemment Users
et Groups
, et nécessite les attributs user_pkey
et group_pkey
correspondant aux clés primaires de Users
et Groups
. Tous les autres attributs seront ignorés.
GroupsSenders
: pour ajouter des utilisateurs en tant qu’expéditeurs du groupe. Nécessite évidemment Users
et Groups
, et nécessite les attributs user_pkey
et group_pkey
correspondant aux clés primaires de Users
et Groups
. Tous les autres attributs seront ignorés.
Resources
: pour les ressources. Nécessite que les attributs name
, zimbraCalResType
et displayName
soient définis, et les autres sont des attributs tels que définis et utilisés par libPythonBssApi et sont facultatifs.
Avertissement
Si vous définissez Users.zimbraCOSId
, vous devriez éviter de définir des attributs gérés par la COS dans votre modèle de données, car le remplacement de la valeur par défaut de la COS peut entraîner des comportements inattendus.
Avertissement
Étant donné que l’API ne permet pas de renommer des Groups
et Resources
, cette opération est effectuée en supprimant l’ancienne instance et en recréant la nouvelle dans la foulée. Cependant, cela peut entraîner des pertes de liens et d’informations (par exemple, des calendriers de ressources), et il est probablement préférable d’éviter ces renommages.
Astuce
Pour gérer Users.zimbraCOSId
, il est probable que votre source de données fournisse un nom plutôt que le COSId. Il est possible de déclarer une table de correspondance en Jinja directement dans votre configuration :
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
# ...
zimbraCOSId: >-
{{
{
'name_of_cos1': '11111111-1111-1111-1111-111111111111',
'name_of_cos2': '22222222-2222-2222-2222-222222222222',
'name_of_cos3': '33333333-3333-3333-3333-333333333333',
}[zimbraCOSName_value_from_server | default('name_of_cos1') | lower]
| default('11111111-1111-1111-1111-111111111111')
}}
# ...
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
# Adresse mail principale de l’utilisateur <Adresse mail valide>
name: name_value_from_server
# Nom de famille de l'utilisateur <String>
sn: sn_value_from_server
# Liste des alias de cet utilisateur <String[]>
aliases: aliases_value_from_server
# Numéro EPPN de l’utilisateur <String>
carLicense: carLicense_value_from_server
# Nom du pays <String>
co: co_value_from_server
# Nom de la société ou de l'établissement <String>
company: company_value_from_server
# Description du compte <String>
description: description_value_from_server
# Nom affiché dans les emails <String>
displayName: displayName_value_from_server
# Fax de l'utilisateur <String>
facsimileTelephoneNumber: facsimileTelephoneNumber_value_from_server
# Prénom de l'utilisateur <String>
givenName: givenName_value_from_server
# Téléphone domicile de l'utilisateur <String>
homePhone: homePhone_value_from_server
# Initiales (M. ou Mme) <String>
initials: initials_value_from_server
# Ville de l'utilisateur <String>
l: l_value_from_server
# Numéro de mobile de l'utilisateur <String>
mobile: mobile_value_from_server
# Numéro raccourci de l'utilisateur <String>
pager: pager_value_from_server
# Code postal <String>
postalCode: postalCode_value_from_server
# État de l'utilisateur <String>
st: st_value_from_server
# Rue de l'utilisateur <String>
street: street_value_from_server
# Téléphone de l'utilisateur <String>
telephoneNumber: telephoneNumber_value_from_server
# Fonction de l'utilisateur <String>
title: title_value_from_server
# Empreinte du mot de passe <String>
userPassword: userPassword_value_from_server
# État du compte (défaut active) <String(active, closed, locked)>
zimbraAccountStatus: zimbraAccountStatus_value_from_server
# Id de la classe de service <String>
zimbraCOSId: zimbraCOSId_value_from_server
# Onglet porte document <String (TRUE, FALSE)>
zimbraFeatureBriefcasesEnabled: zimbraFeatureBriefcasesEnabled_value_from_server
# Onglet calendrier <String (TRUE, FALSE)>
zimbraFeatureCalendarEnabled: zimbraFeatureCalendarEnabled_value_from_server
# Onglet mail <String (TRUE, FALSE)>
zimbraFeatureMailEnabled: zimbraFeatureMailEnabled_value_from_server
# Permettre à l’utilisateur d’indiquer une adresse de redirection <String (TRUE, FALSE)>
zimbraFeatureMailForwardingEnabled: zimbraFeatureMailForwardingEnabled_value_from_server
# Onglet préférences <String (TRUE, FALSE)>
zimbraFeatureOptionsEnabled: zimbraFeatureOptionsEnabled_value_from_server
# Onglet tâche <String (TRUE, FALSE)>
zimbraFeatureTasksEnabled: zimbraFeatureTasksEnabled_value_from_server
# Masquer dans la GAL <String (TRUE, FALSE)>
zimbraHideInGal: zimbraHideInGal_value_from_server
# 0=illimité <Integer (octet)>
zimbraMailQuota: zimbraMailQuota_value_from_server
# Notes libres <String>
zimbraNotes: zimbraNotes_value_from_server
# Doit changer son mot de passe à la prochaine connexion <String (TRUE, FALSE)>
zimbraPasswordMustChange: zimbraPasswordMustChange_value_from_server
# Adresse de redirection saisie par l’utilisateur <Adresse mail valide>
zimbraPrefMailForwardingAddress: zimbraPrefMailForwardingAddress_value_from_server
# Ne pas conserver de copie des mails sur le client local <String (TRUE, FALSE)>
zimbraPrefMailLocalDeliveryDisabled: zimbraPrefMailLocalDeliveryDisabled_value_from_server
# Adresse email visible pour les messages sortants <String>
zimbraMailCanonicalAddress: zimbraMailCanonicalAddress_value_from_server
# Nom affiché visible pour les messages sortants <String>
zimbraPrefFromDisplay: zimbraPrefFromDisplay_value_from_server
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
# Empreinte du mot de passe <String>
userPassword: userPassword_value_from_server
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
# Adresse mail principale du groupe <Adresse mail valide>
name: name_value_from_server
# Discriminant liste de distribution / groupe <String (enabled, disabled)>
zimbraMailStatus: zimbraMailStatus_value_from_server
# Liste des alias de ce groupe <String[]>
aliases: aliases_value_from_server
# Description du groupe <String>
description: description_value_from_server
# Nom affiché <String>
displayName: displayName_value_from_server
# Signaler les partages disponibles aux nouveaux membres <String (TRUE, FALSE)>
zimbraDistributionListSendShareMessageToNewMembers: zimbraDistributionListSendShareMessageToNewMembers_value_from_server
# Masquer le groupe dans la liste GAL <String (TRUE, FALSE)>
zimbraHideInGal: zimbraHideInGal_value_from_server
# Notes libres <String>
zimbraNotes: zimbraNotes_value_from_server
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
user_pkey: user_pkey_value_from_server
group_pkey: group_pkey_value_from_server
GroupsSenders:
hermesType: your_server_GroupsSenders_type_name
attrsmapping:
user_pkey: user_pkey_value_from_server
group_pkey: group_pkey_value_from_server
Resources:
hermesType: your_server_Resources_type_name
attrsmapping:
# Adresse mail principale de la ressource <Adresse mail valide>
name: name_value_from_server
# Nom affiché <String>
displayName: displayName_value_from_server
# Type de la ressource <String (Location, Equipment)>
zimbraCalResType: zimbraCalResType_value_from_server
# Nom du pays <String>
co: co_value_from_server
# Description <String>
description: description_value_from_server
# Ville de la ressource <String>
l: l_value_from_server
# Code postal <String>
postalCode: postalCode_value_from_server
# État de la ressource <String>
st: st_value_from_server
# Rue de la ressource <String>
street: street_value_from_server
# empreinte du mot de passe <String>
userPassword: userPassword_value_from_server
# État de la ressource (défaut active) <String (active, closed)>
zimbraAccountStatus: zimbraAccountStatus_value_from_server
# Accepte ou décline automatiquement les invitations <String (TRUE, FALSE)>
zimbraCalResAutoAcceptDecline: zimbraCalResAutoAcceptDecline_value_from_server
# Décline automatiquement les invitations si risque de conflit <String (TRUE, FALSE)>
zimbraCalResAutoDeclineIfBusy: zimbraCalResAutoDeclineIfBusy_value_from_server
# Décline automatiquement les invitations récurrente <String (TRUE, FALSE)>
zimbraCalResAutoDeclineRecurring: zimbraCalResAutoDeclineRecurring_value_from_server
# Bâtiment <String>
zimbraCalResBuilding: zimbraCalResBuilding_value_from_server
# Capacité <Integer>
zimbraCalResCapacity: zimbraCalResCapacity_value_from_server
# Adresse mail du contact <String>
zimbraCalResContactEmail: zimbraCalResContactEmail_value_from_server
# Nom du contact <String>
zimbraCalResContactName: zimbraCalResContactName_value_from_server
# Téléphone du contact <String>
zimbraCalResContactPhone: zimbraCalResContactPhone_value_from_server
# Etage <String>
zimbraCalResFloor: zimbraCalResFloor_value_from_server
# Nom du lieu affiché <String>
zimbraCalResLocationDisplayName: zimbraCalResLocationDisplayName_value_from_server
# Salle <String>
zimbraCalResRoom: zimbraCalResRoom_value_from_server
# Lieu <String>
zimbraCalResSite: zimbraCalResSite_value_from_server
# Notes libres <String>
zimbraNotes: zimbraNotes_value_from_server
# Faire suivre les invitations de calendrier à cette adresse <Array>
zimbraPrefCalendarForwardInvitesTo: zimbraPrefCalendarForwardInvitesTo_value_from_server
flatfiles_emails_of_groups
Description
Ce client génére un fichier txt plat par Groups
, contenant les adresses e-mail de ses membres (une par ligne).
Configuration
hermes-client-usersgroups_flatfiles_emails_of_groups:
# OBLIGATOIRE
destDir: "/path/where/files/are/stored"
# Facultatif : si défini, générera un fichier uniquement pour les noms de groupe spécifiés dans cette liste
onlyTheseGroups:
- group1
- group2
Datamodel
Les types de données suivants doivent être configurés :
Users
, nécessite les noms d’attribut suivants :
user_pkey
: la clé primaire de l’utilisateur
mail
: l’adresse e-mail de l’utilisateur
Groups
, nécessite les noms d’attribut suivants :
group_pkey
: la clé primaire du groupe
name
: le nom du groupe, qui sera comparé à ceux de onlyTheseGroups
, et utilisé pour nommer le fichier de destination “groupName.txt”
GroupsMembers
, nécessite les noms d’attribut suivants :
user_pkey
: la clé primaire de l’utilisateur
group_pkey
: la clé primaire du groupe
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
user_pkey: user_pkey_on_server
mail: mail_on_server
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
group_pkey: group_pkey_on_server
name: group_name_on_server
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
user_pkey: user_pkey_on_server
group_pkey: group_pkey_on_server
kadmin_heimdal
Description
Ce client traite les événements de type Users
and UserPassword
et stocke les données sur un serveur Kerberos Heimdal.
Configuration
hermes-client-usersgroups_kadmin_heimdal:
# OBLIGATOIRE : Principal disposant des droits requis pour gérer les utilisateurs et les mots de passe dans kadmin
kadmin_login: root/admin
# OBLIGATOIRE : Mot de passe du principal ci-dessus
kadmin_password: "s3cReT_p4s5w0rD"
# OBLIGATOIRE : nom du domaine Kerberos
kadmin_realm: KERBEROS_REALM
# Nom du principal de service pour lequel obtenir un ticket. Par défaut : kadmin/admin
kinit_spn: kadmin/admin
# Commande kinit à utiliser. Par défaut : kinit.heimdal
kinit_cmd: kinit.heimdal
# Commande kadmin à utiliser. Par défaut : kadmin.heimdal
kadmin_cmd: kadmin.heimdal
# Commande kdestroy à utiliser. Par défaut : kdestroy.heimdal
kdestroy_cmd: kdestroy.heimdal
# Paramètre kadmin supplémentaires à utiliser lors de l'ajout d'un utilisateur. Doit être une liste de chaînes. Valeur par défaut :
# - "--max-ticket-life=1 day"
# - "--max-renewable-life=1 week"
# - "--attributes="
# - "--expiration-time=never"
# - "--policy=default"
# - "--pw-expiration-time=never"
kadmin_user_add_additional_options:
- "--max-ticket-life=1 day"
- "--max-renewable-life=1 week"
- "--attributes="
- "--expiration-time=never"
- "--policy=default"
- "--pw-expiration-time=never"
# Définir à true pour démarrer avec une base de données Kerberos déjà remplie. Valeur par défaut : false
dont_fail_on_existing_user: false
# Paramètres de génération de mot de passe aléatoire facultatifs. Par défaut : les valeurs spécifiées ci-dessous
# Un mot de passe aléatoire est généré pour initialiser un utilisateur dont le mot de passe n'est pas encore disponible
random_passwords:
# Longueur du mot de passe
length: 32
# Si true, le mot de passe généré peut contenir des lettres majuscules
with_upper_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres majuscules
minimum_number_of_upper_letters: 1
# Si true, le mot de passe généré peut contenir des lettres minuscules
with_lower_letters: true
# Le mot de passe généré contiendra au moins ce nombre de lettres minuscules
minimum_number_of_lower_letters: 1
# Si true, le mot de passe généré peut contenir des chiffres
with_numbers: true
# Le mot de passe généré contiendra au moins ce nombre de chiffres
minimum_number_of_numbers: 1
# Si true, le mot de passe généré peut contenir des caractères spéciaux
with_special_chars: true
# Le mot de passe généré contiendra au moins ce nombre de caractères spéciaux
minimum_number_of_special_chars: 1
# Si true, le mot de passe généré ne contiendra pas les caractères spécifiés dans 'ambigous_chars_dictionary'
avoid_ambigous_chars: false
# Le dictionnaire des caractères ambigus (sensibles à la casse) qui peuvent être interdits dans le mot de passe, même si certains sont présents dans d'autres dictionnaires
ambigous_chars_dictionary: "lIO01"
# Le dictionnaire des lettres (insensibles à la casse) autorisées dans le mot de passe
letters_dictionary: "abcdefghijklmnopqrstuvwxyz"
# Le dictionnaire des caractères spéciaux autorisés dans le mot de passe
special_chars_dictionary: "!@#$%^&*"
Datamodel
Les types de données suivants doivent être configurés :
Users
, nécessite les noms d’attribut suivants :
login
: le login de l’utilisateur qui sera utilisé comme principal
UserPasswords
, nécessite les noms d’attribut suivants :
password
: le mot de passe de l’utilisateur
Évidemment, les clés primaires de Users
et UserPasswords
doivent correspondre pour pouvoir lier le login au mot de passe.
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
login: login_on_server
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
password: password_on_server
ldap
Description
Ce client traite les événements de type Users, Groups et UserPasswords, et stocke les données dans un annuaire LDAP.
Les clés du modèle de données local seront utilisées comme noms d’attributs LDAP, sans aucune contrainte, et il est possible de spécifier avec le paramètre attributesToIgnore
certaines clés du modèle de données à ignorer (généralement les clés primaires) qui ne seront pas stockées dans l’annuaire LDAP.
GroupMembers
stockera uniquement les données (généralement l’attribut LDAP member
) dans les entrées LDAP des groupes puisqu’il est possible d’utiliser des overlays LDAP (dynlist
ou le désormais obsolète memberOf
) pour générer dynamiquement les données correspondantes dans les entrées utilisateur. Vous devriez envisager de lire la documentation du paramètre propagateUserDNChangeOnGroupMember
.
Génération de hachages de mots de passe LDAP
Si vous devez générer des hachages de mots de passe LDAP, vous devriez regarder le plugin d’attribut ldapPasswordHash.
Configuration
hermes-client-usersgroups_ldap:
# OBLIGATOIRE : URI du serveur LDAP
uri: ldaps://ldap.example.com:636
# OBLIGATOIRE : identifiants de connexion au serveur LDAP
binddn: cn=account,dc=example,dc=com
bindpassword: s3cReT_p4s5w0rD
# OBLIGATOIRE : DN de base LDAP
basedn: dc=example,dc=com
users_ou: ou=users,dc=example,dc=com
groups_ou: ou=groups,dc=example,dc=com
ssl: # Facultatif
# Chemin vers le fichier PEM avec les certificats CA
cafile: /path/to/INTERNAL-CA-chain.crt # Facultatif
# Chemin vers le fichier de certificat au format PEM pour l'authentification du certificat client, nécessite de définir keyfile
certfile: /path/to/client.crt # Facultatif
# Chemin vers le fichier de clé privée du certificat au format PEM pour l'authentification du certificat client, nécessite de définir certfile
keyfile: /path/to/client.pem # Facultatif
# OBLIGATOIRE : nom de l'attribut DN pour les utilisateurs, les mots de passe utilisateur et les groupes
# Vous devez définir des valeurs pour les trois, même si vous n'utilisez pas certains d'entre eux
dnAttributes:
Users: uid
UserPasswords: uid
Groups: cn
# En fonction des paramètres de groupe et d'appartenance au groupe du serveur LDAP,
# vous pourriez utiliser un autre attribut que l'attribut par défaut 'member' pour
# stocker le DN du membre du groupe
# Facultatif. Valeur par défaut : "member"
groupMemberAttribute: member
# En fonction des paramètres de groupe et d'appartenance au groupe du serveur LDAP,
# vous pourriez vouloir propager un changement de DN d'utilisateur vers les
# attributs d'appartenance au groupe. Mais dans certains cas, c'est géré par un
# overlay, par exemple avec l'overlay memberOf et son paramètre
# memberof-refint/olcMemberOfRefint à TRUE
# Si 'propagateUserDNChangeOnGroupMember' est définie à true, il faudra également
# définir 'groupsObjectclass'
# Facultatif. Valeur par défaut : true
propagateUserDNChangeOnGroupMember: true
# Si vous avez défini 'propagateUserDNChangeOnGroupMember' à true,
# vous DEVEZ indiquer l'objectClass sera utilisé pour rechercher
# vos entrées de groupes
# Obligatoire uniquement si 'propagateUserDNChangeOnGroupMember' est vrai
groupsObjectclass: groupOfNames
# Il est possible de définir une valeur par défaut pour certains attributs pour les Users, UserPasswords et Groups
# La valeur par défaut sera appliquée lors du traitements des événements added et modified, si l'attribut local n'a pas de valeur
defaultValues:
Groups:
member: "" # Hack pour permettre la création d'un groupe vide, néessaire à cause du "MUST member" dans le schéma
# Les attributs locaux répertoriés ici ne seront pas stockés dans LDAP pour les types Users, UserPasswords and Groups
attributesToIgnore:
Users:
- user_pkey
UserPasswords:
- user_pkey
Groups:
- group_pkey
Datamodel
Les types de données suivants peuvent être configurés :
Users
UserPasswords
: nécessite évidemment Users
et nécessite l’attribut user_pkey
correspondant aux clés primaires de Users
Groups
GroupsMembers
: nécessite évidemment Users
et Groups
et nécessite les attributs user_pkey
et group_pkey
correspondant aux clés primaires de Users
et Groups
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
uid: login_on_server
# ...
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
userPassword: ldap_pwd_hash_list_on_server
# ...
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
group_pkey: group_primary_key_on_server
cn: group_name_on_server
# ...
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
user_pkey: user_primary_key_on_server
group_pkey: group_primary_key_on_server
# ...
null
Description
Ce client traite les événements de type Users, Groups and UserPasswords, mais ne fait rien d’autre que de générer des logs.
Configuration
Rien à configurer pour le plugin.
hermes-client-usersgroups_null:
Datamodel
Les types de données suivants peuvent être configurés, sans contrainte particulière puisque rien ne sera traité.
- Users
- UserPasswords
- Groups
- GroupsMembers
datamodel:
Users:
hermesType: your_server_Users_type_name
attrsmapping:
attr1_client: attr1_server
# ...
UserPasswords:
hermesType: your_server_UserPasswords_type_name
attrsmapping:
attr1_client: attr1_server
# ...
Groups:
hermesType: your_server_Groups_type_name
attrsmapping:
attr1_client: attr1_server
# ...
GroupsMembers:
hermesType: your_server_GroupsMembers_type_name
attrsmapping:
attr1_client: attr1_server
# ...