OpenLDAP - как хранить несколько адресов почты для пользователя?

Как хранить несколько адресов почты для пользователя в LDAP

Анатолий Остроумов

openldap

362 Words

2026-06-20 13:01 +0300


Допустим, в коллекции пользователей в Organization Unit ou=people,dc=vodolaz095,dc=ru у нас есть пользователь с такими параметрами.

dn: uid=user3,ou=people,dc=vodolaz095,dc=ru
uid: user3
uidNumber: 1003
gidNumber: 1003
cn: Test User 3
givenName: Test User 3
homeDirectory: /home/user3
initials: AB
loginShell: /bin/bash
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
sn: User3
title: testUser
userPassword: {SSHA}M1Um0cvQBqIRDjHk8beDv07kky5jQ2VB
mail: [email protected]

И надо к нему добавить дополнительный, допустим, рабочий адрес электронной почты - [email protected].

Как это можно сделать?

Сделать это очень просто — в схеме inetOrgPerson, которая применена к нашей учетной записи, атрибут mail по умолчанию является многозначным (multi-valued). Это означает, что вы можете добавить сколько угодно адресов, просто указав несколько строк mail: в LDIF-файле или выполнив операцию добавления (add), а не замены (replace).

Способ 1

Надо создать файл патча для записи - add_email_address.ldif

dn: uid=user3,ou=people,dc=vodolaz095,dc=ru
changetype: modify
add: mail
mail: [email protected]

C помощью утилиты ldapmodify запись можно обновить так

$ ldapmodify -x -D "cn=admin,dc=vodolaz095,dc=ru" -W -f add_email_address.ldif

Способ 2

Также можно перезаписать ВСЕ адреса почты у пользователя - создадим файл replace_email.ldif:

dn: uid=user3,ou=people,dc=vodolaz095,dc=ru
changetype: modify
replace: mail
mail: [email protected]
mail: [email protected]

И применим его:

$ ldapmodify -x -D "cn=admin,dc=vodolaz095,dc=ru" -W -f replace_email.ldif

Как итог, у пользователя теперь появилось несколько адресов электронной почты:

dn: uid=user3,ou=people,dc=vodolaz095,dc=ru
uid: user3
uidNumber: 1003
gidNumber: 1003
cn: Test User 3
givenName: Test User 3
homeDirectory: /home/user3
initials: AB
loginShell: /bin/bash
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
sn: User3
title: testUser
userPassword: {SSHA}M1Um0cvQBqIRDjHk8beDv07kky5jQ2VB
mail: [email protected]
mail: [email protected]

Способ 3.

Можно использовать утилиту ldapvi и отредактировать всю коллекцию пользователей

$ ldapvi --discover --user="cn=admin,dc=vodolaz095,dc=ru"

После редактирования записей с помощью вашего любимого текстового редактора, можно сохранить временный файл, и ldapvi спросит, что делать:

Action? [yYqQvVebB*rsf+?] ?
Commands:
  y -- commit changes
  Y -- commit, ignoring all errors
  q -- save changes as LDIF and quit
  Q -- discard changes and quit
  v -- view changes as LDIF change records
  V -- view changes as ldapvi change records
  e -- open editor again
  b -- show login dialog and rebind
  B -- toggle SASL
  * -- set SASL mechanism
  r -- reconnect to server
  s -- skip one entry
  f -- forget deletions
  + -- rewrite file to include schema comments
  ? -- this help

Обычно хватает y.