gpt4 book ai didi

ldap - 在Kerberos数据库中找不到服务器ldap/example.com@EXAMPLE.COM

转载 作者:行者123 更新时间:2023-12-01 18:28:34 28 4
gpt4 key购买 nike

编辑:问题终于解决了。详细信息可以在此消息末尾的疑难解答部分中找到。

我在这里保留了详细的步骤,以防可能对某人有所帮助。

设置OpenLDAP

I-创建服务器

该文档通常已经过时,并且您会找到多种实现相同方法的方法。
根据我阅读的内容,创建服务器的现代方法是使用/etc/openldap/slapd.ldif而不是/etc/openldap/slapd.conf。以下是使用letencrypt证书的示例配置。

您通常可以通过在slapd.conf前面加上slapd.ldif来转换olc指令。只要确保它在正确的dn块中即可。

确保创建ldap用户可读写的目录/etc/openldap/slapd.d,并且该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}


然后添加构建DIT的ldif文件:

$ 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

I-配置服务器

服务器配置(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

这也称为(aka) stash file

III-创建主体

启动MIT Kerberos v5服务(krb5):

$ systemctl start krb5-kdc krb5-kadmind

系统服务已从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.local启动kadmin控制台:


创建主体: $ 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是守护程序,它将捕获来自LDAP的 SASL请求并将其转换为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检查参数。确保在此文件中使用适当的变量。您可以在systemd设置中看到与 $ systemctl cat saslauthd一起使用的一个。

还要确保套接字( /run/saslauthd/mux)是 saslauthd可读/可写的。

使用启动服务

$ systemctl start saslauthd

并使用以下命令检查 saslauthd是否正常工作:

$ testsaslauthd -r YOURREALM -u someusernameyouwant -p somepassword

VI-设置GSSAPI / SASL身份验证

使用 $ kadmin.local打开kadmin控制台,并创建 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


完成后,您已经设置了带有OpenLDAP后端的Kerberos服务器。

现在,您可以在创建/修改用户时告诉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搜索。

故障排除

由于我的第一个问题现在已经解决


在Kerberos数据库中找不到服务器ldap/example.com@EXAMPLE.COM)


遇到问题时,这里有一些提示:

检查日志


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启用调试。在带有此标志的shell中运行 saslauthd或将此标志添加到 /etc/conf.d/saslauthd(Gentoo)或 /etc/default/saslauthd(Ubuntu),然后使用 journalctl -xe进行查看。


问题


在Kerberos数据库中找不到服务器ldap/example.com@EXAMPLE.COM


当我运行 $ 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)




检查您是否正确遵循了Kerberos设置的步骤V和VI。您需要一个可被OpenLDAP读取的密钥表。您可以将其放置在所需的位置,并根据需要命名。还要确保设置了环境变量 KRB5_KTNAME(在systemd服务中或在您的init系统中/在运行slapd的外壳中),指向该keytab。

主机密钥表应放置在 /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


和其他一些指南(在Fedora上查看 Setting Up Kerberos Authentication

最佳答案

好的,所以我终于解决了我的答案:

我只需要在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,它解决了问题。

我对问题进行了编辑,以将缺少的步骤添加到“指南”部分,可以随时编辑名称/改进名称/复制/粘贴。谢谢。

关于ldap - 在Kerberos数据库中找不到服务器ldap/example.com@EXAMPLE.COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45566096/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com