LINUX.ORG.RU
ФорумAdmin

OpenLdap proxy

 ,


1

4

Добрый день, настраиваю openldap proxy на debian 11. Первый раз, и как обычно ничего не получается. Задача - авторизацию сервисов запулить через лдап проски, ибо админ АД выдает только одну учетку служебную для прокси, а пользователи сервисов (юзеры АД) должны логиниться через свои доменные учетки в этих сервисах. Сами сервисы умеют бегать в лдап, но для них админ АД не выдаёт учетки. Причины есть, связанные с космической секьюрностью. На хабре есть статья там команда делала подобную штуку. Что делал:

1.apt install libnss-ldapd libpam-ldapd ldap-utils

  1. dpkg-reconfigure slapd - тут задал свой тестовый домен, который подразумевается будет прокси.

  2. Убедился, что есть файлик 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

  1. Пока всё в порядке.

вот конфиг весь, тут видно, что модуль 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```

  1. Добавляем базу с 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, дают только дну. Вот нужен некий прокси. Подскажите где поправить чтобы проксирование срабатывало.



Последнее исправление: Sv00p (всего исправлений: 1)

Не разбираюсь в ldap, но

Сами сервисы умеют бегать в лдап, но для них админ АД не выдаёт учетки. Причины есть, связанные с космической секьюрностью.

Не пытаешься ли ты обойти правила безопасности, принятые в компании? Может, не положено?

firkax ★★★★★
()
Ответ на: комментарий от mrjaggers

там дело в прявязках к ПК пользователей. ПК юзера в домене, он открывает браузер - перед ним некий сервис с лдап авторизацией в этом же домене. Если стоит привязка к ПК, то дальше ПК он не может авторизовываться, ибо ад его дропает, если он с сервиса прилетел (там получается Logon Type:3, а Workstation Name: имяДоменаАД.ru - и естественно при наличии привязки юзера к ПК АДшка дропает его, ибо привязан то он к своему ПК а не к имяДоменаАД.ru). Поставить всем привязку и к имяДоменаАД.ru не секьюрно - так и передали. Уже оттестировали и пока самое оптимальное решение - опенЛдап прокси. На АДшке выделяют одну служебную учётку для проски, и все сервисы смотрят на эту проксю, которая и пропускает запросы на лдап. Осталось завести эту просксю..

Sv00p
() автор топика
17 апреля 2024 г.