Сервер ldap/example.com@EXAMPLE.COM не найден в базе данных Kerberos
Изменить: Проблема окончательно решена. Подробности можно найти в части устранения неполадок в конце этого сообщения.
Я оставляю здесь подробные шаги на случай, если это кому-нибудь поможет.
Настройка OpenLDAP
Я - Создать сервер
Документация часто устарела, и вы найдете несколько способов добиться того же.
Согласно тому, что я прочитал, современный способ создания сервера заключается в использовании /etc/openldap/slapd.ldif
вместо /etc/openldap/slapd.conf
, Ниже приведен пример конфигурации с использованием сертификатов letsencrypt.
Вы можете часто конвертировать slapd.conf
директива в slapd.ldif
предваряя его olc
, Просто убедитесь, что это правильно dn
блок.
Убедитесь, что вы создали каталог /etc/openldap/slapd.d
для чтения и записи пользователем ldap, и что slapd
остановлен Вставить вы slapd.ldif
в slapd.d
с slapadd
команда. Я запускаю его, используя sudo -u ldap
Для того чтобы slapadd
создавать файлы, принадлежащие пользователям ldap. Вы также можете запустить slapadd
без sudo
а потом chown -R ldap:ldap /etc/openldap/slapd.d
, Здесь важно то, что вы все /etc/openldap
каталог доступен для чтения / записи пользователем slapd
бежать с.
$ sudo -u ldap slapadd -d -1 \
-F /etc/openldap/slapd.d \
-n 0 \
-f /etc/openldap/slapd.ldif
Конфигурация OpenLDAP:
# /etc/openldap/slapd.ldif
------------------------------------
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /run/openldap/slapd.args
olcPidFile: /run/openldap/slapd.pid
olcTLSCipherSuite: ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
olcTLSCACertificateFile: /etc/letsencrypt/live/example/chain.pem
olcTLSCertificateFile: /etc/letsencrypt/live/example/cert.pem
olcTLSCertificateKeyFile: /etc/letsencrypt/live/example/privkey.pem
olcTLSVerifyClient: never
#
# Load dynamic backend modules:
#
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModuleload: back_mdb.so
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/openldap.ldif
include: file:///etc/openldap/schema/kerberos.ldif
include: file:///etc/openldap/schema/openssh-lpk.ldif
# Frontend settings
#
dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
olcAccess: to dn.base="" by * read
olcAccess: to dn.base="cn=Subschema" by * read
olcAccess: to *
by self write
by users read
by anonymous auth
#######################################################################
# LMDB database definitions
#######################################################################
#
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcSuffix: dc=example,dc=com
olcRootDN: cn=Manager,dc=example,dc=com
olcRootPW: {SSHA}anEncryptedPassword
olcDbDirectory: /var/lib/openldap-data
# Indices to maintain
olcDbIndex: objectClass eq
olcDbIndex: uid pres,eq
olcDbIndex: memberUid eq
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: uniqueMember eq
olcDbIndex: cn pres,sub,eq
olcDbIndex: mail pres,sub,eq
olcDbIndex: sn pres,sub,eq
olcDbIndex: givenname eq,subinitial
olcDbIndex: dc eq
olcDbIndex: krbPrincipalName eq,pres,sub
olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey,givenName,sn,photo
by self write
by anonymous auth
by dn.base="cn=Manager,dc=example,dc=com" write
by * none
olcAccess: to *
by self read
by dn.base="cn=Manager,dc=example,dc=com" write
by * read
II - Настройка информационного дерева каталога (DIT)
Запустите сервер: $ systemctl start slapd
Это создаст /var/lib/openldap-data/data.mdb
(каталог может отличаться в вашем дистрибутиве). Если у вас возникли проблемы или вы хотите сбросить свой OpenLDAP, вы можете rm -rf /etc/openldap/slapd.d/* /var/lib/openldap-data/{data.mdb,lock.mdb}
после остановки slapd
обслуживание и вернуться к шагу I.
Я изменил свой slapd.service
разрушать /var/lib/openldap-data/lock.mdb
потому что на моей установке этот файл не удаляется при выключении slapd
и это мешает ему начать снова.
Содержание сервиса slapd.service:
# /etc/systemd/system/slapd.service
------------------------------------
[Unit]
Description=OpenLDAP Server Daemon
After=network.target
[Service]
# "-d n" stops slapd from forking
ExecStartPre = /bin/rm -f /var/lib/openldap-data/lock.mdb
ExecStart = /usr/lib64/openldap/slapd -u ldap -g ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS -d1
ExecStopPost = /bin/rm -f /var/lib/openldap-data/lock.mdb
Restart = always
RestartSec = 180
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/slapd.service.d/00gentoo.conf
------------------------------------
[Service]
Environment="HOME=/var/lib/openldap"
# Use the slapd configuration directory:
Environment="SLAPD_OPTIONS=-F /etc/openldap/slapd.d"
Environment="SLAPD_URLS=ldaps:/// ldap://127.0.0.1:389/ ldapi://127.0.0.1"
Environment="KRB5_KTNAME=FILE:/etc/openldap/ldap.keytab"
Убедитесь, что сертификаты могут быть прочитаны пользователем ldap:
$ useradd -r letsencrypt
$ chown -R letsencrypt:letsencrypt /etc/letsencrypt
$ gpasswd -a ldap letsencrypt
$ chmod 750 /etc/letsencrypt/{live,archive}
Затем добавьте файлы ldif, которые создают DIT:
$ ldapadd -x -W -D "cn=Manager,dc=example,dc=com" -f ${PATH_TO_FILES}
# example.com.ldif
------------------------------------
# Create example dn
dn: dc=example,dc=com
dc: example
objectClass: dcObject
objectClass: organization
o: Example Organization
# Create Manager role
dn: cn=Manager,dc=example,dc=com
cn: Manager
description: LDAP Administrator
objectClass: organizationalROle
objectClass: top
roleOccupant: dc=example,dc=com
# users.ldif
------------------------------------
dn: ou=People,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: People
description: Users of Example
# groups.ldif
------------------------------------
dn: ou=Group,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Group
description: Groups of Example
III - Настройка клиента LDAP
Настройте ldap.conf:
# /etc/openldap/ldap.conf
------------------------------------
BASE dc=example,dc=com
URI ldaps://example.com
TLS_CACERT /etc/letsencrypt/live/example/chain.pem
TLS_REQCERT allow
TIMELIMIT 2
Настройка Kerberos
Я - Настроить сервер
Конфигурация сервера (mit-krb5):
# /etc/krb5.conf
------------------------------------
[logging]
default = FILE:/var/log/krb5/libs.log
kdc = FILE:/var/log/krb5/kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
[realms]
EXAMPLE.COM = {
kdc = example.com
admin_server = example.com
default_domain = example.com
database_module = openldap_ldapconf
}
[domain_realm]
example.com = EXAMPLE.COM
.example.com = EXAMPLE.COM
[dbdefaults]
ldap_kerberos_container_dn = cn=krbContainer,dc=example,dc=com
[dbmodules]
openldap_ldapconf = {
db_library = kldap
ldap_kdc_dn = "cn=Manager,dc=example,dc=com"
ldap_kadmind_dn = "cn=Manager,dc=example,dc=com"
ldap_service_password_file = /etc/krb5kdc/service.keyfile
ldap_servers = ldaps://example.com
ldap_conns_per_server = 5
}
Затем создайте область: $ kdb5_util -r EXAMPLE.COM create -s
II - Настройка бэкэнда OpenLDAP
Настройте поддерево Kerberos OpenLDAP:
$ kdb5_ldap_util -D "cn=Manager,dc=example,dc=com" create -subtrees dc=example,dc=com -r EXAMPLE.COM -s -H ldap://127.0.0.1"
и создайте локальную копию главного ключа в зашифрованном виде на локальном диске KDC для связи с OpenLDAP:
$ kdb5_ldap_util -D "cn=Manager,dc=example,dc=com" stashsrvpw -f /etc/krb5kdc/service.keyfile cn=Manager,dc=example,dc=com
Это также известно как (ака) stash-файл.
III - Создать принципал
Запустите службы MIT Kerberos v5 (krb5):
$ systemctl start krb5-kdc krb5-kadmind
Сервисы Systemd были взяты из пакетов ArchLinux (поскольку Gentoo не предоставлял эти файлы):
krb5-kdc.service:
# /etc/systemd/system/krb5-kdc.service
------------------------------------
[Unit]
Description=Kerberos 5 KDC
[Service]
ExecStart=/usr/sbin/krb5kdc -n
Restart=always
[Install]
WantedBy=multi-user.target
krb5-kadmind:
# /etc/systemd/system/krb5-kadmind.service
------------------------------------
[Unit]
Description=Kerberos 5 administration server
[Service]
ExecStart=/usr/sbin/kadmind -nofork
[Install]
WantedBy=multi-user.target
Запустите консоль kadmin, используя $ kadmin.local
:
- Создайте принципала:
$ add_principal root/admin@EXAMPLE.COM
- Также создайте принципал для вашего текущего пользователя:
$ add_principal root@EXAMPLE.COM
- Выйти с:
$ quit
или же$ q
Добавьте этот принципал к kadm5.acl
:
# /var/lib/krb5kdc/kadm5.acl
------------------------------------
root/admin@EXAMPLE.COM *
IV - Настройка центра распространения ключей (KDC)
Настройте kdc.conf:
# /var/lib/krb5kdc/kdc.conf
------------------------------------
[kdcdefaults]
kdc_ports = 750,88
[realms]
EXAMPLE.COM = {
database_name = /var/lib/krb5kdc/principal
acl_file = /var/lib/krb5kdc/kadm5.acl
key_stash_file = /var/lib/krb5kdc/.k5.EXAMPLE.COM
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
}
Затем перезапустите сервисы krb5: $ systemctl restart krb5-kdc krb5-kadmind
V - Настройка saslauthd
SASLAuthD - это демон, который будет отлавливать запросы SASL от LDAP и преобразовывать их в запросы Kerberos (или любого другого механизма аутентификации, который вы используете). Это необходимо, если вы хотите использовать пароли вашей службы аутентификации вместо паролей LDAP и разрешают вам, например:
userPassword: {SASL}user@EXAMPLE.COM
согласно которому EXAMPLE.COM
ваше царство и user
является принципалом.
Настройте SASL2 slapd:
# /etc/sasl2/slapd.conf (Gentoo) or /usr/lib/sasl2 (Ubuntu)
------------------------------------
pwcheck_method:saslauthd
Удостовериться saslauthd
использует Kerberos v5:
# /etc/conf.d/saslauthd (Gentoo) or /etc/default/saslauthd (Ubuntu)
------------------------------------
# -a describe the mechanism used
# -m is the working directory, where socket will be located
SASLAUTHD_OPTS="-a kerberos5 -m /run/saslauthd"
Вы можете проверить параметры на странице руководства или используя $ saslauthd -h
, Обязательно используйте соответствующие переменные в этих файлах. Вы можете увидеть, какой из них используется с $ systemctl cat saslauthd
на настройке systemd.
Убедитесь также, что розетка (/run/saslauthd/mux
) доступно для чтения / записи saslauthd
,
Запустите сервис, используя
$ systemctl start saslauthd
и проверить saslauthd
работает с использованием:
$ testsaslauthd -r YOURREALM -u someusernameyouwant -p somepassword
VI - Настройка аутентификации GSSAPI/SASL
Откройте консоль kadmin, используя $ kadmin.local
и создайте принципы GSSAPI и файлы ключей:
Сначала создайте субъект-службу внутри базы данных Kerberos для своего сервера каталогов и создайте файл ключа, содержащий запись для этого субъекта, в конфигурационный каталог openldap.
Вы можете заменить экземпляры example.com
но ldap/
должно быть написано буквально.
$ addprinc -randkey ldap/example.com@EXAMPLE.COM
$ ktadd -k /etc/openldap/ldap.keytab ldap/example.com@EXAMPLE.COM
Затем создайте основной узел для клиента и его таблицу ключей. Вы можете заменить экземпляры example.com
но host/
должно быть написано буквально.
$ addprinc -randkey host/example.com@EXAMPLE.COM
$ ktadd -k /etc/krb5.keytab host/example.com@EXAMPLE.COM
И выйти: $ quit
Удостовериться ldap.keytab
доступно для чтения только пользователю / группе ldap:
$ chown ldap:ldap /etc/openldap/ldap.keytab
$ chmod 640 /etc/openldap/ldap.keytab
Обязательно получите свежий билет Kerberos:
$ kinit
И все готово, вы настроили сервер Kerberos с бэкэндом OpenLDAP.
Теперь вы можете указать OpenLDAP использовать пароли Kerberos при создании / изменении пользователей:
userPassword: {SASL}root@EXAMPLE.COM
Например, вы можете создать file.ldif
содержащий следующее, и добавьте его, используя ldapadd
как раньше:
dn: uid=root,ou=People,dc=example,dc=com
uid: root
cn: root
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {SASL}root@EXAMPLE.COM
loginShell: /bin/zsh
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
Вы также можете искать, используя ldapsearch
без аргументов.
Поиск проблемы
Как мой начальный вопрос сейчас решен
Сервер ldap/example.com@EXAMPLE.COM не найден в базе данных Kerberos)
Вот несколько советов, когда вы столкнетесь с некоторыми проблемами:
Проверьте логи
slapd.service
: Использоватьjournalctl -xe
(Мой тип сервиса неForking
и флаг-d 9
распечатает журнал в системном журнале. Вы можете отключить вход с-d 0
, но держи флаг-d
или объявить это какType: Forking
)krb5-kdc
: Проверять, выписываться/var/log/krb5/kdc.log
или что вы там установили/etc/krb5.conf
krb5-kadmind
: Проверьте/var/log/krb5/kadmind.log
или что вы там установили/etc/krb5.conf
saslauthd
: Вам нужно включить отладку с флагом-d
, Либо бегиsaslauthd
в оболочке с этим флагом или добавить этот флаг/etc/conf.d/saslauthd
(Gentoo) или/etc/default/saslauthd
(Ubuntu) и использоватьjournalctl -xe
чтобы увидеть их.
проблема
Сервер ldap/example.com@EXAMPLE.COM не найден в базе данных Kerberos
Когда я бегу $ ldapsearch
или же $ ldapwhoami
У меня следующая ошибка:
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure.
Minor code may provide more information (Server ldap/example.com@EXAMPLE.COM not found in Kerberos database)
Решение
Убедитесь, что вы правильно выполнили шаги V и VI настройки Kerberos. Вам нужен keytab, читаемый OpenLDAP. Вы можете разместить его там, где хотите, и назвать его как хотите. Также убедитесь, что переменная среды KRB5_KTNAME
устанавливается (либо в службе systemd, либо в вашей системе инициализации / в оболочке, в которой вы запускаете slapd), указывая на эту таблицу ключей.
Таблица ключей хоста должна быть размещена в /etc/krb5.keytab
, Это может быть не важно для ldapsearch / ldapapi (я не проверял, работает ли он без него), но это необходимо для таких демонов, как SSSD.
проблема
ldap_sasl_interactive_bind_s: неверные учетные данные (49)
Когда я бегу $ ldapsearch
или же $ ldapwhoami
У меня следующая ошибка:
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Invalid credentials (49)
additional info: SASL(-13): authentication failure: GSSAPI
Failure: gss_accept_sec_context
Решение
Попробуй обновить твой билет Kerberos: $ kinit
кредиты
Надеюсь, что эти шаги могут помочь некоторым другим начинающим, кредиты идут на:
- https://wiki.archlinux.org/index.php/Kerberos
- https://help.ubuntu.com/lts/serverguide/kerberos-ldap.html
И некоторые другие руководства (проверить Setting Up Kerberos Authentication
на федоре)
1 ответ
Итак, я наконец решил свой ответ:
Мне просто нужно было создать сервер на Kerberos и создать файл ключа, содержащий его.
$ addprinc -randkey ldap/example.com@EXAMPLE.COM
$ ktadd -k /etc/openldap/ldap.keytab ldap/example.com@EXAMPLE.COM
Slapd не знал об этом файле, поэтому я добавил переменную окружения в свой slapd.service:
# /etc/krb5.conf
------------------------------------
Environment="KRB5_KTNAME=FILE:/etc/openldap/ldap.keytab"
Мне также нужно было настроить saslauthd и запустить его:
Настройте демон:
# /etc/conf.d/saslauthd (gentoo) or /etc/default/saslauthd (ubuntu)
------------------------------------
# -a describe the mechanism used
# -m is the working directory, where socket will be located
SASLAUTHD_OPTS="-a kerberos5 -m /run/saslauthd"
Настройте параметры:
# /etc/sasl2/slapd.conf (gentoo) or /usr/lib/sasl2 (ubuntu)
------------------------------------
pwcheck_method:saslauthd
Начни это: $ systemctl start saslauthd
Затем появилась ошибка:
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Invalid credentials (49)
additional info: SASL(-13): authentication failure: GSSAPI
Failure: gss_accept_sec_context
Это потому, что мой билет на Kerberos истек. Я только что побежал $ kinit
и это решило проблему.
Я отредактировал вопрос, чтобы добавить недостающие шаги в раздел "руководство", смело редактируйте имя / улучшайте его / копируйте / вставляйте. Благодарю.