我在centos虚拟机中设置了ldap服务器+ kerberos (使用boot2docker虚拟机运行),并尝试将它们用于我的web应用程序身份验证(从主机-我的macbook)。
对于身份验证,我需要使用"GSSAPI“机制,而不是简单的绑定。“简单绑定”运行良好,但基于"GSSAPI“的方法不起作用。
每当我尝试" ldapwhoami“命令时,我都会得到以下错误(我在运行ldapwhoami之前运行了'kinit‘,以确保我拥有有效的kerberos TGT)
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Miscellaneous failure (see text (unable to reach any KDC in realm DEV.EXAMPLE.COM, tried 1 KDC)请注意,LDAP服务器和kerberos服务器端工作得很好,这意味着我在centos VM中使用"ldapsearch“、"ldapwhoami”之类的东西对它们进行了测试,这是我的ldap服务器+ kerberos设置的地方,它工作得很好。我能够看到它们的适当输出。
只有当我尝试从我的笔记本电脑(客户端)执行相同的命令时,我才会收到错误(上面的错误)。
注意:即使我从我的笔记本电脑创建了主机主体( host /mymacbook.dev@DEV.EXAMPLE.COM),并使用'kadmin‘将其添加到我的本地krb5.keytab文件中。
下面是我的客户端配置:
客户端(Macbook)中的/etc/krb5.conf文件:
[libdefaults]
default_realm = DEV.EXAMPLE.COM
ticket_lifetime = 24000
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
DEV.EXAMPLE.COM = {
kdc = d4dc7089282c
admin_server = krb.example.com
}
[domain_realm]
.dev.example.com = DEV.EXAMPLE.COM
dev.example.com = DEV.EXAMPLE.COM
.example.com = DEV.EXAMPLE.COM
example.com = DEV.EXAMPLE.COM
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[logging]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log客户端(Macbook)中的/etc/hosts文件:
127.0.0.1 localhost
192.168.59.3 mymacbook.dev
255.255.255.255 broadcasthost
::1 localhost
192.168.59.103 ldapserver.example.com
192.168.59.103 d4dc7089282c
192.168.59.103 krb.example.com192.168.59.103是我的boot2docker vm ip,我在与boot2docker和kerberos相关的所有默认端口( 88、389、464和749)上执行从LDAP到扩展坞镜像的端口转发
你知道为什么我会得到这个错误吗?
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Miscellaneous failure (see text (unable to reach any KDC in realm DEV.EXAMPLE.COM, tried 1 KDC)它与DNS或其他什么相关吗?有什么建议吗?
发布于 2014-11-25 08:00:47
要使容器化的KDC能够从外部访问,您需要多个东西。
假设您正在使用端口88,因为这是默认端口,并且还假设您的映像名为docker-kdc。
EXPOSE 88
ENTRYPOINT ["/usr/lib/heimdal-servers/kdc", "--config-file=/etc/heimdal-kdc/kdc.conf", "-P 88"]
。
docker run -d -h kdc --name kdc -p 48088:88/udp -p 48088:88 docker-kdc
从现在开始,您的KDC应该可以从主机系统内访问了。
仅限=== OSX ===
考虑到您使用的是OSX (boot2docker -> VirtualBox),您现在还需要设置到OSX environment.的端口转发
VBoxManage controlvm boot2docker-vm natpf1 "48088/tcp,tcp,127.0.0.1,48088,,48088"
VBoxManage controlvm boot2docker-vm natpf1 "48088/udp,udp,127.0.0.1,48088,,48088"
- When using plain docker (on linux), you can simply use the loopback `127.0.0.1`.
- When using boot2docker (on OSX), you will get that using: `boot2docker ip`
krb5.conf准备一个使用
库默认值
default_realm = EXAMPLE.COM无地址= true
领域
EXAMPLE.COM ={ kdc = IP:48088 admin_server = IP:48088 }
domain_realm
example.com = EXAMPLE.COM .example.com = EXAMPLE.COM
现在,请继续测试configuration.和
export KRB5_CONF=PATH_TO_THE_KRB5.CONF_FILE_FROM_STEP_6
kinit test/foo.example.com@EXAMPLE.COM
由于我必须为我的一个项目执行此操作,因此我将其打包到一些小脚本中,这可能会对您的进一步研究有所帮助;https://github.com/tillt/docker-kdc
发布于 2017-02-15 01:18:24
在MacOS上,默认客户端不会回退到TCP。在您的krb.conf中,在kdc前加上TCP,以便在您的网络阻止tcp/流量时强制客户端使用TCP(一些网络管理员可能会这样做)。
kdc = tcp/ds01.int.domain.com:88发布于 2017-01-13 05:12:06
确保krb5.conf文件位于/etc目录中。我有同样的问题,没有防火墙问题,仍然得到同样的错误。最后,我能够通过将krb5.conf文件移动到/etc目录来修复这个问题。
https://stackoverflow.com/questions/27053539
复制相似问题