# Как работает LDAP — основы для инженера Принтум

# Как работает LDAP — основы для инженера Принтум

## Назначение

LDAP (Lightweight Directory Access Protocol, RFC 4511) — протокол доступа к каталогу.
Чаще всего используется для хранения учётных записей пользователей (Microsoft Active Directory, OpenLDAP, FreeIPA).

## Порты

| Режим | Порт |
|---|---|
| LDAP (plaintext / StartTLS) | 389 |
| LDAPS (TLS с первого байта) | 636 |
| AD Global Catalog | 3268 / 3269 (LDAPS) |

## Структура каталога (DIT)

Каталог — дерево записей (Directory Information Tree).

```text
dc=example,dc=com
├── ou=Users
│   ├── cn=Ivan Petrov
│   └── cn=Anna Sidorova
├── ou=Groups
│   └── cn=PrintUsers
└── ou=Computers
    └── cn=WS001
```

| Атрибут | Расшифровка | Пример |
|---|---|---|
| DC | Domain Component | `dc=example,dc=com` |
| OU | Organizational Unit | `ou=Users` |
| CN | Common Name | `cn=Ivan Petrov` |
| DN | Distinguished Name | `cn=Ivan Petrov,ou=Users,dc=example,dc=com` |
| SN | Surname | `sn=Petrov` |
| UID | User ID (OpenLDAP) | `uid=ipetrov` |
| sAMAccountName | Логин Windows (AD) | `ipetrov` |
| userPrincipalName | UPN (AD) | `ipetrov@example.com` |

## Bind (аутентификация)

Bind — операция аутентификации клиента на LDAP-сервере.

| Тип | Описание |
|---|---|
| Simple bind | DN + пароль в открытом виде (требует TLS) |
| Anonymous bind | Без аутентификации (ограниченный доступ) |
| SASL / GSSAPI | Kerberos или другие механизмы |

Сервис, читающий каталог, выполняет bind с отдельной учётной записью (service account / bind DN).

## Фильтры поиска

Фильтры определяют, какие записи возвращает запрос.

| Фильтр | Значение |
|---|---|
| `(objectClass=user)` | Все объекты типа user |
| `(sAMAccountName=ipetrov)` | Конкретный пользователь |
| `(&(objectClass=person)(mail=*))` | Все люди с заполненным email |
| `(\|(ou=IT)(ou=Finance))` | Записи из OU IT или Finance |
| `(memberOf=cn=PrintUsers,ou=Groups,dc=example,dc=com)` | Члены группы PrintUsers |

## Как Принтум использует LDAP

Принтум подключается к LDAP/AD для:
- синхронизации учётных записей пользователей;
- получения атрибутов (имя, email, номер карты, группы);
- проверки членства в группах для управления доступом;
- аутентификации пользователей через bind с их учётными данными.

Синхронизация выполняется периодически. При отказе LDAP Принтум продолжает работу
с последними синхронизированными данными (degraded mode).

TODO: уточнить — какие именно атрибуты AD/LDAP синхронизируются в Принтум и как часто выполняется синхронизация.