Устанавим сервер 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 <<EOCONFIG > /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 <<EOCONFIG > /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 <<EOCONFIG > /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 ™