Добрый день, настраиваю openldap proxy на debian 11. Первый раз, и как обычно ничего не получается. Задача - авторизацию сервисов запулить через лдап проски, ибо админ АД выдает только одну учетку служебную для прокси, а пользователи сервисов (юзеры АД) должны логиниться через свои доменные учетки в этих сервисах. Сами сервисы умеют бегать в лдап, но для них админ АД не выдаёт учетки. Причины есть, связанные с космической секьюрностью. На хабре есть статья там команда делала подобную штуку. Что делал:
1.apt install libnss-ldapd libpam-ldapd ldap-utils
-
dpkg-reconfigure slapd
- тут задал свой тестовый домен, который подразумевается будет прокси. -
Убедился, что есть файлик
back_ldap.la
в директории/usr/lib/ldap/
4.Показал сущности cn=config
что надо подгружать бэкенд модуль :
-файлик backend.ldif
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: back_ldap.la
-команда, чтобы этот файлик внести в конфиг ldapadd -Y EXTERNAL -H ldapi:/// -f backend.ldif
- Пока всё в порядке.
вот конфиг весь, тут видно, что модуль back_ldap.la
подгружен. (лапша cn=core и cn=schema убраны)
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/slapd/slapd.args
olcLogLevel: none
olcPidFile: /var/run/slapd/slapd.pid
olcToolThreads: 1
structuralObjectClass: olcGlobal
entryUUID: adf5cee0-00e6-103e-93ff-19c1b1debbf8
creatorsName: cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.210589Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20231017031159Z
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_mdb
structuralObjectClass: olcModuleList
entryUUID: adf632cc-00e6-103e-9407-19c1b1debbf8
creatorsName: cn=admin,cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.213196Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20231017031159Z
dn: cn=module{1},cn=config
objectClass: olcModuleList
cn: module{1}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_ldap.la
structuralObjectClass: olcModuleList
entryUUID: 19ed6a7c-00ec-103e-8aa4-11935cbd3ac2
creatorsName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
createTimestamp: 20231017035047Z
entryCSN: 20231017035047.833138Z#000000#000#000000
modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20231017035047Z
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
structuralObjectClass: olcSchemaConfig
entryUUID: adf5de44-00e6-103e-9402-19c1b1debbf8
creatorsName: cn=admin,cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.211032Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20231017031159Z
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth manage by * break
olcAccess: {1}to dn.exact="" by * read
olcAccess: {2}to dn.base="cn=Subschema" by * read
olcSizeLimit: 500
structuralObjectClass: olcDatabaseConfig
entryUUID: adf5d552-00e6-103e-9400-19c1b1debbf8
creatorsName: cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.210802Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20231017031159Z
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern
al,cn=auth manage by * break
olcRootDN: cn=admin,cn=config
structuralObjectClass: olcDatabaseConfig
entryUUID: adf5db38-00e6-103e-9401-19c1b1debbf8
creatorsName: cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.210954Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20231017031159Z
dn: olcDatabase={1}mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: {1}mdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * non
e
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to * by * read
olcLastMod: TRUE
olcRootDN: cn=admin,dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcRootPW:: e1NTSEF9d0kyZS94amRxOW1reW00dkxzSWJ6MWVFTDgrSjZlL3Y=
olcDbCheckpoint: 512 30
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbMaxSize: 1073741824
structuralObjectClass: olcMdbConfig
entryUUID: adf645dc-00e6-103e-9408-19c1b1debbf8
creatorsName: cn=admin,cn=config
createTimestamp: 20231017031159Z
entryCSN: 20231017031159.213683Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20231017031159Z```
- Добавляем базу с ldap сервером, т.е. где все пользователи и живут. Т.е. добавляем backend-базу типа
ldap
, в качестве которой будет выступать Active Directory:
файлик ldap_db.ldif
dn: olcDatabase=ldap,cn=config
objectClass: olcDatabaseConfig
objectClass: olcLDAPConfig
olcDatabase: ldap
olcDbIDAssertBind: bindmethod="simple" binddn="CN=userNameStaff,CN=Users,DC=company-ad,DC=good-ad,DC=ru" credentials="yY0987654321"
olcDbURI: ldap://company-ad01.company-ad.good-ad.ru
olcReadOnly: TRUE
olcRootDN: cn=admin,dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcRootPW: NH32Ofo5lm9ul4Ofo4r/a6uh+nYI/esd
olcSuffix: dc=localproxy,dc=company2,dc=goodldap,dc=ru
olcDbChaseReferrals: FALSE
Здесь userNameStaff - это логин для просмотра внешнего каталога ldap, в поле credentials его пароль. Эти данные дал владелец АД. Пока в режиме настройки 636 порт не используется. Вот описание с хабра + мои вопросы:
olcDbIDAssertBind
: Указание метода подключения, distinguishedName и пароля УЗ для подключения к контроллеру MS Active Directory.
olcDbURI
: URI контроллера AD.
olcReadOnly
: Режим работы (чтение/запись) с MS Active Directory.
olcRootDN
: Сервисная УЗ OpenLDAP. С помощью нее к OpenLDAP будут подключаться сервисы. Я еще добавил credentials, ибо хозяин АД дал учетку с паролем.
olcRootPW
: Пароль от сервисной УЗ OpenLDAP. Здесь я указал admin, и его пароль, правильно ли это? или нужно создать нового юзера
olcSuffix
: Суффикс домена (какого именно ? домена где прокси? )
olcDbChaseReferrals
: Определяет возможность использования механизма отсылок.
Добавляем этот конфиг и сразу ошибка:
root@proxyldap:/etc/ldap# ldapadd -Y EXTERNAL -H ldapi:/// -f ldap_db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "olcDatabase=ldap,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
additional info: <olcRootPW> can only be set when rootdn is under suffix
root@proxyldap:/etc/ldap#
Уже и удалял строки, иногда добавляется, но ошибка при перезапуске slapd в журнале
backend_startup: warning, database 2 (ldap) has no suffix
Перерыл много чего, везде всё по разному и юзают конфиг slapd.conf в папке openldap (типа старый стиль), а с cn=config толком нет инфы. Мне просто нужно пользователей какого-либо сервиса пропускать в базу company-ad01.company-ad.good-ad.ru . Это же пользователи этого АД. Сервисов много, всем [сервисам] учётки не дают для просмотра каталога ldap, дают только дну. Вот нужен некий прокси. Подскажите где поправить чтобы проксирование срабатывало.