Основным хранилищем данных Calculate Directory Server является LDAP сервер openldap. Данные в LDAP организованы в виде древовидной структуры узлов хранения, начальный узел называется базовым. Каждый узел имеет уникальное имя Distinguished Name сокращенно DN, DN обязательно содержит имя базового узла. Например если базовый узел называется dc=calculate, то ou=Services,dc=calculate - будет узлом отходящим от базового узла.
Каждый узел содержит в себе именованные атрибуты. Обратившись к узлу и указав название атрибута можно получить его значение. Например чтобы получить адрес электронной почты пользователя test достаточно обратиться к атрибуту mail узла пользователя.
Пример получения почтового адреса пользователя: DN uid=test,ou=Users,ou=Unix,ou=Services,dc=calculate, атрибут mail. Каждый узел имеет правила по которым он будет создан, эти правила прописываются в специальных атрибутах классах. Классы и наборы классов определены в файлах схем которые находятся в директории /etc/openldap/schema
. При запуске LDAP сервера он перечитывает файлы схем формируя классы которые затем можно использовать для создания узлов с определенными атрибутами и правилами.
Пример дерева LDAP
Возможные структуры хранения данных пользователя
Структура хранения всех данных пользователя в одном узле
Структура представляет собой ветку (узел) в дереве LDAP в котором находятся узлы пользователей, в каждом из которых находятся все данные одного пользователя.
Пример данной структуры для ftp и unix:
dc=calculate
ou=FTP,dc=calculate
Уникальное имя узла пользователя test
uid=test,ou=Users,dc=calculate
атрибуты
cn: Иванов Иван Иванович
gidNumber: 1000
homeDirectory: /home/test
sn: test
uid: test
uidNumber: 1000
userPassword: 111
уникальное имя узла пользователя test1
uid=test1,ou=Users,dc=calculate
cn: Петров Петр Петрович
gidNumber: 1001
homeDirectory: /home/test1
sn: test1
uid: test1
uidNumber: 1001
userPassword: 222
В этом случае домашняя директория и директория ftp совпадают, также совпадает пароль для ftp и пароль для аутентификации в сервисе unix.
Достоинства данной структуры состоят в простоте удаления данных пользователя.
Недостатки состоят в том что невозможно задать разные данные пользователя для разных сервисов. Такие атрибуты как пароль, название группы, ID пользователя и. т. д, имеются в одном экземпляре, это значит что невозможно иметь для разных сервисов разные значения атрибутов, например пароль, директория хранения данных. Возникают проблемы при доступе разных сервисов к одному атрибуту. Например при неправильном функционировании или взломе сервиса имеющего возможность записи в LDAP, возможно удаление или модификация данных не принадлежащих этому сервису. Появляются разнородные записи имеющие разные правила создания и атрибуты в одной ветке, что затрудняет индексацию и поиск, также может возникнуть ситуация, если значения атрибутов пользователя совпадают у разных сервисов в этом случае невозможно определить для какого сервиса был создан пользователь (невозможно удалить пользователя из сервиса), в примере приведена такая ситуация.
Структура хранения данных пользователя с распределением на разные узлы
Структура представляет собой несколько веток в каждой из которых находятся узлы пользователей с данными для определенного сервиса.
Пример данной структуры для unix и jabber:
dc=calculate
ou=Unix,dc=calculate
уникальное имя узла пользователя test для сервиса unix
uid=test,ou=Unix,dc=calculate
атрибуты
cn: Иванов Иван Иванович
gidNumber: 1000
homeDirectory: /home/test
sn: test
uid: test
uidNumber: 1000
userPassword: 111
уникальное имя узла пользователя test1 для сервиса unix
uid=test1,ou=Unix,dc=calculate
cn: Петров Петр Петрович
gidNumber: 1001
homeDirectory: /home/test1
sn: test1
uid: test1
uidNumber: 1001
userPassword: 222
ou=Jabber,dc=calculate
уникальное имя узла пользователя test для сервиса Jabber
uid=test,ou=Jabber,dc=calculate
cn: test
departmentNumber: Менеджер
initials: Yes
jpegPhoto: binary
mail: test@jabber.office.ru
sn: Иванов Иван Иванович
uid: test1
userPassword: j111
уникальное имя узла пользователя test1 для сервиса Jabber
uid=test1,ou=Jabber,dc=calculate
cn: test1
departmentNumber: Менеджер
initials: Yes
jpegPhoto: binary
mail: test1@jabber.office.ru
sn: Петров Петр Петрович
uid: test1
userPassword: j222
Достоинства данной структуры состоят в разделении прав на ветки, каждый сервис работает со своей веткой и не может повредить ветку другого сервиса. Есть возможность иметь разные значения атрибутов, пользователь может иметь разные данные, в том числе пароли, директории, почтовые адреса для каждого сервиса. Эта схема упрощает поиск, индексацию и обработку данных. Возможно перенести данные на другой сервер, простым копированием ветки сервиса, включить репликацию веток отдельно для каждого сервиса.
Недостатком является относительная сложность добавления данных пользователя в разные ветки.
Структура хранения данных в Calculate Directory Server
Для Calculate Directory Server (CDS) используется более универсальная структура с хранением данных пользователей сервисов на разных узлах.
Пример структуры для unix, ftp, jabber:
dc=calculate
ou=Services,dc=calculate
ou=Unix,ou=Services,dc=calculate
ou=Users,ou=Unix,ou=Services,dc=calculate
Уникальное имя узла пользователя test для сервиса Unix
uid=test,ou=Users,ou=Unix,ou=Services,dc=calculate
....
уникальное имя узла пользователя test1 для сервиса Unix
uid=test1,ou=Users,ou=Unix,ou=Services,dc=calculate
....
ou=FTP,ou=Services,dc=calculate
ou=Users,ou=FTP,ou=Services,dc=calculate
Уникальное имя узла пользователя test для сервиса FTP
uid=test,ou=Users,ou=FTP,ou=Services,dc=calculate
....
уникальное имя узла пользователя test1 для сервиса FTP
uid=test1,ou=FTP,ou=Unix,ou=Services,dc=calculate
....
ou=Jabber,ou=Services,dc=calculate
ou=Users,ou=Jabber,ou=Services,dc=calculate
Уникальное имя узла пользователя test для сервиса Jabber
uid=test,ou=Users,ou=Jabber,ou=Services,dc=calculate
....
уникальное имя узла пользователя test1 для сервиса Jabber
uid=test1,ou=Users,ou=Jabber,ou=Services,dc=calculate
В структуре хранения введена дополнительная ветка ou=Services,dc=calculate, она необходима для отделения данных сервисов от других служебных данных LDAP структуры. Имеющаяся сложность добавления записей нивелирована использованием фирменных утилит Calculate.
Для того чтобы создать приведенную выше структуру необходимо выполнить следующие команды:
cl-useradd -p -c "Иванов Иван Иванович" test unix
cl-useradd -p -c "Петров Петр Петрович" test1 unix
cl-useradd -p test ftp
cl-useradd -p test1 ftp
cl-groupadd Менеджер jabber
cl-useradd -p test jabber
cl-useradd -p test1 jabber
опция -p позволяет задать пароль для пользователя.
Используя bash можно написать простой сценарий добавления или удаления пользователей сразу из всех установленных сервисов.
Для задания пароля пользователя в скрипте используйте опцию -P.
Пример для samba сервиса:
echo "password" | cl-useradd -P user samba
для устаревших утилит (calculate-server < 2.1.11)
echo -e "password\npassword" | cl-useradd -P user samba