跳转到主要内容

kerberos KDC HTTP代理WSGI模块。

项目描述

欢迎使用kdcdaili!

此包包含一个WSGI模块,用于通过遵循[MS-KKDCP]协议在HTTP上代理KDC请求。它旨在简单部署,配置最小化。

部署kdcdaili

kdcdaili模块遵循标准WSGI协议来部署Python网络应用程序。这使得配置变得简单。只需加载您喜欢的WSGI启用型网络服务器,并将其指向该模块。例如,如果您想使用mod_wsgi,可以尝试以下操作

WSGIDaemonProcess kdcproxy processes=2 threads=15 maximum-requests=1000 \
    display-name=%{GROUP}
WSGIImportScript /usr/lib/python3.6/site-packages/kdcproxy/__init__.py \
    process-group=kdcproxy application-group=kdcproxy
WSGIScriptAlias /KdcProxy /usr/lib/python3.6/site-packages/kdcproxy/__init__.py
WSGIScriptReloading Off

<Location "/KdcProxy">
    Satisfy Any
    Order Deny,Allow
    Allow from all
    WSGIProcessGroup kdcproxy
    WSGIApplicationGroup kdcproxy
</Location>

[MS-KKDCP]建议/KdcProxy作为端点。有关更多信息,请参阅您的WSGI服务器的文档。

配置kdcdaili

当kdcdaili接收到请求时,它需要知道将其代理到哪里。这是配置的目的:发现将kerberos请求发送到何处。

重要提示:如果底层配置未指定TCP或UDP,则将尝试两者。TCP将优先于UDP尝试,因此对于kdcproxy本身而言,无需设置udp_preference_limit = 1(尽管krb5可能仍需要它)。这允许使用更长的超时时间,并防止当KDC数据包包含OTP令牌代码(这些代码应优先发送到单个服务器)时的可能锁定。

自动配置

默认情况下,无需配置。在这种情况下,kdcproxy将使用REALM DNS SRV记录查找来确定远程KDC位置。

主配置文件

如果您希望进行更详细的配置,您可以在主配置文件中配置kdcproxy。该文件位于环境变量KDCPROXY_CONFIG指定的位置。如果没有指定此变量,默认位置为/usr/local/etc/kdcproxy.conf/etc/kdcproxy.conf。此配置文件优先于所有其他配置模块。这是一个ini风格的配置文件,包含一个特殊部分[global]。此部分中有两个参数:configsuse_dns

use_dns参数允许您启用或禁用DNS SRV记录查找的使用。

configs参数允许您加载其他配置模块以在其他位置查找配置。此处指定的配置模块将按照列出的顺序具有优先级。例如,如果您希望从MIT libkrb5读取配置,您将设置以下内容:

[global] configs = mit

除了[global]部分之外,您还可以为领域指定手动配置。在这种情况下,每个部分是领域的名称,参数是kerberoskpasswd。这些指定了krb5 AS请求和kpasswd请求的远程服务器位置。例如:

[EXAMPLE.COM] kerberos = kerberos+tcp://kdc.example.com:88 kpasswd = kpasswd+tcp://kpasswd.example.com:464

领域配置参数可以列出多个服务器,它们由空格分隔。kdcproxy将按照指定的顺序尊重领域。端口号是可选的。可能的方案包括:

  • kerberos://

  • kerberos+tcp://

  • kerberos+udp://

  • kpasswd://

  • kpasswd+tcp://

  • kpasswd+udp://

MIT libkrb5

如果您在主配置文件中加载了mit配置模块,kdcproxy还将使用libkrb5(通常位于/etc/krb5.conf)读取配置。如果使用此模块,kdcproxy将尊重[libdefaults]部分中的DNS设置以及[realms]部分中的领域配置。

有关更多信息,请参阅MIT的krb5.conf文档。

配置重新加载

kdcproxy在导入包和实例化全局WSGI应用程序对象时读取其配置文件。目前,kdcproxy既不监视其配置文件的变化,也不支持运行时更新。您必须重新启动WSGI进程才能使修改生效。使用Apache HTTP和mod_wsgi时,服务器的重新加载也会重新启动所有WSGI守护进程。

配置kdcproxy客户端

自Kerberos 5发布1.13以来,HTTPS代理支持可用。一些供应商已将该功能回滚到krb5的旧版本。要使用HTTPS代理,只需将kdc和kpasswd选项指向代理URL,如[HTTPS代理]配置指南中所述。您的/etc/krb5.conf可能如下所示:

[libdefaults]
    default_realm = EXAMPLE.COM

[realms]
    EXAMPLE.COM = {
        http_anchors = FILE:/etc/krb5/cacert.pem
        kdc = https://kerberos.example.com/KdcProxy
        kpasswd_server = https://kerberos.example.com/KdcProxy
}

要调试此功能,将环境变量KRB5_TRACE设置为/dev/stdout。当此功能配置正确时,您应在WSGI服务器的访问日志中看到两个POST请求,并在kinit的调试输出中看到包含Sending HTTPS request的一行。

$ env KRB5_TRACE=/dev/stdout kinit user
[1037] 1431509096.26305: Getting initial credentials for user@EXAMPLE.COM
[1037] 1431509096.26669: Sending request (169 bytes) to EXAMPLE.COM
[1037] 1431509096.26939: Resolving hostname kerberos.example.com
[1037] 1431509096.34377: TLS certificate name matched "kerberos.example.com"
[1037] 1431509096.38791: Sending HTTPS request to https 128.66.0.1:443
[1037] 1431509096.46387: Received answer (344 bytes) from https 128.66.0.1:443
[1037] 1431509096.46411: Terminating TCP connection to https 128.66.0.1:443
...

如果kinit仍然连接到端口88/TCP或端口88/UDP,则系统安全服务守护进程的Kerberos定位器插件可能会覆盖/etc/krb5.conf中的设置。使用环境变量SSSD_KRB5_LOCATOR_DEBUG=1,kinit和sssd_krb5_locator_plugin将打印出额外的调试信息。要禁用KDC定位器功能,请编辑/etc/sssd/sssd.conf并将krb5_use_kdcinfo设置为False

[domain/example.com] krb5_use_kdcinfo = False

别忘了重新启动SSSD!

[MS-KKDCP]: http://msdn.microsoft.com/en-us/library/hh553774.aspx

[HTTPS代理]: http://web.mit.edu/kerberos/krb5-current/doc/admin/https.html

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

kdcproxy-1.0.0.tar.gz (22.3 kB 查看哈希值)

上传时间

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面