Устанавим сервер OpenLDAP и дополнительные пакеты для начала работы
apt-get update
apt-get install slapd ldap-utils samba-doc
Конвертируем схему **samba.schema** в формат **ldif** понятный серверу OpenLDAP
zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
cat < /tmp/schema_convert.conf
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
EOCONFIG
# prepare
rm -rf /tmp/ldif_output
mkdir /tmp/ldif_output
# generate ldif files
slaptest -f /tmp/schema_convert.conf -F /tmp/ldif_output
# copy generated ldif file to slapd directory
find /tmp/ldif_output -type f -name '*samba.ldif' -exec cp {} /etc/ldap/schema/samba.ldif \;
# cut the crap
echo -e '1c\ndn: cn=samba,cn=schema,cn=config\n.\n3c\ncn: samba\n.\n$n\n-6,$d\nwq' | ed /etc/ldap/schema/samba.ldif
# clean up
rm -rf /tmp/ldif_output
Загрузим необходимые схемы на сервер OpenLDAP
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/samba.ldif
На данный момент сервер OpenLDAP имеет все необходимые классы для работы с учетными записями Samba+Posix. Давайте посмотрим что получилось.
ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config '(objectCLass=*)' dn
Добавим в конфигурацию модуль HDB который будет использоваться для хранения данных
cat < /tmp/mod_hdb.ldif
# Load dynamic backend modules if it is not already there
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb
EOCONFIG
ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/mod_hdb.ldif
Создадим файл конфигурации нашей базы **example.com.ldif**
PASSWORD=secret
# не забудьте сгенерировать хеш пароля с помощью утилиты slappasswd
L1=com
L2=example
cat < /tmp/${L2}.${L1}.ldif
# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=${L2},dc=${L1}
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=${L2},dc=${L1}
olcRootPW: ${PASSWORD}
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=${L2},dc=${L1}" write by anonymous auth by self write by * none
olcAccess: to attrs=sambaLMPassword by dn="cn=admin,dc=${L2},dc=${L1}" write by anonymous auth by self write by * none
olcAccess: to attrs=sambaNTPassword by dn="cn=admin,dc=${L2},dc=${L1}" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=${L2},dc=${L1}" write by * read
EOCONFIG
Загрузим конфигурацию нашей базы на сервер
ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/${L2}.${L1}.ldif
Итак мы установили полноценный сервер OpenLDAP, который готов хранить в себе учетные записи Samba PDC и все необходимые служебные данные для работы с контроллером домена Windows (tm)